!% $MAX_ARRAYS=1500 !% $MAX_CLASSES=200 !% $MAX_VERBS=255 !% $MAX_LABELS=10000 !% $MAX_ZCODE_SIZE=100000 !% $MAX_STATIC_DATA=180000 !% $MAX_PROP_TABLE_SIZE=300000 !% $MAX_INDIV_PROP_TABLE_SIZE=20000 !% $MAX_STACK_SIZE=65536 !% $MAX_SYMBOLS=20000 !% $MAX_EXPRESSION_NODES=256 Constant Grammar__Version 2; ! This file was compiled by Inform 7: the build number and version of the ! I6 template layer used are as follows. Constant NI_BUILD_COUNT "6G60"; Constant LibSerial = "080126"; Constant LibRelease = "6/12N"; Constant LIBRARY_VERSION = 612; Constant PLUGIN_FILES; Array UUID_ARRAY string "UUID://AC0DAF65-F40F-4A41-A4E4-50414F836E14//"; Constant Story "Kerkerkruip - Release 2"; Constant Headline SC_2; Constant Story_Author SC_3; Release 2; Serial "120626"; Default Story 0; Default Headline 0; [ ShowExtensionVersions; print "Standard Rules version 2/090402 by Graham Nelson^"; print "Epistemology version 6 by Eric Eve^"; print "Numbered Disambiguation Choices version 5 by Aaron Reed^"; print "Dynamic Objects version 6/101226 by Jesse McGrew^"; print "Alternative Permadeath by Victor Gijsbers^"; print "Inform ATTACK version 4/120609 by Victor Gijsbers (GPL 3 licenced)^"; print "Dynamic Tables version 3/100623 by Jesse McGrew^"; ]; [ ShowFullExtensionVersions; print "Standard Rules version 2/090402 by Graham Nelson^"; print "Menus version 3 by Emily Short^"; print "Basic Screen Effects version 7 by Emily Short^"; print "Epistemology version 6 by Eric Eve^"; print "Numbered Disambiguation Choices version 5 by Aaron Reed^"; print "Glulx Entry Points version 9 by Emily Short^"; print "Dynamic Objects version 6/101226 by Jesse McGrew^"; print "Alternative Permadeath by Victor Gijsbers^"; print "Inform ATTACK version 4/120609 by Victor Gijsbers (GPL 3 licenced)^"; print "Kerkerkruip Dungeon Generation by Victor Gijsbers^"; print "Kerkerkruip Events by Victor Gijsbers^"; print "Kerkerkruip ATTACK Additions by Victor Gijsbers^"; print "Kerkerkruip Systems by Victor Gijsbers^"; print "Kerkerkruip Systems - Hiding Smoke Ethereal by Victor Gijsbers^"; print "Kerkerkruip Items by Victor Gijsbers^"; print "Kerkerkruip Locations by Victor Gijsbers^"; print "Kerkerkruip Scenery by Victor Gijsbers^"; print "Kerkerkruip Monsters by Victor Gijsbers^"; print "Kerkerkruip Events and Specials by Victor Gijsbers^"; print "Kerkerkruip Ugly Special Cases by Victor Gijsbers^"; print "Kerkerkruip Actions and UI by Victor Gijsbers^"; print "Kerkerkruip Start and Finish by Victor Gijsbers^"; print "Kerkerkruip Final Declarations by Victor Gijsbers^"; print "Dynamic Tables version 3/100623 by Jesse McGrew^"; print "Inform ATTACK Core version 4/120609 by Victor Gijsbers (GPL 3 licenced)^"; print "Plurality version 9 by Emily Short^"; ]; ! Use option: Constant DynamicMemoryAllocation = 8192; ! Use option: Constant IT_MemoryBufferSize = 1024+3; ! Use option: Constant MATCH_LIST_WORDS = 100; ! Use option: Constant PREVENT_UNDO; #Ifndef WORDSIZE; ! compiling with Z-code only compiler Constant TARGET_ZCODE; Constant WORDSIZE 2; #Endif; #Iftrue (WORDSIZE == 2); Constant NULL = $ffff; Constant WORD_HIGHBIT = $8000; Constant WORD_NEXTTOHIGHBIT = $4000; Constant IMPROBABLE_VALUE = $7fe3; Constant MAX_POSITIVE_NUMBER 32767; Constant MIN_NEGATIVE_NUMBER -32768; Constant REPARSE_CODE = 10000; #Endif; #Iftrue (WORDSIZE == 4); Constant NULL = $ffffffff; Constant WORD_HIGHBIT = $80000000; Constant WORD_NEXTTOHIGHBIT = $40000000; Constant IMPROBABLE_VALUE = $deadce11; Constant MAX_POSITIVE_NUMBER 2147483647; Constant MIN_NEGATIVE_NUMBER -2147483648; Constant REPARSE_CODE = $40000000; #Endif; #Ifdef TARGET_ZCODE; Global max_z_object; Constant INDIV_PROP_START 64; ! Offsets into Z-machine header: Constant HDR_ZCODEVERSION = $00; ! byte Constant HDR_TERPFLAGS = $01; ! byte Constant HDR_GAMERELEASE = $02; ! word Constant HDR_HIGHMEMORY = $04; ! word Constant HDR_INITIALPC = $06; ! word Constant HDR_DICTIONARY = $08; ! word Constant HDR_OBJECTS = $0A; ! word Constant HDR_GLOBALS = $0C; ! word Constant HDR_STATICMEMORY = $0E; ! word Constant HDR_GAMEFLAGS = $10; ! word Constant HDR_GAMESERIAL = $12; ! six ASCII characters Constant HDR_ABBREVIATIONS = $18; ! word Constant HDR_FILELENGTH = $1A; ! word Constant HDR_CHECKSUM = $1C; ! word Constant HDR_TERPNUMBER = $1E; ! byte Constant HDR_TERPVERSION = $1F; ! byte Constant HDR_SCREENHLINES = $20; ! byte Constant HDR_SCREENWCHARS = $21; ! byte Constant HDR_SCREENWUNITS = $22; ! word Constant HDR_SCREENHUNITS = $24; ! word Constant HDR_FONTWUNITS = $26; ! byte Constant HDR_FONTHUNITS = $27; ! byte Constant HDR_ROUTINEOFFSET = $28; ! word Constant HDR_STRINGOFFSET = $2A; ! word Constant HDR_BGCOLOUR = $2C; ! byte Constant HDR_FGCOLOUR = $2D; ! byte Constant HDR_TERMCHARS = $2E; ! word Constant HDR_PIXELSTO3 = $30; ! word Constant HDR_TERPSTANDARD = $32; ! two bytes Constant HDR_ALPHABET = $34; ! word Constant HDR_EXTENSION = $36; ! word Constant HDR_UNUSED = $38; ! two words Constant HDR_INFORMVERSION = $3C; ! four ASCII characters #Endif; #IFDEF TARGET_GLULX; Global unicode_gestalt_ok; ! Set if interpreter supports Unicode ! Offsets into Glulx header and start of ROM: Constant HDR_MAGICNUMBER = $00; ! long word Constant HDR_GLULXVERSION = $04; ! long word Constant HDR_RAMSTART = $08; ! long word Constant HDR_EXTSTART = $0C; ! long word Constant HDR_ENDMEM = $10; ! long word Constant HDR_STACKSIZE = $14; ! long word Constant HDR_STARTFUNC = $18; ! long word Constant HDR_DECODINGTBL = $1C; ! long word Constant HDR_CHECKSUM = $20; ! long word Constant ROM_INFO = $24; ! four ASCII characters Constant ROM_MEMORYLAYOUT = $28; ! long word Constant ROM_INFORMVERSION = $2C; ! four ASCII characters Constant ROM_COMPVERSION = $30; ! four ASCII characters Constant ROM_GAMERELEASE = $34; ! short word Constant ROM_GAMESERIAL = $36; ! six ASCII characters #Endif; Array PowersOfTwo_TB --> $$100000000000 $$010000000000 $$001000000000 $$000100000000 $$000010000000 $$000001000000 $$000000100000 $$000000010000 $$000000001000 $$000000000100 $$000000000010 $$000000000001; Array IncreasingPowersOfTwo_TB --> $$0000000000000001 $$0000000000000010 $$0000000000000100 $$0000000000001000 $$0000000000010000 $$0000000000100000 $$0000000001000000 $$0000000010000000 $$0000000100000000 $$0000001000000000 $$0000010000000000 $$0000100000000000 $$0001000000000000 $$0010000000000000 $$0100000000000000 $$1000000000000000; Constant NORMAL_VMSTY = 0; Constant HEADER_VMSTY = 3; Constant SUBHEADER_VMSTY = 4; Constant ALERT_VMSTY = 5; Constant NOTE_VMSTY = 6; Constant BLOCKQUOTE_VMSTY = 7; Constant INPUT_VMSTY = 8; Constant CLR_DEFAULT = 1; Constant CLR_BLACK = 2; Constant CLR_RED = 3; Constant CLR_GREEN = 4; Constant CLR_YELLOW = 5; Constant CLR_BLUE = 6; Constant CLR_MAGENTA = 7; Constant CLR_PURPLE = 7; Constant CLR_CYAN = 8; Constant CLR_AZURE = 8; Constant CLR_WHITE = 9; Constant WIN_ALL = 0; ! Both windows at once Constant WIN_STATUS = 1; Constant WIN_MAIN = 2; Constant PARA_COMPLETED = 1; Constant PARA_PROMPTSKIP = 2; Constant PARA_SUPPRESSPROMPTSKIP = 4; Constant PARA_NORULEBOOKBREAKS = 8; Constant PARA_CONTENTEXPECTED = 16; Constant POSSESS_PK = $100; Constant DEFART_PK = $101; Constant INDEFART_PK = $102; Constant RTP_BACKDROP = 1; Constant RTP_EXITDOOR = 2; Constant RTP_NOEXIT = 3; Constant RTP_CANTCHANGE = 4; Constant RTP_IMPREL = 5; Constant RTP_RULESTACK = 6; Constant RTP_TOOMANYRULEBOOKS = 7; Constant RTP_TOOMANYEVENTS = 8; Constant RTP_BADPROPERTY = 9; Constant RTP_UNPROVIDED = 10; Constant RTP_UNSET = 11; Constant RTP_TOOMANYACTS = 12; Constant RTP_CANTABANDON = 13; Constant RTP_CANTEND = 14; Constant RTP_CANTMOVENOTHING = 15; Constant RTP_CANTREMOVENOTHING = 16; Constant RTP_DIVZERO = 17; Constant RTP_BADVALUEPROPERTY = 18; Constant RTP_NOTBACKDROP = 19; Constant RTP_TABLE_NOCOL = 20; Constant RTP_TABLE_NOCORR = 21; Constant RTP_TABLE_NOROW = 22; Constant RTP_TABLE_NOENTRY = 23; Constant RTP_TABLE_NOTABLE = 24; Constant RTP_TABLE_NOMOREBLANKS = 25; Constant RTP_TABLE_NOROWS = 26; Constant RTP_TABLE_CANTSORT = 27; Constant RTP_NOTINAROOM = 28; Constant RTP_BADTOPIC = 29; Constant RTP_ROUTELESS = 30; Constant RTP_PROPOFNOTHING = 31; Constant RTP_DECIDEONWRONGKIND = 32; Constant RTP_DECIDEONNOTHING = 33; Constant RTP_TABLE_CANTSAVE = 34; Constant RTP_TABLE_WONTFIT = 35; Constant RTP_TABLE_BADFILE = 36; Constant RTP_LOWLEVELERROR = 37; Constant RTP_DONTIGNORETURNSEQUENCE = 38; Constant RTP_SAYINVALIDSNIPPET = 39; Constant RTP_SPLICEINVALIDSNIPPET = 40; Constant RTP_INCLUDEINVALIDSNIPPET = 41; Constant RTP_LISTWRITERMEMORY = 42; Constant RTP_CANTREMOVEPLAYER = 43; Constant RTP_CANTREMOVEDOORS = 44; Constant RTP_CANTCHANGEOFFSTAGE = 45; Constant RTP_MSTACKMEMORY = 46; Constant RTP_TYPECHECK = 47; Constant RTP_FILEIOERROR = 48; Constant RTP_HEAPERROR = 49; Constant RTP_LISTRANGEERROR = 50; Constant RTP_REGEXPSYNTAXERROR = 51; Constant RTP_NOGLULXUNICODE = 52; Constant RTP_BACKDROPONLY = 53; Constant RTP_NOTTHING = 54; Constant RTP_SCENEHASNTSTARTED = 55; Constant RTP_SCENEHASNTENDED = 56; Constant RTP_NEGATIVEROOT = 57; Constant RTP_TABLE_CANTRUNTHROUGH = 58; Constant RTP_CANTITERATE = 59; Constant RTP_WRONGASSIGNEDKIND = 60; Constant PRINTING_THE_NAME_ACT = 0; Constant PRINTING_THE_PLURAL_NAME_ACT = 1; Constant PRINTING_A_NUMBER_OF_ACT = 2; Constant PRINTING_ROOM_DESC_DETAILS_ACT = 3; Constant LISTING_CONTENTS_ACT = 4; Constant GROUPING_TOGETHER_ACT = 5; Constant WRITING_A_PARAGRAPH_ABOUT_ACT = 6; Constant LISTING_NONDESCRIPT_ITEMS_ACT = 7; Constant PRINTING_NAME_OF_DARK_ROOM_ACT = 8; Constant PRINTING_DESC_OF_DARK_ROOM_ACT = 9; Constant PRINTING_NEWS_OF_DARKNESS_ACT = 10; Constant PRINTING_NEWS_OF_LIGHT_ACT = 11; Constant REFUSAL_TO_ACT_IN_DARK_ACT = 12; Constant CONSTRUCTING_STATUS_LINE_ACT = 13; Constant PRINTING_BANNER_TEXT_ACT = 14; Constant READING_A_COMMAND_ACT = 15; Constant DECIDING_SCOPE_ACT = 16; Constant DECIDING_CONCEALED_POSSESS_ACT = 17; Constant DECIDING_WHETHER_ALL_INC_ACT = 18; Constant CLARIFYING_PARSERS_CHOICE_ACT = 19; Constant ASKING_WHICH_DO_YOU_MEAN_ACT = 20; Constant PRINTING_A_PARSER_ERROR_ACT = 21; Constant SUPPLYING_A_MISSING_NOUN_ACT = 22; Constant SUPPLYING_A_MISSING_SECOND_ACT = 23; Constant IMPLICITLY_TAKING_ACT = 24; Constant STARTING_VIRTUAL_MACHINE_ACT = 25; Constant AMUSING_A_VICTORIOUS_PLAYER_ACT = 26; Constant PRINTING_PLAYERS_OBITUARY_ACT = 27; Constant DEALING_WITH_FINAL_QUESTION_ACT = 28; Constant PRINTING_LOCALE_DESCRIPTION_ACT = 29; Constant CHOOSING_NOTABLE_LOCALE_OBJ_ACT = 30; Constant PRINTING_LOCALE_PARAGRAPH_ACT = 31; Constant PROCEDURAL_RB = 0; Constant STARTUP_RB = 1; Constant TURN_SEQUENCE_RB = 2; Constant SHUTDOWN_RB = 3; Constant WHEN_PLAY_BEGINS_RB = 5; Constant WHEN_PLAY_ENDS_RB = 6; Constant WHEN_SCENE_BEGINS_RB = 7; Constant WHEN_SCENE_ENDS_RB = 8; Constant ACTION_PROCESSING_RB = 10; Constant SETTING_ACTION_VARIABLES_RB = 11; Constant SPECIFIC_ACTION_PROCESSING_RB = 12; Constant ACCESSIBILITY_RB = 14; Constant REACHING_INSIDE_RB = 15; Constant REACHING_OUTSIDE_RB = 16; Constant VISIBLE_RB = 17; Constant PERSUADE_RB = 18; Constant UNSUCCESSFUL_ATTEMPT_RB = 19; Constant AFTER_RB = 24; Constant REPORT_RB = 25; Constant UNKNOWN_TY = 1; Constant VALUE_TY = 2; Constant POINTER_VALUE_TY = 3; Constant WORD_VALUE_TY = 4; Constant ARITHMETIC_VALUE_TY = 5; Constant ENUMERATED_VALUE_TY = 6; Constant SAYABLE_VALUE_TY = 7; Constant COMBINED_VALUE_TY = 8; Constant OBJECT_TY = 9; Constant NUMBER_TY = 10; Constant TRUTH_STATE_TY = 11; Constant TEXT_TY = 12; Constant INDEXED_TEXT_TY = 13; Constant UNICODE_CHARACTER_TY = 14; Constant USE_OPTION_TY = 15; Constant SNIPPET_TY = 16; Constant TABLE_TY = 17; Constant EQUATION_TY = 18; Constant RULEBOOK_OUTCOME_TY = 19; Constant UNDERSTANDING_TY = 20; Constant INTERMEDIATE_TY = 21; Constant NIL_TY = 22; Constant KIND_VARIABLE_TY = 23; Constant PHRASE_TY = 24; Constant TUPLE_ENTRY_TY = 25; Constant RELATION_TY = 26; Constant RULE_TY = 27; Constant RULEBOOK_TY = 28; Constant ACTIVITY_TY = 29; Constant LIST_OF_TY = 30; Constant DESCRIPTION_OF_TY = 31; Constant PROPERTY_TY = 32; Constant TABLE_COLUMN_TY = 33; Constant COMBINATION_TY = 34; Constant DESCRIPTION_OF_ACTION_TY = 35; Constant STORED_ACTION_TY = 36; Constant ACTION_NAME_TY = 37; Constant TIME_TY = 38; Constant SCENE_TY = 39; Constant FIGURE_NAME_TY = 40; Constant SOUND_NAME_TY = 41; Constant EXTERNAL_FILE_TY = 42; Constant BASE_KIND_HWM = 58; ! Base kind high-water-mark Constant STUCK_PE = 1; Constant UPTO_PE = 2; Constant NUMBER_PE = 3; Constant ANIMA_PE = 4; Constant CANTSEE_PE = 5; Constant TOOLIT_PE = 6; Constant NOTHELD_PE = 7; Constant MULTI_PE = 8; Constant MMULTI_PE = 9; Constant VAGUE_PE = 10; Constant EXCEPT_PE = 11; Constant VERB_PE = 12; Constant SCENERY_PE = 13; Constant ITGONE_PE = 14; Constant JUNKAFTER_PE = 15; Constant TOOFEW_PE = 16; Constant NOTHING_PE = 17; Constant ASKSCOPE_PE = 18; Constant NOTINCONTEXT_PE = 19; Constant BLANKLINE_PE = 20; ! Not formally a parser error, but used by I7 as if Constant PARSING_REASON = 0; Constant TALKING_REASON = 1; Constant EACH_TURN_REASON = 2; Constant LOOPOVERSCOPE_REASON = 5; Constant TESTSCOPE_REASON = 6; Constant ILLEGAL_TT = 0; ! Types of grammar token: illegal Constant ELEMENTARY_TT = 1; ! (one of those below) Constant PREPOSITION_TT = 2; ! e.g. 'into' Constant ROUTINE_FILTER_TT = 3; ! e.g. noun=CagedCreature Constant ATTR_FILTER_TT = 4; ! e.g. edible Constant SCOPE_TT = 5; ! e.g. scope=Spells Constant GPR_TT = 6; ! a general parsing routine Constant NOUN_TOKEN = 0; ! The elementary grammar tokens, and Constant HELD_TOKEN = 1; ! the numbers compiled by I6 to Constant MULTI_TOKEN = 2; ! encode them Constant MULTIHELD_TOKEN = 3; Constant MULTIEXCEPT_TOKEN = 4; Constant MULTIINSIDE_TOKEN = 5; Constant CREATURE_TOKEN = 6; Constant SPECIAL_TOKEN = 7; Constant NUMBER_TOKEN = 8; Constant TOPIC_TOKEN = 9; Constant ENDIT_TOKEN = 15; ! Value used to mean "end of grammar line" Constant GPR_FAIL = -1; ! Return values from General Parsing Constant GPR_PREPOSITION = 0; ! Routines Constant GPR_NUMBER = 1; Constant GPR_MULTIPLE = 2; Constant GPR_REPARSE = REPARSE_CODE; Constant GPR_NOUN = -256; ! Reparse, but as |NOUN_TOKEN| this time Constant GPR_HELD = GPR_NOUN + 1; ! And so on Constant GPR_MULTI = GPR_NOUN + 2; Constant GPR_MULTIHELD = GPR_NOUN + 3; Constant GPR_MULTIEXCEPT = GPR_NOUN + 4; Constant GPR_MULTIINSIDE = GPR_NOUN + 5; Constant GPR_CREATURE = GPR_NOUN + 6; Constant NEWLINE_BIT = $$0000000000000001; ! New-line after each entry Constant INDENT_BIT = $$0000000000000010; ! Indent each entry by depth Constant FULLINV_BIT = $$0000000000000100; ! Full inventory information after entry Constant ENGLISH_BIT = $$0000000000001000; ! English sentence style, with commas and and Constant RECURSE_BIT = $$0000000000010000; ! Recurse downwards with usual rules Constant ALWAYS_BIT = $$0000000000100000; ! Always recurse downwards Constant TERSE_BIT = $$0000000001000000; ! More terse English style Constant PARTINV_BIT = $$0000000010000000; ! Only brief inventory information after entry Constant DEFART_BIT = $$0000000100000000; ! Use the definite article in list Constant WORKFLAG_BIT = $$0000001000000000; ! At top level (only), only list objects ! which have the "workflag" attribute Constant ISARE_BIT = $$0000010000000000; ! Print " is" or " are" before list Constant CONCEAL_BIT = $$0000100000000000; ! Omit objects with "concealed" or "scenery": ! if WORKFLAG_BIT also set, then does not ! apply at top level, but does lower down Constant NOARTICLE_BIT = $$0001000000000000; ! Print no articles, definite or not Constant EXTRAINDENT_BIT = $$0010000000000000; ! New in I7: extra indentation of 1 level Constant CFIRSTART_BIT = $$0100000000000000; ! Capitalise first article in list Constant QUARTER_HOUR = 15; Constant HALF_HOUR = 30; Constant ONE_HOUR = 60; Constant TWELVE_HOURS = 720; Constant TWENTY_FOUR_HOURS = 1440; Constant EMPTY_TEXT_VALUE ""; Array TheEmptyTable --> 0 0; Array EMPTY_RULEBOOK -> $ff $ff $ff $ff; [ Prop_Falsity reason obj; return 0; ]; Global MAX_SCORE = 18; #Ifndef MAX_SCORE; Global MAX_SCORE = 0; #Endif; Attribute absent; ! Used to mark objects removed from play Attribute animate; ! I6-level marker for I7 kind "person" Attribute clothing; ! = I7 "wearable" Attribute concealed; ! = I7 "undescribed" Attribute container; ! I6-level marker for I7 kind "container" Attribute door; ! I6-level marker for I7 kind "door" Attribute edible; ! = I7 "edible" vs "inedible" Attribute enterable; ! = I7 "enterable" Attribute light; ! = I7 "lighted" vs "dark" Attribute lockable; ! = I7 "lockable" Attribute locked; ! = I7 "locked" Attribute moved; ! = I7 "handled" Attribute on; ! = I7 "switched on" vs "switched off" Attribute open; ! = I7 "open" vs "closed" Attribute openable; ! = I7 "openable" Attribute scenery; ! = I7 "scenery" Attribute static; ! = I7 "fixed in place" vs "portable" Attribute supporter; ! I6-level marker for I7 kind "supporter" Attribute switchable; ! I6-level marker for I7 kind "device" Attribute talkable; ! Not currently used by I7, but retained for possible future use Attribute transparent; ! = I7 "transparent" vs "opaque" Attribute visited; ! = I7 "visited" Attribute worn; ! marks that an object tree edge represents wearing Attribute male; ! not directly used by I7, but available for languages with genders Attribute female; ! = I7 "female" vs "male" Attribute neuter; ! = I7 "neuter" Attribute pluralname; ! = I7 "plural-named" Attribute proper; ! = I7 "proper-named" Attribute remove_proper; ! remember to remove proper again when using ChangePlayer next Attribute privately_named; ! New in I7 Attribute mentioned; ! New in I7 Attribute pushable; ! New in I7 Attribute mark_as_room; ! Used in I7 to speed up testing "ofclass K1_room" Attribute mark_as_thing; ! Used in I7 to speed up testing "ofclass K2_thing" Attribute workflag; ! = I7 "marked for listing", but basically temporary workspace Attribute workflag2; ! new in I7 and also temporary workspace Constant list_filter_permits = privately_named; ! another I7 listwriter convenience Property add_to_scope; ! used as in I6 to place component parts in scope Property article "a"; ! used as in I6 to implement articles Property capacity 100; ! = I7 "carrying capacity" Property component_child; ! new in I7: forest structure holding "part of" relation Property component_parent; ! new in I7 Property component_sibling; ! new in I7 Property description; ! = I7 "description" Property door_dir; ! used to implement two-sided doors, but holds direction object, not a property Property door_to; ! used as in I6 to implement two-sided doors Property found_in; ! used as in I6 to implement two-sided doors and backdrops Property initial; ! = I7 "initial description" Property list_together; ! used as in I6 to implement "grouping together" activity Property map_region; ! new in I7 Property parse_name 0; ! used as in I6 to implement "Understand... as..." grammars Property plural; ! used as in I6 to implement plural names for duplicate objects Property regional_found_in; ! new in I7 Property room_index; ! new in I7: storage for route-finding Property short_name 0; ! = I7 "printed name" Property vector; ! new in I7: storage for route-finding Property with_key; ! = I7 "matching key" Property KD_Count; ! Instance count of the kind of the current object Property IK1_Count; ! These are instance counts within kinds K1, K2, ... Property IK2_Count; ! and it is efficient to declare the common ones with Property Property IK4_Count; ! since this results in a slightly smaller story file Property IK5_Count; Property IK6_Count; Property IK8_Count; Property IK1_link; ! These are for linked lists used to make searches faster Property IK2_link; ! and again it's memory-efficient to declare the common ones Property IK5_link; ! Property IK6_link; ! Property IK8_link; ! Property articles; ! not used by I7, but an interesting hook in the parser Property grammar; ! not used by I7, but an interesting hook in the parser Property inside_description; ! not used by I7, but an interesting hook in the locale code Property short_name_indef 0; ! not used by I7, but an interesting hook in the listmaker Constant life = NULL; Constant ActionCount = 148; Fake_Action ListMiscellany; Fake_Action Miscellany; Fake_Action PluralFound; Fake_Action TheSame; Constant RUCKSACK_CLASS = K15_player_s_holdall; ! [1] Global location = InformLibrary; ! does not = I7 "location": see below Global sline1; Global sline2; ! [2] Global say__p = 1; Global say__pc = 0; Global say__n; Global ct_0 = 0; Global ct_1 = 0; Global los_rv = false; Global subst__v; ! = I7 "substitution-variable" Global parameter_object; ! = I7 "parameter-object" = I7 "container in question" Array deferred_calling_list --> 16; Global property_to_be_totalled; ! used to implement "total P of..." Global property_loop_sign; ! $+1$ for increasing order, $-1$ for decreasing Global suppress_scope_loops; Global temporary_value; ! can be used anywhere side-effects can't occur Global enable_rte = true; ! reporting of run-time problems is enabled Constant BLOCKV_STACK_SIZE = 224; Global blockv_sp = 0; Array blockv_stack --> BLOCKV_STACK_SIZE; Global IT_RE_Err = 0; Array LocalParking --> 16; ! [3] Global standard_interpreter = 0; Global undo_flag; ! [4] Global deadflag = 0; Global story_complete = 0; Global resurrect_please = false; ! [5] Global not_yet_in_play = true; ! set false when first command received Global turns = 1; ! = I7 "turn count" Global the_time = NULL; ! = I7 "time of day" Global time_rate = 1; Constant NUMBER_SCENES_CREATED = 1; Constant SCENE_ARRAY_SIZE = (NUMBER_SCENES_CREATED+2); Array scene_started --> SCENE_ARRAY_SIZE; Array scene_ended --> SCENE_ARRAY_SIZE; Array scene_status --> SCENE_ARRAY_SIZE; Array scene_endings --> SCENE_ARRAY_SIZE; Array scene_latest_ending --> SCENE_ARRAY_SIZE; ! [6] Global score; ! = I7 "score" Global last_score; ! = I7 "last notified score" Global notify_mode = 1; ! score notification on or off Global left_hand_status_line = SL_Location; ! = I7 "left hand status line" Global right_hand_status_line = SL_Score_Moves; ! = I7 "right hand status line" ! [7] Global player; ! = I7 "player" Global real_location; ! = I7 "location" Global visibility_ceiling; ! highest object in tree visible to player Global visibility_levels; ! distance in tree to that Global SACK_OBJECT; ! current player's holdall item in use ! [8] Global act_requester; Global actor; ! = I7 "person asked" = I7 "person reaching" Global actors_location; ! like real_location, but for the actor Global actor_location; ! = I7 "actor-location" Global action; Global meta; ! action is out of world Global inp1; Global inp2; Array multiple_object --> MATCH_LIST_WORDS; ! multiple-object list (I6 table array) Global toomany_flag; ! multiple-object list overflowed Global multiflag; ! multiple-object being processed Global multiple_object_item; ! item currently being processed in multiple-object list Global noun; ! = I7 "noun" Global second; ! = I7 "second noun" Global keep_silent; ! true if current action is being tried silently Global etype; ! parser error number if command not recognised Global trace_actions = 0; Global untouchable_object; Global untouchable_silence; Global touch_persona; Global special_word; ! dictionary address of first word in "[text]" token Global consult_from; ! word number of start of "[text]" token Global consult_words; ! number of words in "[text]" token Global parsed_number; ! value from any token not an object Global special_number1; ! first value, if token not an object Global special_number2; ! second value, if token not an object Array parser_results --> 16; ! for parser to write its results in Global parser_trace = 0; ! normally 0, but 1 to 5 traces parser workings Global pronoun_word; ! records which pronoun ("it", "them", ...) caused an error Global pronoun_obj; ! and what object it was thought to refer to Global players_command = 100; ! = I7 "player's command" Global matched_text; ! = I7 "matched text" Global reason_the_action_failed; ! = I7 "reason the action failed" Global understand_as_mistake_number; ! which form of "Understand... as a mistake" Global particular_possession; ! = I7 "particular possession" ! [9] Global parser_action; ! written by the parser for the benefit of GPRs Global parser_one; Global parser_two; Global parameters; ! number of I7 tokens parsed on the current line Global action_to_be; ! (if the current line were accepted) Global action_reversed; ! (parameters would be reversed in order) Global wn; ! word number within "parse" buffer (from 1) Global num_words; ! number of words in buffer Global verb_word; ! dictionary address of command verb Global verb_wordnum; ! word number of command verb ! [10] Global scope_reason = PARSING_REASON; ! current reason for searching scope Global scope_token; ! for "scope=Routine" grammar tokens Global scope_error; Global scope_stage; ! 1, 2 then 3 Global advance_warning; ! what a later-named thing will be Global reason_code = NULL; ! for the I6 veneer Global ats_flag = 0; ! for AddToScope routines Global ats_hls; ! [11] Global move_pushing; Global move_from; Global move_to; Global move_by; Global move_through; ! [12] #Ifdef DEFAULT_BRIEF_DESCRIPTIONS; Global lookmode = 1; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; #Ifdef DEFAULT_VERBOSE_DESCRIPTIONS; Global lookmode = 2; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; #Ifdef DEFAULT_SUPERBRIEF_DESCRIPTIONS; Global lookmode = 3; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; #Ifndef lookmode; Global lookmode = 2; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; Global c_style; ! current list-writer style Global c_depth; ! current recursion depth Global c_iterator; ! current iteration function Global lt_value; ! common value of list_together Global listing_together; ! object number of one member of a group being listed together Global listing_size; ! size of such a group Global c_margin; ! current level of indentation printed by WriteListFrom() Global inventory_stage = 1; ! 1 or 2 according to the context in which list_together uses ! [13] Global clr_fg = 1; ! foreground colour Global clr_bg = 1; ! background colour Global clr_fgstatus = 1; ! foreground colour of statusline Global clr_bgstatus = 1; ! background colour of statusline Global clr_on; ! has colour been enabled by the player? Global statuswin_current; ! if writing to top window ! [14] Global statuswin_cursize = 0; Global statuswin_size = 1; ! [15] Global lm_act; Global lm_n; Global lm_o; Global lm_o2; ! [16] Global debug_flag = 0; Global debug_rules = 0; Global debug_scenes = 0; Global debug_rule_nesting; #Ifdef TARGET_GLULX; [ IdentifyGlkObject phase type ref rock; if (phase == 0) { ! Zero out references to our objects. if (FollowRulebook( 379 ) && RulebookSucceeded()) { rtrue; } } if (phase == 1) { ! Reset our windows, streams and filerefs. (Global_Vars-->20) = rock; (Global_Vars-->21) = ref; switch (type) { 0: ! it's a window FollowRulebook( 380 ); 1 : ! it's a stream FollowRulebook( 381 ); 2 : ! it's a file reference FollowRulebook( 382 ); } return; } if (phase == 2) { ! Update our objects. if (FollowRulebook( 383 ) && RulebookSucceeded()) { rtrue; } } ]; [ HandleGlkEvent ev context abortres newcmd cmdlen ; context = 0; ! suppress ignored warning switch (ev-->0) { evtype_Redraw: if (FollowRulebook( 372 ) && RulebookSucceeded()) { rtrue; } evtype_Arrange: if (FollowRulebook( 373 ) && RulebookSucceeded()) { rtrue; } evtype_Timer: if (FollowRulebook( 371 ) && RulebookSucceeded()) { rtrue; } evtype_SoundNotify: if (FollowRulebook( 374 ) && RulebookSucceeded()) { rtrue; } evtype_Hyperlink: FollowRulebook( 378 ); if ( FollowRulebook( 384 ) && RulebookSucceeded()) { FollowRulebook( 385 ); FollowRulebook( 386 ); if ( FollowRulebook( 387 ) ) return 2; } evtype_CharInput: if (FollowRulebook( 376 ) && RulebookSucceeded()) { rtrue; } evtype_LineInput: if (FollowRulebook( 377 ) && RulebookSucceeded()) { return 2; } evtype_MouseInput: FollowRulebook( 375 ); if ( FollowRulebook( 384 ) && RulebookSucceeded()) { FollowRulebook( 385 ); FollowRulebook( 386 ); if ( FollowRulebook( 387 ) ) return 2; } } ]; Array gg_event --> 4; Array gg_arguments buffer 28; Global gg_mainwin = 0; Global gg_statuswin = 0; Global gg_quotewin = 0; Global gg_scriptfref = 0; Global gg_scriptstr = 0; Global gg_savestr = 0; Global gg_commandstr = 0; Global gg_command_reading = 0; ! true if gg_commandstr is being replayed Global gg_foregroundchan = 0; Global gg_backgroundchan = 0; Constant INPUT_BUFFER_LEN = 260; ! No extra byte necessary Constant MAX_BUFFER_WORDS = 20; Constant PARSE_BUFFER_LEN = 61; Array buffer buffer INPUT_BUFFER_LEN; Array buffer2 buffer INPUT_BUFFER_LEN; Array buffer3 buffer INPUT_BUFFER_LEN; Array parse --> PARSE_BUFFER_LEN; Array parse2 --> PARSE_BUFFER_LEN; #IFNDEF infglk_h; ! Standard Glulx definitions contributed by John Cater Constant infglk_h; !------------------------------------------------------------------------------- ! infglk.h - an Inform library to allow easy access to glk functions ! under glulx ! Dynamically created by glk2inf.pl on 08/31/2006 at 19:20:21. ! Send comments or suggestions to: katre@ruf.rice.edu !------------------------------------------------------------------------------- #Ifdef infglk_h; ! remove "Constant declared but not used" warnings #Endif; Constant GLK_NULL 0; ! Constant definitions from glk.h Constant gestalt_Version 0; Constant gestalt_CharInput 1; Constant gestalt_LineInput 2; Constant gestalt_CharOutput 3; Constant gestalt_CharOutput_CannotPrint 0; Constant gestalt_CharOutput_ApproxPrint 1; Constant gestalt_CharOutput_ExactPrint 2; Constant gestalt_MouseInput 4; Constant gestalt_Timer 5; Constant gestalt_Graphics 6; Constant gestalt_DrawImage 7; Constant gestalt_Sound 8; Constant gestalt_SoundVolume 9; Constant gestalt_SoundNotify 10; Constant gestalt_Hyperlinks 11; Constant gestalt_HyperlinkInput 12; Constant gestalt_SoundMusic 13; Constant gestalt_GraphicsTransparency 14; Constant gestalt_Unicode 15; Constant evtype_None 0; Constant evtype_Timer 1; Constant evtype_CharInput 2; Constant evtype_LineInput 3; Constant evtype_MouseInput 4; Constant evtype_Arrange 5; Constant evtype_Redraw 6; Constant evtype_SoundNotify 7; Constant evtype_Hyperlink 8; Constant keycode_Unknown $ffffffff; Constant keycode_Left $fffffffe; Constant keycode_Right $fffffffd; Constant keycode_Up $fffffffc; Constant keycode_Down $fffffffb; Constant keycode_Return $fffffffa; Constant keycode_Delete $fffffff9; Constant keycode_Escape $fffffff8; Constant keycode_Tab $fffffff7; Constant keycode_PageUp $fffffff6; Constant keycode_PageDown $fffffff5; Constant keycode_Home $fffffff4; Constant keycode_End $fffffff3; Constant keycode_Func1 $ffffffef; Constant keycode_Func2 $ffffffee; Constant keycode_Func3 $ffffffed; Constant keycode_Func4 $ffffffec; Constant keycode_Func5 $ffffffeb; Constant keycode_Func6 $ffffffea; Constant keycode_Func7 $ffffffe9; Constant keycode_Func8 $ffffffe8; Constant keycode_Func9 $ffffffe7; Constant keycode_Func10 $ffffffe6; Constant keycode_Func11 $ffffffe5; Constant keycode_Func12 $ffffffe4; Constant keycode_MAXVAL 28; Constant style_Normal 0; Constant style_Emphasized 1; Constant style_Preformatted 2; Constant style_Header 3; Constant style_Subheader 4; Constant style_Alert 5; Constant style_Note 6; Constant style_BlockQuote 7; Constant style_Input 8; Constant style_User1 9; Constant style_User2 10; Constant style_NUMSTYLES 11; Constant wintype_AllTypes 0; Constant wintype_Pair 1; Constant wintype_Blank 2; Constant wintype_TextBuffer 3; Constant wintype_TextGrid 4; Constant wintype_Graphics 5; Constant winmethod_Left $00; Constant winmethod_Right $01; Constant winmethod_Above $02; Constant winmethod_Below $03; Constant winmethod_DirMask $0f; Constant winmethod_Fixed $10; Constant winmethod_Proportional $20; Constant winmethod_DivisionMask $f0; Constant fileusage_Data $00; Constant fileusage_SavedGame $01; Constant fileusage_Transcript $02; Constant fileusage_InputRecord $03; Constant fileusage_TypeMask $0f; Constant fileusage_TextMode $100; Constant fileusage_BinaryMode $000; Constant filemode_Write $01; Constant filemode_Read $02; Constant filemode_ReadWrite $03; Constant filemode_WriteAppend $05; Constant seekmode_Start 0; Constant seekmode_Current 1; Constant seekmode_End 2; Constant stylehint_Indentation 0; Constant stylehint_ParaIndentation 1; Constant stylehint_Justification 2; Constant stylehint_Size 3; Constant stylehint_Weight 4; Constant stylehint_Oblique 5; Constant stylehint_Proportional 6; Constant stylehint_TextColor 7; Constant stylehint_BackColor 8; Constant stylehint_ReverseColor 9; Constant stylehint_NUMHINTS 10; Constant stylehint_just_LeftFlush 0; Constant stylehint_just_LeftRight 1; Constant stylehint_just_Centered 2; Constant stylehint_just_RightFlush 3; Constant imagealign_InlineUp $01; Constant imagealign_InlineDown $02; Constant imagealign_InlineCenter $03; Constant imagealign_MarginLeft $04; Constant imagealign_MarginRight $05; ! The actual glk functions. [ glk_exit _vararg_count ret; ! glk_exit () ! And now the @glk call @glk 1 _vararg_count ret; return ret; ]; [ glk_set_interrupt_handler _vararg_count ret; ! glk_set_interrupt_handler (func) ! And now the @glk call @glk 2 _vararg_count ret; return ret; ]; [ glk_tick _vararg_count ret; ! glk_tick () ! And now the @glk call @glk 3 _vararg_count ret; return ret; ]; [ glk_gestalt _vararg_count ret; ! glk_gestalt (sel val) ! And now the @glk call @glk 4 _vararg_count ret; return ret; ]; [ glk_gestalt_ext _vararg_count ret; ! glk_gestalt_ext (sel val arr arrlen) ! And now the @glk call @glk 5 _vararg_count ret; return ret; ]; [ glk_char_to_lower _vararg_count ret; ! glk_char_to_lower (ch) ! And now the @glk call @glk 160 _vararg_count ret; return ret; ]; [ glk_char_to_upper _vararg_count ret; ! glk_char_to_upper (ch) ! And now the @glk call @glk 161 _vararg_count ret; return ret; ]; [ glk_window_get_root _vararg_count ret; ! glk_window_get_root () ! And now the @glk call @glk 34 _vararg_count ret; return ret; ]; [ glk_window_open _vararg_count ret; ! glk_window_open (split method size wintype rock) ! And now the @glk call @glk 35 _vararg_count ret; return ret; ]; [ glk_window_close _vararg_count ret; ! glk_window_close (win result) ! And now the @glk call @glk 36 _vararg_count ret; return ret; ]; [ glk_window_get_size _vararg_count ret; ! glk_window_get_size (win widthptr heightptr) ! And now the @glk call @glk 37 _vararg_count ret; return ret; ]; [ glk_window_set_arrangement _vararg_count ret; ! glk_window_set_arrangement (win method size keywin) ! And now the @glk call @glk 38 _vararg_count ret; return ret; ]; [ glk_window_get_arrangement _vararg_count ret; ! glk_window_get_arrangement (win methodptr sizeptr keywinptr) ! And now the @glk call @glk 39 _vararg_count ret; return ret; ]; [ glk_window_iterate _vararg_count ret; ! glk_window_iterate (win rockptr) ! And now the @glk call @glk 32 _vararg_count ret; return ret; ]; [ glk_window_get_rock _vararg_count ret; ! glk_window_get_rock (win) ! And now the @glk call @glk 33 _vararg_count ret; return ret; ]; [ glk_window_get_type _vararg_count ret; ! glk_window_get_type (win) ! And now the @glk call @glk 40 _vararg_count ret; return ret; ]; [ glk_window_get_parent _vararg_count ret; ! glk_window_get_parent (win) ! And now the @glk call @glk 41 _vararg_count ret; return ret; ]; [ glk_window_get_sibling _vararg_count ret; ! glk_window_get_sibling (win) ! And now the @glk call @glk 48 _vararg_count ret; return ret; ]; [ glk_window_clear _vararg_count ret; ! glk_window_clear (win) ! And now the @glk call @glk 42 _vararg_count ret; return ret; ]; [ glk_window_move_cursor _vararg_count ret; ! glk_window_move_cursor (win xpos ypos) ! And now the @glk call @glk 43 _vararg_count ret; return ret; ]; [ glk_window_get_stream _vararg_count ret; ! glk_window_get_stream (win) ! And now the @glk call @glk 44 _vararg_count ret; return ret; ]; [ glk_window_set_echo_stream _vararg_count ret; ! glk_window_set_echo_stream (win str) ! And now the @glk call @glk 45 _vararg_count ret; return ret; ]; [ glk_window_get_echo_stream _vararg_count ret; ! glk_window_get_echo_stream (win) ! And now the @glk call @glk 46 _vararg_count ret; return ret; ]; [ glk_set_window _vararg_count ret; ! glk_set_window (win) ! And now the @glk call @glk 47 _vararg_count ret; return ret; ]; [ glk_stream_open_file _vararg_count ret; ! glk_stream_open_file (fileref fmode rock) ! And now the @glk call @glk 66 _vararg_count ret; return ret; ]; [ glk_stream_open_memory _vararg_count ret; ! glk_stream_open_memory (buf buflen fmode rock) ! And now the @glk call @glk 67 _vararg_count ret; return ret; ]; [ glk_stream_close _vararg_count ret; ! glk_stream_close (str result) ! And now the @glk call @glk 68 _vararg_count ret; return ret; ]; [ glk_stream_iterate _vararg_count ret; ! glk_stream_iterate (str rockptr) ! And now the @glk call @glk 64 _vararg_count ret; return ret; ]; [ glk_stream_get_rock _vararg_count ret; ! glk_stream_get_rock (str) ! And now the @glk call @glk 65 _vararg_count ret; return ret; ]; [ glk_stream_set_position _vararg_count ret; ! glk_stream_set_position (str pos seekmode) ! And now the @glk call @glk 69 _vararg_count ret; return ret; ]; [ glk_stream_get_position _vararg_count ret; ! glk_stream_get_position (str) ! And now the @glk call @glk 70 _vararg_count ret; return ret; ]; [ glk_stream_set_current _vararg_count ret; ! glk_stream_set_current (str) ! And now the @glk call @glk 71 _vararg_count ret; return ret; ]; [ glk_stream_get_current _vararg_count ret; ! glk_stream_get_current () ! And now the @glk call @glk 72 _vararg_count ret; return ret; ]; [ glk_put_char _vararg_count ret; ! glk_put_char (ch) ! And now the @glk call @glk 128 _vararg_count ret; return ret; ]; [ glk_put_char_stream _vararg_count ret; ! glk_put_char_stream (str ch) ! And now the @glk call @glk 129 _vararg_count ret; return ret; ]; [ glk_put_string _vararg_count ret; ! glk_put_string (s) ! And now the @glk call @glk 130 _vararg_count ret; return ret; ]; [ glk_put_string_stream _vararg_count ret; ! glk_put_string_stream (str s) ! And now the @glk call @glk 131 _vararg_count ret; return ret; ]; [ glk_put_buffer _vararg_count ret; ! glk_put_buffer (buf len) ! And now the @glk call @glk 132 _vararg_count ret; return ret; ]; [ glk_put_buffer_stream _vararg_count ret; ! glk_put_buffer_stream (str buf len) ! And now the @glk call @glk 133 _vararg_count ret; return ret; ]; [ glk_set_style _vararg_count ret; ! glk_set_style (styl) ! And now the @glk call @glk 134 _vararg_count ret; return ret; ]; [ glk_set_style_stream _vararg_count ret; ! glk_set_style_stream (str styl) ! And now the @glk call @glk 135 _vararg_count ret; return ret; ]; [ glk_get_char_stream _vararg_count ret; ! glk_get_char_stream (str) ! And now the @glk call @glk 144 _vararg_count ret; return ret; ]; [ glk_get_line_stream _vararg_count ret; ! glk_get_line_stream (str buf len) ! And now the @glk call @glk 145 _vararg_count ret; return ret; ]; [ glk_get_buffer_stream _vararg_count ret; ! glk_get_buffer_stream (str buf len) ! And now the @glk call @glk 146 _vararg_count ret; return ret; ]; [ glk_stylehint_set _vararg_count ret; ! glk_stylehint_set (wintype styl hint val) ! And now the @glk call @glk 176 _vararg_count ret; return ret; ]; [ glk_stylehint_clear _vararg_count ret; ! glk_stylehint_clear (wintype styl hint) ! And now the @glk call @glk 177 _vararg_count ret; return ret; ]; [ glk_style_distinguish _vararg_count ret; ! glk_style_distinguish (win styl1 styl2) ! And now the @glk call @glk 178 _vararg_count ret; return ret; ]; [ glk_style_measure _vararg_count ret; ! glk_style_measure (win styl hint result) ! And now the @glk call @glk 179 _vararg_count ret; return ret; ]; [ glk_fileref_create_temp _vararg_count ret; ! glk_fileref_create_temp (usage rock) ! And now the @glk call @glk 96 _vararg_count ret; return ret; ]; [ glk_fileref_create_by_name _vararg_count ret; ! glk_fileref_create_by_name (usage name rock) ! And now the @glk call @glk 97 _vararg_count ret; return ret; ]; [ glk_fileref_create_by_prompt _vararg_count ret; ! glk_fileref_create_by_prompt (usage fmode rock) ! And now the @glk call @glk 98 _vararg_count ret; return ret; ]; [ glk_fileref_create_from_fileref _vararg_count ret; ! glk_fileref_create_from_fileref (usage fref rock) ! And now the @glk call @glk 104 _vararg_count ret; return ret; ]; [ glk_fileref_destroy _vararg_count ret; ! glk_fileref_destroy (fref) ! And now the @glk call @glk 99 _vararg_count ret; return ret; ]; [ glk_fileref_iterate _vararg_count ret; ! glk_fileref_iterate (fref rockptr) ! And now the @glk call @glk 100 _vararg_count ret; return ret; ]; [ glk_fileref_get_rock _vararg_count ret; ! glk_fileref_get_rock (fref) ! And now the @glk call @glk 101 _vararg_count ret; return ret; ]; [ glk_fileref_delete_file _vararg_count ret; ! glk_fileref_delete_file (fref) ! And now the @glk call @glk 102 _vararg_count ret; return ret; ]; [ glk_fileref_does_file_exist _vararg_count ret; ! glk_fileref_does_file_exist (fref) ! And now the @glk call @glk 103 _vararg_count ret; return ret; ]; [ glk_select _vararg_count ret; ! glk_select (event) ! And now the @glk call @glk 192 _vararg_count ret; return ret; ]; [ glk_select_poll _vararg_count ret; ! glk_select_poll (event) ! And now the @glk call @glk 193 _vararg_count ret; return ret; ]; [ glk_request_timer_events _vararg_count ret; ! glk_request_timer_events (millisecs) ! And now the @glk call @glk 214 _vararg_count ret; return ret; ]; [ glk_request_line_event _vararg_count ret; ! glk_request_line_event (win buf maxlen initlen) ! And now the @glk call @glk 208 _vararg_count ret; return ret; ]; [ glk_request_char_event _vararg_count ret; ! glk_request_char_event (win) ! And now the @glk call @glk 210 _vararg_count ret; return ret; ]; [ glk_request_mouse_event _vararg_count ret; ! glk_request_mouse_event (win) ! And now the @glk call @glk 212 _vararg_count ret; return ret; ]; [ glk_cancel_line_event _vararg_count ret; ! glk_cancel_line_event (win event) ! And now the @glk call @glk 209 _vararg_count ret; return ret; ]; [ glk_cancel_char_event _vararg_count ret; ! glk_cancel_char_event (win) ! And now the @glk call @glk 211 _vararg_count ret; return ret; ]; [ glk_cancel_mouse_event _vararg_count ret; ! glk_cancel_mouse_event (win) ! And now the @glk call @glk 213 _vararg_count ret; return ret; ]; [ glk_buffer_to_lower_case_uni _vararg_count ret; ! glk_buffer_to_lower_case_uni (buf len numchars) ! And now the @glk call @glk 288 _vararg_count ret; return ret; ]; [ glk_buffer_to_upper_case_uni _vararg_count ret; ! glk_buffer_to_upper_case_uni (buf len numchars) ! And now the @glk call @glk 289 _vararg_count ret; return ret; ]; [ glk_buffer_to_title_case_uni _vararg_count ret; ! glk_buffer_to_title_case_uni (buf len numchars lowerrest) ! And now the @glk call @glk 290 _vararg_count ret; return ret; ]; [ glk_put_char_uni _vararg_count ret; ! glk_put_char_uni (ch) ! And now the @glk call @glk 296 _vararg_count ret; return ret; ]; [ glk_put_string_uni _vararg_count ret; ! glk_put_string_uni (s) ! And now the @glk call @glk 297 _vararg_count ret; return ret; ]; [ glk_put_buffer_uni _vararg_count ret; ! glk_put_buffer_uni (buf len) ! And now the @glk call @glk 298 _vararg_count ret; return ret; ]; [ glk_put_char_stream_uni _vararg_count ret; ! glk_put_char_stream_uni (str ch) ! And now the @glk call @glk 299 _vararg_count ret; return ret; ]; [ glk_put_string_stream_uni _vararg_count ret; ! glk_put_string_stream_uni (str s) ! And now the @glk call @glk 300 _vararg_count ret; return ret; ]; [ glk_put_buffer_stream_uni _vararg_count ret; ! glk_put_buffer_stream_uni (str buf len) ! And now the @glk call @glk 301 _vararg_count ret; return ret; ]; [ glk_get_char_stream_uni _vararg_count ret; ! glk_get_char_stream_uni (str) ! And now the @glk call @glk 304 _vararg_count ret; return ret; ]; [ glk_get_buffer_stream_uni _vararg_count ret; ! glk_get_buffer_stream_uni (str buf len) ! And now the @glk call @glk 305 _vararg_count ret; return ret; ]; [ glk_get_line_stream_uni _vararg_count ret; ! glk_get_line_stream_uni (str buf len) ! And now the @glk call @glk 306 _vararg_count ret; return ret; ]; [ glk_stream_open_file_uni _vararg_count ret; ! glk_stream_open_file_uni (fileref fmode rock) ! And now the @glk call @glk 312 _vararg_count ret; return ret; ]; [ glk_stream_open_memory_uni _vararg_count ret; ! glk_stream_open_memory_uni (buf buflen fmode rock) ! And now the @glk call @glk 313 _vararg_count ret; return ret; ]; [ glk_request_char_event_uni _vararg_count ret; ! glk_request_char_event_uni (win) ! And now the @glk call @glk 320 _vararg_count ret; return ret; ]; [ glk_request_line_event_uni _vararg_count ret; ! glk_request_line_event_uni (win buf maxlen initlen) ! And now the @glk call @glk 321 _vararg_count ret; return ret; ]; [ glk_image_draw _vararg_count ret; ! glk_image_draw (win image val1 val2) ! And now the @glk call @glk 225 _vararg_count ret; return ret; ]; [ glk_image_draw_scaled _vararg_count ret; ! glk_image_draw_scaled (win image val1 val2 width height) ! And now the @glk call @glk 226 _vararg_count ret; return ret; ]; [ glk_image_get_info _vararg_count ret; ! glk_image_get_info (image width height) ! And now the @glk call @glk 224 _vararg_count ret; return ret; ]; [ glk_window_flow_break _vararg_count ret; ! glk_window_flow_break (win) ! And now the @glk call @glk 232 _vararg_count ret; return ret; ]; [ glk_window_erase_rect _vararg_count ret; ! glk_window_erase_rect (win left top width height) ! And now the @glk call @glk 233 _vararg_count ret; return ret; ]; [ glk_window_fill_rect _vararg_count ret; ! glk_window_fill_rect (win color left top width height) ! And now the @glk call @glk 234 _vararg_count ret; return ret; ]; [ glk_window_set_background_color _vararg_count ret; ! glk_window_set_background_color (win color) ! And now the @glk call @glk 235 _vararg_count ret; return ret; ]; [ glk_schannel_create _vararg_count ret; ! glk_schannel_create (rock) ! And now the @glk call @glk 242 _vararg_count ret; return ret; ]; [ glk_schannel_destroy _vararg_count ret; ! glk_schannel_destroy (chan) ! And now the @glk call @glk 243 _vararg_count ret; return ret; ]; [ glk_schannel_iterate _vararg_count ret; ! glk_schannel_iterate (chan rockptr) ! And now the @glk call @glk 240 _vararg_count ret; return ret; ]; [ glk_schannel_get_rock _vararg_count ret; ! glk_schannel_get_rock (chan) ! And now the @glk call @glk 241 _vararg_count ret; return ret; ]; [ glk_schannel_play _vararg_count ret; ! glk_schannel_play (chan snd) ! And now the @glk call @glk 248 _vararg_count ret; return ret; ]; [ glk_schannel_play_ext _vararg_count ret; ! glk_schannel_play_ext (chan snd repeats notify) ! And now the @glk call @glk 249 _vararg_count ret; return ret; ]; [ glk_schannel_stop _vararg_count ret; ! glk_schannel_stop (chan) ! And now the @glk call @glk 250 _vararg_count ret; return ret; ]; [ glk_schannel_set_volume _vararg_count ret; ! glk_schannel_set_volume (chan vol) ! And now the @glk call @glk 251 _vararg_count ret; return ret; ]; [ glk_sound_load_hint _vararg_count ret; ! glk_sound_load_hint (snd flag) ! And now the @glk call @glk 252 _vararg_count ret; return ret; ]; [ glk_set_hyperlink _vararg_count ret; ! glk_set_hyperlink (linkval) ! And now the @glk call @glk 256 _vararg_count ret; return ret; ]; [ glk_set_hyperlink_stream _vararg_count ret; ! glk_set_hyperlink_stream (str linkval) ! And now the @glk call @glk 257 _vararg_count ret; return ret; ]; [ glk_request_hyperlink_event _vararg_count ret; ! glk_request_hyperlink_event (win) ! And now the @glk call @glk 258 _vararg_count ret; return ret; ]; [ glk_cancel_hyperlink_event _vararg_count ret; ! glk_cancel_hyperlink_event (win) ! And now the @glk call @glk 259 _vararg_count ret; return ret; ]; #ENDIF; Constant GG_MAINWIN_ROCK 201; Constant GG_STATUSWIN_ROCK 202; Constant GG_QUOTEWIN_ROCK 203; Constant GG_SAVESTR_ROCK 301; Constant GG_SCRIPTSTR_ROCK 302; Constant GG_COMMANDWSTR_ROCK 303; Constant GG_COMMANDRSTR_ROCK 304; Constant GG_SCRIPTFREF_ROCK 401; Constant GG_FOREGROUNDCHAN_ROCK 410; Constant GG_BACKGROUNDCHAN_ROCK 411; #Stub HandleGlkEvent 2; #Stub IdentifyGlkObject 4; #Stub InitGlkWindow 1; [ VM_PreInitialise res; @gestalt 4 2 res; ! Test if this interpreter has Glk... if (res == 0) quit; ! ...without which there would be nothing we could do unicode_gestalt_ok = false; if (glk_gestalt(gestalt_Unicode, 0)) unicode_gestalt_ok = true; ! Set the VM's I/O system to be Glk. @setiosys 2 0; ]; [ VM_Initialise res sty i; @gestalt 4 2 res; ! Test if this interpreter has Glk... if (res == 0) quit; ! ...without which there would be nothing we could do ! First, we must go through all the Glk objects that exist, and see ! if we created any of them. One might think this strange, since the ! program has just started running, but remember that the player might ! have just typed "restart". GGRecoverObjects(); ! Sound channel initialisation, and RNG fixing, must be done now rather ! than later in case InitGlkWindow() returns a non-zero value. if (glk_gestalt(gestalt_Sound, 0)) { if (gg_foregroundchan == 0) gg_foregroundchan = glk_schannel_create(GG_FOREGROUNDCHAN_ROCK); if (gg_backgroundchan == 0) gg_backgroundchan = glk_schannel_create(GG_BACKGROUNDCHAN_ROCK); } #ifdef FIX_RNG; @random 10000 i; i = -i-2000; print "[Random number generator seed is ", i, "]^"; @setrandom i; #endif; ! FIX_RNG res = InitGlkWindow(0); if (res ~= 0) return; ! Now, gg_mainwin and gg_storywin might already be set. If not, set them. if (gg_mainwin == 0) { ! Open the story window. res = InitGlkWindow(GG_MAINWIN_ROCK); if (res == 0) { ! Left-justify the header style glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_Justification, 0); ! Try to make emphasized type in italics and not boldface glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Weight, 0); glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Oblique, 1); gg_mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, GG_MAINWIN_ROCK); } if (gg_mainwin == 0) quit; ! If we can't even open one window, give in } else { ! There was already a story window. We should erase it. glk_window_clear(gg_mainwin); } if (gg_statuswin == 0) { res = InitGlkWindow(GG_STATUSWIN_ROCK); if (res == 0) { statuswin_cursize = statuswin_size; for (sty=0: sty0) { GG_SAVESTR_ROCK: gg_savestr = id; GG_SCRIPTSTR_ROCK: gg_scriptstr = id; #Ifdef DEBUG; GG_COMMANDWSTR_ROCK: gg_commandstr = id; gg_command_reading = false; GG_COMMANDRSTR_ROCK: gg_commandstr = id; gg_command_reading = true; #Endif; ! DEBUG default: IdentifyGlkObject(1, 1, id, gg_arguments-->0); } id = glk_stream_iterate(id, gg_arguments); } id = glk_window_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_MAINWIN_ROCK: gg_mainwin = id; GG_STATUSWIN_ROCK: gg_statuswin = id; GG_QUOTEWIN_ROCK: gg_quotewin = id; default: IdentifyGlkObject(1, 0, id, gg_arguments-->0); } id = glk_window_iterate(id, gg_arguments); } id = glk_fileref_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_SCRIPTFREF_ROCK: gg_scriptfref = id; default: IdentifyGlkObject(1, 2, id, gg_arguments-->0); } id = glk_fileref_iterate(id, gg_arguments); } if (glk_gestalt(gestalt_Sound, 0)) { id = glk_schannel_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_FOREGROUNDCHAN_ROCK: gg_foregroundchan = id; GG_BACKGROUNDCHAN_ROCK: gg_backgroundchan = id; } id = glk_schannel_iterate(id, gg_arguments); } if (gg_foregroundchan ~= 0) { glk_schannel_stop(gg_foregroundchan); } if (gg_backgroundchan ~= 0) { glk_schannel_stop(gg_backgroundchan); } } ! Tell the game to tie up any loose ends. IdentifyGlkObject(2); ]; [ ENABLE_GLULX_ACCEL_R addr res; @gestalt 9 0 res; if (res == 0) return; addr = #classes_table; @accelparam 0 addr; @accelparam 1 INDIV_PROP_START; @accelparam 2 Class; @accelparam 3 Object; @accelparam 4 Routine; @accelparam 5 String; addr = #globals_array + WORDSIZE * #g$self; @accelparam 6 addr; @accelparam 7 NUM_ATTR_BYTES; addr = #cpv__start; @accelparam 8 addr; @accelfunc 1 Z__Region; @accelfunc 2 CP__Tab; @accelfunc 3 RA__Pr; @accelfunc 4 RL__Pr; @accelfunc 5 OC__Cl; @accelfunc 6 RV__Pr; @accelfunc 7 OP__Pr; rfalse; ]; [ VM_Describe_Release i; print "Release "; @aloads ROM_GAMERELEASE 0 i; print i; print " / Serial number "; for (i=0 : i<6 : i++) print (char) ROM_GAMESERIAL->i; ]; [ VM_KeyChar win nostat done res ix jx ch; jx = ch; ! squash compiler warnings if (win == 0) win = gg_mainwin; if (gg_commandstr ~= 0 && gg_command_reading ~= false) { done = glk_get_line_stream(gg_commandstr, gg_arguments, 31); if (done == 0) { glk_stream_close(gg_commandstr, 0); gg_commandstr = 0; gg_command_reading = false; ! fall through to normal user input. } else { ! Trim the trailing newline if (gg_arguments->(done-1) == 10) done = done-1; res = gg_arguments->0; if (res == '\') { res = 0; for (ix=1 : ixix; if (ch >= '0' && ch <= '9') { @shiftl res 4 res; res = res + (ch-'0'); } else if (ch >= 'a' && ch <= 'f') { @shiftl res 4 res; res = res + (ch+10-'a'); } else if (ch >= 'A' && ch <= 'F') { @shiftl res 4 res; res = res + (ch+10-'A'); } } } jump KCPContinue; } } done = false; glk_request_char_event(win); while (~~done) { glk_select(gg_event); switch (gg_event-->0) { 5: ! evtype_Arrange if (nostat) { glk_cancel_char_event(win); res = $80000000; done = true; break; } DrawStatusLine(); 2: ! evtype_CharInput if (gg_event-->1 == win) { res = gg_event-->2; done = true; } } ix = HandleGlkEvent(gg_event, 1, gg_arguments); if (ix == 2) { res = gg_arguments-->0; done = true; } else if (ix == -1) done = false; } if (gg_commandstr ~= 0 && gg_command_reading == false) { if (res < 32 || res >= 256 || (res == '\' or ' ')) { glk_put_char_stream(gg_commandstr, '\'); done = 0; jx = res; for (ix=0 : ix<8 : ix++) { @ushiftr jx 28 ch; @shiftl jx 4 jx; ch = ch & $0F; if (ch ~= 0 || ix == 7) done = 1; if (done) { if (ch >= 0 && ch <= 9) ch = ch + '0'; else ch = (ch - 10) + 'A'; glk_put_char_stream(gg_commandstr, ch); } } } else { glk_put_char_stream(gg_commandstr, res); } glk_put_char_stream(gg_commandstr, 10); ! newline } .KCPContinue; return res; ]; [ VM_KeyDelay tenths key done ix; glk_request_char_event(gg_mainwin); glk_request_timer_events(tenths*100); while (~~done) { glk_select(gg_event); ix = HandleGlkEvent(gg_event, 1, gg_arguments); if (ix == 2) { key = gg_arguments-->0; done = true; } else if (ix >= 0 && gg_event-->0 == 1 or 2) { key = gg_event-->2; done = true; } } glk_cancel_char_event(gg_mainwin); glk_request_timer_events(0); return key; ]; [ VM_ReadKeyboard a_buffer a_table done ix; if (gg_commandstr ~= 0 && gg_command_reading ~= false) { done = glk_get_line_stream(gg_commandstr, a_buffer+WORDSIZE, (INPUT_BUFFER_LEN-WORDSIZE)-1); if (done == 0) { glk_stream_close(gg_commandstr, 0); gg_commandstr = 0; gg_command_reading = false; ! L__M(##CommandsRead, 5); would come after prompt ! fall through to normal user input. } else { ! Trim the trailing newline if ((a_buffer+WORDSIZE)->(done-1) == 10) done = done-1; a_buffer-->0 = done; VM_Style(INPUT_VMSTY); glk_put_buffer(a_buffer+WORDSIZE, done); VM_Style(NORMAL_VMSTY); print "^"; jump KPContinue; } } done = false; glk_request_line_event(gg_mainwin, a_buffer+WORDSIZE, INPUT_BUFFER_LEN-WORDSIZE, 0); while (~~done) { glk_select(gg_event); switch (gg_event-->0) { 5: ! evtype_Arrange DrawStatusLine(); 3: ! evtype_LineInput if (gg_event-->1 == gg_mainwin) { a_buffer-->0 = gg_event-->2; done = true; } } ix = HandleGlkEvent(gg_event, 0, a_buffer); if (ix == 2) done = true; else if (ix == -1) done = false; } if (gg_commandstr ~= 0 && gg_command_reading == false) { glk_put_buffer_stream(gg_commandstr, a_buffer+WORDSIZE, a_buffer-->0); glk_put_char_stream(gg_commandstr, 10); ! newline } .KPContinue; VM_Tokenise(a_buffer,a_table); ! It's time to close any quote window we've got going. if (gg_quotewin) { glk_window_close(gg_quotewin, 0); gg_quotewin = 0; } #ifdef ECHO_COMMANDS; print "** "; for (ix=WORDSIZE: ix<(a_buffer-->0)+WORDSIZE: ix++) print (char) a_buffer->ix; print "^"; #endif; ! ECHO_COMMANDS ]; [ VM_CopyBuffer bto bfrom i; for (i=0: ii = bfrom->i; ]; [ VM_PrintToBuffer buf len a b c; if (b) { if (metaclass(a) == Object && a.#b == WORDSIZE && metaclass(a.b) == String) buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a.b); else if (metaclass(a) == Routine) buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a, b, c); else buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a, b); } else if (metaclass(a) == Routine) buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a, b, c); else buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a); if (buf-->0 > len) buf-->0 = len; return buf-->0; ]; [ VM_Tokenise buf tab cx numwords len bx ix wx wpos wlen val res dictlen entrylen; len = buf-->0; buf = buf+WORDSIZE; ! First, split the buffer up into words. We use the standard Infocom ! list of word separators (comma, period, double-quote). cx = 0; numwords = 0; while (cx < len) { while (cx < len && buf->cx == ' ') cx++; if (cx >= len) break; bx = cx; if (buf->cx == '.' or ',' or '"') cx++; else { while (cx < len && buf->cx ~= ' ' or '.' or ',' or '"') cx++; } tab-->(numwords*3+2) = (cx-bx); tab-->(numwords*3+3) = WORDSIZE+bx; numwords++; if (numwords >= MAX_BUFFER_WORDS) break; } tab-->0 = numwords; ! Now we look each word up in the dictionary. dictlen = #dictionary_table-->0; entrylen = DICT_WORD_SIZE + 7; for (wx=0 : wx(wx*3+2); wpos = tab-->(wx*3+3); ! Copy the word into the gg_tokenbuf array, clipping to DICT_WORD_SIZE ! characters and lower case. if (wlen > DICT_WORD_SIZE) wlen = DICT_WORD_SIZE; cx = wpos - WORDSIZE; for (ix=0 : ixix = VM_UpperToLowerCase(buf->(cx+ix)); for (: ixix = 0; val = #dictionary_table + WORDSIZE; @binarysearch gg_tokenbuf DICT_WORD_SIZE val entrylen dictlen 1 1 res; tab-->(wx*3+1) = res; } ]; [ LTI_Insert i ch b y; ! Protect us from strict mode, as this isn't an array in quite the ! sense it expects b = buffer; ! Insert character ch into buffer at point i. ! Being careful not to let the buffer possibly overflow: y = b-->0; if (y > INPUT_BUFFER_LEN) y = INPUT_BUFFER_LEN; ! Move the subsequent text along one character: for (y=y+WORDSIZE : y>i : y--) b->y = b->(y-1); b->i = ch; ! And the text is now one character longer: if (b-->0 < INPUT_BUFFER_LEN) (b-->0)++; ]; [ VM_InvalidDictionaryAddress addr; if (addr < 0) rtrue; rfalse; ]; [ VM_DictionaryAddressToNumber w; return w; ]; [ VM_NumberToDictionaryAddress n; return n; ]; Array gg_tokenbuf -> DICT_WORD_SIZE; [ GGWordCompare str1 str2 ix jx; for (ix=0 : ixix) - (str2->ix); if (jx ~= 0) return jx; } return 0; ]; #Ifdef DEBUG; [ DebugAction a str; if (a >= 4096) { print ""; return; } if (a < 0 || a >= #identifiers_table-->7) print ""; else { str = #identifiers_table-->6; str = str-->a; if (str) print (string) str; else print ""; } ]; [ DebugAttribute a str; if (a < 0 || a >= NUM_ATTR_BYTES*8) print ""; else { str = #identifiers_table-->4; str = str-->a; if (str) print (string) str; else print ""; } ]; #Endif; [ VM_CommandTableAddress i; return (#grammar_table)-->(i+1); ]; [ VM_PrintCommandWords i wd j dictlen entrylen; dictlen = #dictionary_table-->0; entrylen = DICT_WORD_SIZE + 7; for (j=0 : j ! Glulx_PrintAnything(0) ! Glulx_PrintAnything("string"); print (string) "string"; ! Glulx_PrintAnything('word') print (address) 'word'; ! Glulx_PrintAnything(obj) print (name) obj; ! Glulx_PrintAnything(obj, prop) obj.prop(); ! Glulx_PrintAnything(obj, prop, args...) obj.prop(args...); ! Glulx_PrintAnything(func) func(); ! Glulx_PrintAnything(func, args...) func(args...); [ Glulx_PrintAnything _vararg_count obj mclass; if (_vararg_count == 0) return; @copy sp obj; _vararg_count--; if (obj == 0) return; if (obj->0 == $60) { ! Dictionary word. Metaclass() can't catch this case, so we do it manually print (address) obj; return; } mclass = metaclass(obj); switch (mclass) { nothing: return; String: print (string) obj; return; Routine: ! Call the function with all the arguments which are already ! on the stack. @call obj _vararg_count 0; return; Object: if (_vararg_count == 0) { print (name) obj; } else { ! Push the object back onto the stack, and call the ! veneer routine that handles obj.prop() calls. @copy obj sp; _vararg_count++; @call CA__Pr _vararg_count 0; } return; } ]; [ Glulx_PrintAnyToArray _vararg_count arr arrlen str oldstr len; @copy sp arr; @copy sp arrlen; _vararg_count = _vararg_count - 2; oldstr = glk_stream_get_current(); str = glk_stream_open_memory(arr, arrlen, 1, 0); if (str == 0) return 0; glk_stream_set_current(str); @call Glulx_PrintAnything _vararg_count 0; glk_stream_set_current(oldstr); @copy $ffffffff sp; @copy str sp; @glk $0044 2 0; ! stream_close @copy sp len; @copy sp 0; return len; ]; Constant GG_ANYTOSTRING_LEN 66; Array AnyToStrArr -> GG_ANYTOSTRING_LEN+1; [ Glulx_ChangeAnyToCString _vararg_count ix len; ix = GG_ANYTOSTRING_LEN-2; @copy ix sp; ix = AnyToStrArr+1; @copy ix sp; ix = _vararg_count+2; @call Glulx_PrintAnyToArray ix len; AnyToStrArr->0 = $E0; if (len >= GG_ANYTOSTRING_LEN) len = GG_ANYTOSTRING_LEN-1; AnyToStrArr->(len+1) = 0; return AnyToStrArr; ]; [ VM_ClearScreen window; if (window == WIN_ALL or WIN_MAIN) { glk_window_clear(gg_mainwin); if (gg_quotewin) { glk_window_close(gg_quotewin, 0); gg_quotewin = 0; } } if (gg_statuswin && window == WIN_ALL or WIN_STATUS) glk_window_clear(gg_statuswin); ]; [ VM_ScreenWidth id; id=gg_mainwin; if (gg_statuswin && statuswin_current) id = gg_statuswin; glk_window_get_size(id, gg_arguments, 0); return gg_arguments-->0; ]; [ VM_ScreenHeight; glk_window_get_size(gg_mainwin, 0, gg_arguments); return gg_arguments-->0; ]; [ VM_SetWindowColours f b window doclear i fwd bwd swin; if (clr_on && f && b) { if (window) swin = 5-window; ! 4 for TextGrid, 3 for TextBuffer fwd = MakeColourWord(f); bwd = MakeColourWord(b); for (i=0 : i 9) return c; c = c-2; return $ff0000*(c&1) + $ff00*(c&2 ~= 0) + $ff*(c&4 ~= 0); ]; [ VM_MainWindow; glk_set_window(gg_mainwin); ! set_window statuswin_current=0; ]; [ VM_StatusLineHeight hgt; if (gg_statuswin == 0) return; if (hgt == statuswin_cursize) return; glk_window_set_arrangement(glk_window_get_parent(gg_statuswin), $12, hgt, 0); statuswin_cursize = hgt; ]; [ VM_MoveCursorInStatusLine line column; if (gg_statuswin == 0) return; glk_set_window(gg_statuswin); if (line == 0) { line = 1; column = 1; } glk_window_move_cursor(gg_statuswin, column-1, line-1); statuswin_current=1; ]; [ Box__Routine maxwid arr ix lines lastnl parwin; maxwid = 0; ! squash compiler warning lines = arr-->0; if (gg_quotewin == 0) { gg_arguments-->0 = lines; ix = InitGlkWindow(GG_QUOTEWIN_ROCK); if (ix == 0) gg_quotewin = glk_window_open(gg_mainwin, winmethod_Fixed + winmethod_Above, lines, wintype_TextBuffer, GG_QUOTEWIN_ROCK); } else { parwin = glk_window_get_parent(gg_quotewin); glk_window_set_arrangement(parwin, $12, lines, 0); } lastnl = true; if (gg_quotewin) { glk_window_clear(gg_quotewin); glk_set_window(gg_quotewin); lastnl = false; } VM_Style(BLOCKQUOTE_VMSTY); for (ix=0 : ix(ix+1); if (ix < lines-1 || lastnl) new_line; } VM_Style(NORMAL_VMSTY); if (gg_quotewin) glk_set_window(gg_mainwin); ]; #Ifdef DEBUG; [ GlkListSub id val; id = glk_window_iterate(0, gg_arguments); while (id) { print "Window ", id, " (", gg_arguments-->0, "): "; val = glk_window_get_type(id); switch (val) { 1: print "pair"; 2: print "blank"; 3: print "textbuffer"; 4: print "textgrid"; 5: print "graphics"; default: print "unknown"; } val = glk_window_get_parent(id); if (val) print ", parent is window ", val; else print ", no parent (root)"; val = glk_window_get_stream(id); print ", stream ", val; val = glk_window_get_echo_stream(id); if (val) print ", echo stream ", val; print "^"; id = glk_window_iterate(id, gg_arguments); } id = glk_stream_iterate(0, gg_arguments); while (id) { print "Stream ", id, " (", gg_arguments-->0, ")^"; id = glk_stream_iterate(id, gg_arguments); } id = glk_fileref_iterate(0, gg_arguments); while (id) { print "Fileref ", id, " (", gg_arguments-->0, ")^"; id = glk_fileref_iterate(id, gg_arguments); } if (glk_gestalt(gestalt_Sound, 0)) { id = glk_schannel_iterate(0, gg_arguments); while (id) { print "Soundchannel ", id, " (", gg_arguments-->0, ")^"; id = glk_schannel_iterate(id, gg_arguments); } } ]; Verb meta 'glklist' * -> Glklist; #Endif; [ VM_Undo result_code; @restoreundo result_code; return (~~result_code); ]; [ VM_Save_Undo result_code; @saveundo result_code; if (result_code == -1) { GGRecoverObjects(); return 2; } return (~~result_code); ]; [ QUIT_THE_GAME_R; if (actor ~= player) rfalse; GL__M(##Quit, 2); if (YesOrNo()~=0) quit; ]; [ RESTART_THE_GAME_R; if (actor ~= player) rfalse; GL__M(##Restart, 1); if (YesOrNo() ~= 0) { @restart; GL__M(##Restart, 2); } ]; [ RESTORE_THE_GAME_R res fref; if (actor ~= player) rfalse; fref = glk_fileref_create_by_prompt($01, $02, 0); if (fref == 0) jump RFailed; gg_savestr = glk_stream_open_file(fref, $02, GG_SAVESTR_ROCK); glk_fileref_destroy(fref); if (gg_savestr == 0) jump RFailed; @restore gg_savestr res; glk_stream_close(gg_savestr, 0); gg_savestr = 0; .RFailed; GL__M(##Restore, 1); ]; [ SAVE_THE_GAME_R res fref; if (actor ~= player) rfalse; fref = glk_fileref_create_by_prompt($01, $01, 0); if (fref == 0) jump SFailed; gg_savestr = glk_stream_open_file(fref, $01, GG_SAVESTR_ROCK); glk_fileref_destroy(fref); if (gg_savestr == 0) jump SFailed; @save gg_savestr res; if (res == -1) { ! The player actually just typed "restore". We're going to print ! GL__M(##Restore,2); the Z-Code Inform library does this correctly ! now. But first, we have to recover all the Glk objects; the values ! in our global variables are all wrong. GGRecoverObjects(); glk_stream_close(gg_savestr, 0); ! stream_close gg_savestr = 0; return GL__M(##Restore, 2); } glk_stream_close(gg_savestr, 0); ! stream_close gg_savestr = 0; if (res == 0) return GL__M(##Save, 2); .SFailed; GL__M(##Save, 1); ]; [ VERIFY_THE_STORY_FILE_R res; if (actor ~= player) rfalse; @verify res; if (res == 0) return GL__M(##Verify, 1); GL__M(##Verify, 2); ]; [ SWITCH_TRANSCRIPT_ON_R; if (actor ~= player) rfalse; if (gg_scriptstr ~= 0) return GL__M(##ScriptOn, 1); if (gg_scriptfref == 0) { gg_scriptfref = glk_fileref_create_by_prompt($102, $05, GG_SCRIPTFREF_ROCK); if (gg_scriptfref == 0) jump S1Failed; } ! stream_open_file gg_scriptstr = glk_stream_open_file(gg_scriptfref, $05, GG_SCRIPTSTR_ROCK); if (gg_scriptstr == 0) jump S1Failed; glk_window_set_echo_stream(gg_mainwin, gg_scriptstr); GL__M(##ScriptOn, 2); VersionSub(); return; .S1Failed; GL__M(##ScriptOn, 3); ]; [ SWITCH_TRANSCRIPT_OFF_R; if (actor ~= player) rfalse; if (gg_scriptstr == 0) return GL__M(##ScriptOff,1); GL__M(##ScriptOff, 2); glk_stream_close(gg_scriptstr, 0); ! stream_close gg_scriptstr = 0; ]; [ ANNOUNCE_STORY_FILE_VERSION_R ix; if (actor ~= player) rfalse; Banner(); print "Identification number: "; for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix; print "^"; @gestalt 1 0 ix; print "Interpreter version ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, " / "; @gestalt 0 0 ix; print "VM ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, " / "; print "Library serial number ", (string) LibSerial, "^"; #Ifdef LanguageVersion; print (string) LanguageVersion, "^"; #Endif; ! LanguageVersion ShowExtensionVersions(); say__p = 1; ]; [ DESCEND_TO_SPECIFIC_ACTION_R; indirect(#actions_table-->(action+1)); rtrue; ]; #Endif; #Ifdef TARGET_ZCODE; Global top_object; ! largest valid number of any tree object Global xcommsdir; ! true if command recording is on Global transcript_mode; ! true if game scripting is on Constant INPUT_BUFFER_LEN = 120; ! Length of buffer array Array buffer -> 123; ! Buffer for parsing main line of input Array buffer2 -> 123; ! Buffers for supplementary questions Array buffer3 -> 123; ! Buffer retaining input for "again" Array parse buffer 63; ! Parse table mirroring it Array parse2 buffer 63; ! Global dict_start; Global dict_entry_size; Global dict_end; [ VM_Initialise i; standard_interpreter = HDR_TERPSTANDARD-->0; transcript_mode = ((HDR_GAMEFLAGS-->0) & 1); dict_start = HDR_DICTIONARY-->0; dict_entry_size = dict_start->(dict_start->0 + 1); dict_start = dict_start + dict_start->0 + 4; dict_end = dict_start + ((dict_start - 2)-->0) * dict_entry_size; buffer->0 = INPUT_BUFFER_LEN; buffer2->0 = INPUT_BUFFER_LEN; buffer3->0 = INPUT_BUFFER_LEN; parse->0 = 15; parse2->0 = 15; top_object = #largest_object-255; #ifdef FIX_RNG; @random 10000 -> i; i = -i-2000; print "[Random number generator seed is ", i, "]^"; @random i -> i; #endif; ! FIX_RNG ]; [ ENABLE_GLULX_ACCEL_R; rfalse; ]; [ VM_Describe_Release i; print "Release ", (HDR_GAMERELEASE-->0) & $03ff, " / Serial number "; for (i=0 : i<6 : i++) print (char) HDR_GAMESERIAL->i; ]; [ VM_KeyChar win key; if (win) @set_window win; @read_char 1 -> key; return key; ]; [ VM_KeyDelay tenths key; @read_char 1 tenths VM_KeyDelay_Interrupt -> key; return key; ]; [ VM_KeyDelay_Interrupt; rtrue; ]; [ VM_ReadKeyboard a_buffer a_table i; read a_buffer a_table; #ifdef ECHO_COMMANDS; print "** "; for (i=2: i<=(a_buffer->1)+1: i++) print (char) a_buffer->i; print "^"; #ifnot; i=0; ! suppress compiler warning #endif; #Iftrue (#version_number == 6); @output_stream -1; @loadb a_buffer 1 -> sp; @add a_buffer 2 -> sp; @print_table sp sp; new_line; @output_stream 1; #Endif; ]; [ VM_CopyBuffer bto bfrom i; for (i=0: ii = bfrom->i; ]; [ VM_PrintToBuffer buf len a b c; @output_stream 3 buf; switch (metaclass(a)) { String: print (string) a; Routine: a(b, c); Object, Class: if (b) PrintOrRun(a, b, true); else print (name) a; } @output_stream -3; if (buf-->0 > len) print "Error: Overflow in VM_PrintToBuffer.^"; return buf-->0; ]; [ VM_Tokenise b p; b->(2 + b->1) = 0; @tokenise b p; ]; [ LTI_Insert i ch b y; ! Protect us from strict mode, as this isn't an array in quite the ! sense it expects b = buffer; ! Insert character ch into buffer at point i. ! Being careful not to let the buffer possibly overflow: y = b->1; if (y > b->0) y = b->0; ! Move the subsequent text along one character: for (y=y+2 : y>i : y--) b->y = b->(y-1); b->i = ch; ! And the text is now one character longer: if (b->1 < b->0) (b->1)++; ]; [ VM_InvalidDictionaryAddress addr; if ((UnsignedCompare(addr, dict_start) < 0) || (UnsignedCompare(addr, dict_end) >= 0) || ((addr - dict_start) % dict_entry_size ~= 0)) rtrue; rfalse; ]; [ VM_DictionaryAddressToNumber w; return (w-(HDR_DICTIONARY-->0 + 7))/9; ]; [ VM_NumberToDictionaryAddress n; return HDR_DICTIONARY-->0 + 7 + 9*n; ]; [ VM_CommandTableAddress i; return (HDR_STATICMEMORY-->0)-->i; ]; [ VM_PrintCommandWords i da j; da = HDR_DICTIONARY-->0; for (j=0 : j<(da+5)-->0 : j++) if (da->(j*9 + 14) == $ff-i) print "'", (address) VM_NumberToDictionaryAddress(j), "' "; ]; #Ifdef DEBUG; [ DebugAction a anames; if (a >= 4096) { print ""; return; } anames = #identifiers_table; anames = anames + 2*(anames-->0) + 2*48; print (string) anames-->a; ]; [ DebugAttribute a anames; if (a < 0 || a >= 48) print ""; else { anames = #identifiers_table; anames = anames + 2*(anames-->0); print (string) anames-->a; } ]; #Endif; [ VM_Seed_RNG n; if (n > 0) n = -n; @random n -> n; ]; [ VM_AllocateMemory amount; return 0; ]; [ VM_FreeMemory address; ]; [ VM_Picture resource_ID; #IFTRUE #version_number == 6; ! Z-machine version 6 @draw_picture resource_ID; #ENDIF; ]; [ VM_SoundEffect resource_ID; #IFTRUE #version_number == 6; ! Z-machine version 6 @sound_effect resource_ID; #ENDIF; ]; [ VM_Style sty; switch (sty) { NORMAL_VMSTY, NOTE_VMSTY: style roman; HEADER_VMSTY, SUBHEADER_VMSTY, ALERT_VMSTY: style bold; } ]; [ VM_UpperToLowerCase c; switch (c) { 'A' to 'Z': c = c + 32; 202, 204, 212, 214, 221: c--; 217, 218: c = c - 2; 158 to 160, 167 to 169, 208 to 210: c = c - 3; 186 to 190, 196 to 200: c = c - 5 ; 175 to 180: c = c - 6; } return c; ]; [ VM_LowerToUpperCase c; switch (c) { 'a' to 'z': c = c - 32; 201, 203, 211, 213, 220: c++; 215, 216: c = c + 2; 155 to 157, 164 to 166, 205 to 207: c = c + 3; 181 to 185, 191 to 195: c = c + 5 ; 169 to 174: c = c + 6; } return c; ]; [ VM_ClearScreen window; switch (window) { WIN_ALL: @erase_window -1; statuswin_cursize = 0; WIN_STATUS: @erase_window 1; WIN_MAIN: @erase_window 0; } ]; #Iftrue (#version_number == 6); [ VM_ScreenWidth width charw; @get_wind_prop 1 3 -> width; @get_wind_prop 1 13 -> charw; charw = charw & $FF; return (width+charw-1) / charw; ]; #Ifnot; [ VM_ScreenWidth; return (HDR_SCREENWCHARS->0); ]; #Endif; [ VM_ScreenHeight; return (HDR_SCREENHLINES->0); ]; [ VM_SetWindowColours f b window; if (clr_on && f && b) { if (window == 0) { ! if setting both together, set reverse clr_fgstatus = b; clr_bgstatus = f; } if (window == 1) { clr_fgstatus = f; clr_bgstatus = b; } if (window == 0 or 2) { clr_fg = f; clr_bg = b; } if (statuswin_current) @set_colour clr_fgstatus clr_bgstatus; else @set_colour clr_fg clr_bg; } ]; [ VM_RestoreWindowColours; ! compare I6 library patch L61007 if (clr_on) { ! check colour has been used VM_SetWindowColours(clr_fg, clr_bg, 2); ! make sure both sets of variables are restored VM_SetWindowColours(clr_fgstatus, clr_bgstatus, 1, true); VM_ClearScreen(); } #Iftrue (#version_number == 6); ! request screen update (0-->8) = (0-->8) | $$00000100; #Endif; ]; [ VM_MainWindow; if (statuswin_current) { if (clr_on && clr_bgstatus > 1) @set_colour clr_fg clr_bg; else style roman; @set_window 0; } statuswin_current = false; ]; [ VM_MoveCursorInStatusLine line column; ! 1-based position on text grid if (~~statuswin_current) { @set_window 1; if (clr_on && clr_bgstatus > 1) @set_colour clr_fgstatus clr_bgstatus; else style reverse; } if (line == 0) { line = 1; column = 1; } #Iftrue (#version_number == 6); Z6_MoveCursor(line, column); #Ifnot; @set_cursor line column; #Endif; statuswin_current = true; ]; #Iftrue (#version_number == 6); [ Z6_MoveCursor line column charw charh; ! 1-based position on text grid @get_wind_prop 1 13 -> charw; ! font size @log_shift charw $FFF8 -> charh; charw = charw / $100; line = 1 + charh*(line-1); column = 1 + charw*(column-1); @set_cursor line column; ]; #Endif; #Iftrue (#version_number == 6); [ VM_StatusLineHeight height wx wy x y charh; ! Split the window. Standard 1.0 interpreters should keep the window 0 ! cursor in the same absolute position, but older interpreters, ! including Infocom's don't - they keep the window 0 cursor in the ! same position relative to its origin. We therefore compensate ! manually. @get_wind_prop 0 0 -> wy; @get_wind_prop 0 1 -> wx; @get_wind_prop 0 13 -> charh; @log_shift charh $FFF8 -> charh; @get_wind_prop 0 4 -> y; @get_wind_prop 0 5 -> x; height = height * charh; @split_window height; y = y - height + wy - 1; if (y < 1) y = 1; x = x + wx - 1; @set_cursor y x 0; statuswin_cursize = height; ]; #Ifnot; [ VM_StatusLineHeight height; if (statuswin_cursize ~= height) @split_window height; statuswin_cursize = height; ]; #Endif; #Iftrue (#version_number == 6); [ Z6_DrawStatusLine width x charw scw; (0-->8) = (0-->8) &~ $$00000100; @push say__p; @push say__pc; BeginActivity(CONSTRUCTING_STATUS_LINE_ACT); VM_StatusLineHeight(statuswin_size); ! Now clear the window. This isn't totally trivial. Our approach is to select the ! fixed space font, measure its width, and print an appropriate ! number of spaces. We round up if the screen isn't a whole number ! of characters wide, and rely on window 1 being set to clip by default. VM_MoveCursorInStatusLine(1, 1); @set_font 4 -> x; width = VM_ScreenWidth(); spaces width; ClearParagraphing(); if (ForActivity(CONSTRUCTING_STATUS_LINE_ACT) == false) { ! Back to standard font for the display. We use output_stream 3 to ! measure the space required, the aim being to get 50 characters ! worth of space for the location name. VM_MoveCursorInStatusLine(1, 2); @set_font 1 -> x; switch (metaclass(left_hand_status_line)) { String: print (string) left_hand_status_line; Routine: left_hand_status_line(); } @get_wind_prop 1 3 -> width; @get_wind_prop 1 13 -> charw; charw = charw & $FF; @output_stream 3 StorageForShortName; print (PrintText) right_hand_status_line; @output_stream -3; scw = HDR_PIXELSTO3-->0 + charw; x = 1+width-scw; @set_cursor 1 x; print (PrintText) right_hand_status_line; } ! Reselect roman, as Infocom's interpreters go funny if reverse is selected twice. VM_MainWindow(); ClearParagraphing(); EndActivity(CONSTRUCTING_STATUS_LINE_ACT); @pull say__pc; @pull say__p; ]; #Endif; [ VM_Undo result_code; @restore_undo result_code; return result_code; ]; [ VM_Save_Undo result_code; @save_undo result_code; return result_code; ]; [ QUIT_THE_GAME_R; if (actor ~= player) rfalse; GL__M(##Quit,2); if (YesOrNo()~=0) quit; ]; [ RESTART_THE_GAME_R; if (actor ~= player) rfalse; GL__M(##Restart,1); if (YesOrNo()~=0) { @restart; GL__M(##Restart,2); } ]; [ RESTORE_THE_GAME_R; if (actor ~= player) rfalse; restore Rmaybe; return GL__M(##Restore,1); .RMaybe; GL__M(##Restore,2); ]; [ SAVE_THE_GAME_R flag; if (actor ~= player) rfalse; #IFV5; @save -> flag; switch (flag) { 0: GL__M(##Save,1); 1: GL__M(##Save,2); 2: GL__M(##Restore,2); } #IFNOT; save Smaybe; return GL__M(##Save,1); .SMaybe; GL__M(##Save,2); #ENDIF; ]; [ VERIFY_THE_STORY_FILE_R; if (actor ~= player) rfalse; @verify ?Vmaybe; jump Vwrong; .Vmaybe; return GL__M(##Verify,1); .Vwrong; GL__M(##Verify,2); ]; [ SWITCH_TRANSCRIPT_ON_R; if (actor ~= player) rfalse; transcript_mode = ((0-->8) & 1); if (transcript_mode) return GL__M(##ScriptOn,1); @output_stream 2; if (((0-->8) & 1) == 0) return GL__M(##ScriptOn,3); GL__M(##ScriptOn,2); VersionSub(); transcript_mode = true; ]; [ SWITCH_TRANSCRIPT_OFF_R; if (actor ~= player) rfalse; transcript_mode = ((0-->8) & 1); if (transcript_mode == false) return GL__M(##ScriptOff,1); GL__M(##ScriptOff,2); @output_stream -2; if ((0-->8) & 1) return GL__M(##ScriptOff,3); transcript_mode = false; ]; [ ANNOUNCE_STORY_FILE_VERSION_R ix; if (actor ~= player) rfalse; Banner(); print "Identification number: "; for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix; print "^"; ix = 0; ! shut up compiler warning if (standard_interpreter > 0) { print "Standard interpreter ", standard_interpreter/256, ".", standard_interpreter%256, " (", HDR_TERPNUMBER->0; #Iftrue (#version_number == 6); print (char) '.', HDR_TERPVERSION->0; #Ifnot; print (char) HDR_TERPVERSION->0; #Endif; print ") / "; } else { print "Interpreter ", HDR_TERPNUMBER->0, " Version "; #Iftrue (#version_number == 6); print HDR_TERPVERSION->0; #Ifnot; print (char) HDR_TERPVERSION->0; #Endif; print " / "; } print "Library serial number ", (string) LibSerial, "^"; #Ifdef LanguageVersion; print (string) LanguageVersion, "^"; #Endif; ! LanguageVersion #ifdef ShowExtensionVersions; ShowExtensionVersions(); #endif; say__p = 1; ]; [ DESCEND_TO_SPECIFIC_ACTION_R; indirect(#actions_table-->action); rtrue; ]; [ OhLookItsReal; ]; [ OhLookItsRoom; ]; [ OhLookItsThing; ]; [ OC__Cl obj cla j a n objflag; ! if (cla > 4) OhLookItsReal(); ! if (cla == K1_room) OhLookItsRoom(); ! if (cla == K2_thing) OhLookItsThing(); @jl obj 1 ?NotObj; @jg obj max_z_object ?NotObj; @inc objflag; @je cla K1_room ?~NotRoom; @test_attr obj mark_as_room ?rtrue; @rfalse; .NotRoom; @je cla K2_thing ?~NotObj; @test_attr obj mark_as_thing ?rtrue; @rfalse; .NotObj; @je cla Object Class ?ObjOrClass; @je cla Routine String ?RoutOrStr; @jin cla 1 ?~Mistake; @jz objflag ?rfalse; @get_prop_addr obj 2 -> a; @jz a ?rfalse; @get_prop_len a -> n; @div n 2 -> n; .Loop; @loadw a j -> sp; @je sp cla ?rtrue; @inc j; @jl j n ?Loop; @rfalse; .ObjOrClass; @jz objflag ?rfalse; @je cla Object ?JustObj; ! So now cla is Class @jg obj String ?~rtrue; @jin obj Class ?rtrue; @rfalse; .JustObj; ! So now cla is Object @jg obj String ?~rfalse; @jin obj Class ?rfalse; @rtrue; .RoutOrStr; @jz objflag ?~rfalse; @call_2s Z__Region obj -> sp; @inc sp; @je sp cla ?rtrue; @rfalse; .Mistake; RT__Err("apply 'ofclass' for", cla, -1); rfalse; ]; [ Unsigned__Compare x y u v; @je x y ?rfalse; ! i.e., return 0 @jl x 0 ?XNegative; ! So here x >= 0 and x ~= y @jl y 0 ?XPosYNeg; ! Here x >=0, y >= 0, x ~= y @jg x y ?rtrue; ! i.e., return 1 @ret -1; .XPosYNeg; ! Here x >= 0, y < 0, x ~= y @ret -1; .XNegative; @jl y 0 ?~rtrue; ! if x < 0, y >= 0, return 1 ! Here x < 0, y < 0, x ~= y @jg x y ?rtrue; @ret -1; ]; [ RT__ChLDW base offset; @loadw base offset -> sp; @ret sp; ]; #Endif; Object Compass "compass" has concealed; Constant AGAIN1__WD = 'again'; Constant AGAIN2__WD = 'g//'; Constant AGAIN3__WD = 'again'; Constant OOPS1__WD = 'oops'; Constant OOPS2__WD = 'o//'; Constant OOPS3__WD = 'oops'; Constant UNDO1__WD = 'undo'; Constant UNDO2__WD = 'undo'; Constant UNDO3__WD = 'undo'; Constant ALL1__WD = 'all'; Constant ALL2__WD = 'each'; Constant ALL3__WD = 'every'; Constant ALL4__WD = 'everything'; Constant ALL5__WD = 'both'; Constant AND1__WD = 'and'; Constant AND2__WD = 'and'; Constant AND3__WD = 'and'; Constant BUT1__WD = 'but'; Constant BUT2__WD = 'except'; Constant BUT3__WD = 'but'; Constant ME1__WD = 'me'; Constant ME2__WD = 'myself'; Constant ME3__WD = 'self'; Constant OF1__WD = 'of'; Constant OF2__WD = 'of'; Constant OF3__WD = 'of'; Constant OF4__WD = 'of'; Constant OTHER1__WD = 'another'; Constant OTHER2__WD = 'other'; Constant OTHER3__WD = 'other'; Constant THEN1__WD = 'then'; Constant THEN2__WD = 'then'; Constant THEN3__WD = 'then'; Constant NO1__WD = 'n//'; Constant NO2__WD = 'no'; Constant NO3__WD = 'no'; Constant YES1__WD = 'y//'; Constant YES2__WD = 'yes'; Constant YES3__WD = 'yes'; Constant AMUSING__WD = 'amusing'; Constant FULLSCORE1__WD = 'fullscore'; Constant FULLSCORE2__WD = 'full'; Constant QUIT1__WD = 'q//'; Constant QUIT2__WD = 'quit'; Constant RESTART__WD = 'restart'; Constant RESTORE__WD = 'restore'; Array LanguagePronouns table ! word possible GNAs connected ! to follow: to: ! a i ! s p s p ! mfnmfnmfnmfn 'it' $$001000111000 NULL 'him' $$100000000000 NULL 'her' $$010000000000 NULL 'them' $$000111000111 NULL; Array LanguageDescriptors table ! word possible GNAs descriptor connected ! to follow: type: to: ! a i ! s p s p ! mfnmfnmfnmfn 'my' $$111111111111 POSSESS_PK 0 'this' $$111111111111 POSSESS_PK 0 'these' $$000111000111 POSSESS_PK 0 'that' $$111111111111 POSSESS_PK 1 'those' $$000111000111 POSSESS_PK 1 'his' $$111111111111 POSSESS_PK 'him' 'her' $$111111111111 POSSESS_PK 'her' 'their' $$111111111111 POSSESS_PK 'them' 'its' $$111111111111 POSSESS_PK 'it' 'the' $$111111111111 DEFART_PK NULL 'a//' $$111000111000 INDEFART_PK NULL 'an' $$111000111000 INDEFART_PK NULL 'some' $$000111000111 INDEFART_PK NULL 'lit' $$111111111111 light NULL 'lighted' $$111111111111 light NULL 'unlit' $$111111111111 (-light) NULL; Array LanguageNumbers table 'one' 1 'two' 2 'three' 3 'four' 4 'five' 5 'six' 6 'seven' 7 'eight' 8 'nine' 9 'ten' 10 'eleven' 11 'twelve' 12 'thirteen' 13 'fourteen' 14 'fifteen' 15 'sixteen' 16 'seventeen' 17 'eighteen' 18 'nineteen' 19 'twenty' 20 'twenty-one' 21 'twenty-two' 22 'twenty-three' 23 'twenty-four' 24 'twenty-five' 25 'twenty-six' 26 'twenty-seven' 27 'twenty-eight' 28 'twenty-nine' 29 'thirty' 30 ; [ LanguageNumber n f; if (n == 0) { print "zero"; rfalse; } if (n < 0) { print "minus "; n = -n; } #Iftrue (WORDSIZE == 4); if (n >= 1000000000) { if (f == 1) print ", "; print (LanguageNumber) n/1000000000, " billion"; n = n%1000000000; f = 1; } if (n >= 1000000) { if (f == 1) print ", "; print (LanguageNumber) n/1000000, " million"; n = n%1000000; f = 1; } #Endif; if (n >= 1000) { if (f == 1) print ", "; print (LanguageNumber) n/1000, " thousand"; n = n%1000; f = 1; } if (n >= 100) { if (f == 1) print ", "; print (LanguageNumber) n/100, " hundred"; n = n%100; f = 1; } if (n == 0) rfalse; #Ifdef DIALECT_US; if (f == 1) print " "; #Ifnot; if (f == 1) print " and "; #Endif; switch (n) { 1: print "one"; 2: print "two"; 3: print "three"; 4: print "four"; 5: print "five"; 6: print "six"; 7: print "seven"; 8: print "eight"; 9: print "nine"; 10: print "ten"; 11: print "eleven"; 12: print "twelve"; 13: print "thirteen"; 14: print "fourteen"; 15: print "fifteen"; 16: print "sixteen"; 17: print "seventeen"; 18: print "eighteen"; 19: print "nineteen"; 20 to 99: switch (n/10) { 2: print "twenty"; 3: print "thirty"; 4: print "forty"; 5: print "fifty"; 6: print "sixty"; 7: print "seventy"; 8: print "eighty"; 9: print "ninety"; } if (n%10 ~= 0) print "-", (LanguageNumber) n%10; } ]; [ LanguageTimeOfDay hours mins i; i = hours%12; if (i == 0) i = 12; if (i < 10) print " "; print i, ":", mins/10, mins%10; if ((hours/12) > 0) print " pm"; else print " am"; ]; [ LanguageDirection d; print (name) d; ]; [ LanguageToInformese; ]; Constant LanguageAnimateGender = male; Constant LanguageInanimateGender = neuter; Constant LanguageContractionForms = 2; ! English has two: ! 0 = starting with a consonant ! 1 = starting with a vowel [ LanguageContraction text; if (text->0 == 'a' or 'e' or 'i' or 'o' or 'u' or 'A' or 'E' or 'I' or 'O' or 'U') return 1; return 0; ]; Array LanguageArticles --> ! Contraction form 0: Contraction form 1: ! Cdef Def Indef Cdef Def Indef "The " "the " "a " "The " "the " "an " ! Articles 0 "The " "the " "some " "The " "the " "some "; ! Articles 1 ! a i ! s p s p ! m f n m f n m f n m f n Array LanguageGNAsToArticles --> 0 0 0 1 1 1 0 0 0 1 1 1; [ LanguageVerb i; switch (i) { 'i//','inv','inventory': print "take inventory"; 'l//': print "look"; 'x//': print "examine"; 'z//': print "wait"; default: rfalse; } rtrue; ]; [ LanguageVerbLikesAdverb w; if (w == 'look' or 'go' or 'push' or 'walk') rtrue; rfalse; ]; [ LanguageVerbMayBeName w; if (w == 'long' or 'short' or 'normal' or 'brief' or 'full' or 'verbose') rtrue; rfalse; ]; Constant NKEY__TX = "N = next subject"; Constant PKEY__TX = "P = previous"; Constant QKEY1__TX = " Q = resume game"; Constant QKEY2__TX = "Q = previous menu"; Constant RKEY__TX = "RETURN = read subject"; Constant NKEY1__KY = 'N'; Constant NKEY2__KY = 'n'; Constant PKEY1__KY = 'P'; Constant PKEY2__KY = 'p'; Constant QKEY1__KY = 'Q'; Constant QKEY2__KY = 'q'; Constant SCORE__TX = "Score: "; Constant MOVES__TX = "Moves: "; Constant TIME__TX = "Time: "; Global CANTGO__TX = "You can't go that way."; Global FORMER__TX = "your former self"; Global YOURSELF__TX = "yourself"; Constant YOU__TX = "You"; Constant DARKNESS__TX = "Darkness"; Constant THOSET__TX = "those things"; Constant THAT__TX = "that"; Constant OR__TX = " or "; Constant NOTHING__TX = "nothing"; Constant NOTHING2__TX = "Nothing"; Global IS__TX = " is"; Global ARE__TX = " are"; Global IS2__TX = "is "; Global ARE2__TX = "are "; Global IS3__TX = "is"; Global ARE3__TX = "are"; Constant AND__TX = " and "; #ifdef SERIAL_COMMA; Constant LISTAND__TX = ", and "; Constant LISTAND2__TX = " and "; #ifnot; Constant LISTAND__TX = " and "; Constant LISTAND2__TX = " and "; #endif; ! SERIAL_COMMA Constant WHOM__TX = "whom "; Constant WHICH__TX = "which "; Constant COMMA__TX = ", "; [ ThatorThose obj; ! Used in the accusative if (obj == player) { print "you"; return; } if (obj has pluralname) { print "those"; return; } if (obj has animate) { if (obj has female) { print "her"; return; } else if (obj hasnt neuter) { print "him"; return; } } print "that"; ]; [ ItorThem obj; if (obj == player) { print "yourself"; return; } if (obj has pluralname) { print "them"; return; } if (obj has animate) { if (obj has female) { print "her"; return; } else if (obj hasnt neuter) { print "him"; return; } } print "it"; ]; [ IsorAre obj; if (obj has pluralname || obj == player) print "are"; else print "is"; ]; [ HasorHave obj; if (obj has pluralname || obj == player) print "have"; else print "has"; ]; [ CThatorThose obj; ! Used in the nominative if (obj == player) { print "You"; return; } if (obj has pluralname) { print "Those"; return; } if (obj has animate) { if (obj has female) { print "She"; return; } else if (obj hasnt neuter) { print "He"; return; } } print "That"; ]; [ CTheyreorThats obj; if (obj == player) { print "You're"; return; } if (obj has pluralname) { print "They're"; return; } if (obj has animate) { if (obj has female) { print "She's"; return; } else if (obj hasnt neuter) { print "He's"; return; } } print "That's"; ]; [ HisHerTheir o; if (o has pluralname) { print "their"; return; } if (o has female) { print "her"; return; } if (o has neuter) { print "its"; return; } print "his"; ]; [ HimHerItself o; if (o has pluralname) { print "theirselves"; return; } if (o has female) { print "herself"; return; } if (o has neuter) { print "itself"; return; } print "himself"; ]; [ LanguageLM n x1 x2; say__p = 1; Answer,Ask: "There is no reply."; ! Ask: see Answer Attack: "Violence isn't the answer to this one."; Burn: "This dangerous act would achieve little."; Buy: "Nothing is on sale."; Climb: "I don't think much is to be achieved by that."; Close: switch (n) { 1: print_ret (ctheyreorthats) x1, " not something you can close."; 2: print_ret (ctheyreorthats) x1, " already closed."; 3: "You close ", (the) x1, "."; 4: print (The) actor, " closes ", (the) x1, ".^"; 5: print (The) x1, " close"; if (x1 hasnt pluralname) print "s"; print ".^"; } Consult: switch (n) { 1: "You discover nothing of interest in ", (the) x1, "."; 2: print (The) actor, " looks at ", (the) x1, ".^"; } Cut: "Cutting ", (thatorthose) x1, " up would achieve little."; Disrobe: switch (n) { 1: "You're not wearing ", (thatorthose) x1, "."; 2: "You take off ", (the) x1, "."; 3: print (The) actor, " takes off ", (the) x1, ".^"; } Drink: "There's nothing suitable to drink here."; Drop: switch (n) { 1: if (x1 has pluralname) print (The) x1, " are "; else print (The) x1, " is "; "already here."; 2: "You haven't got ", (thatorthose) x1, "."; 3: print "(first taking ", (the) x1, " off)^"; say__p = 0; return; 4: "Dropped."; 5: "There is no more room on ", (the) x1, "."; 6: "There is no more room in ", (the) x1, "."; 7: print (The) actor, " puts down ", (the) x1, ".^"; } Eat: switch (n) { 1: print_ret (ctheyreorthats) x1, " plainly inedible."; 2: "You eat ", (the) x1, ". Not bad."; 3: print (The) actor, " eats ", (the) x1, ".^"; } Enter: switch (n) { 1: print "But you're already "; if (x1 has supporter) print "on "; else print "in "; print_ret (the) x1, "."; 2: if (x1 has pluralname) print "They're"; else print "That's"; print " not something you can "; switch (verb_word) { 'stand': "stand on."; 'sit': "sit down on."; 'lie': "lie down on."; default: "enter."; } 3: "You can't get into the closed ", (name) x1, "."; 4: "You can only get into something free-standing."; 5: print "You get "; if (x1 has supporter) print "onto "; else print "into "; print_ret (the) x1, "."; 6: print "(getting "; if (x1 has supporter) print "off "; else print "out of "; print (the) x1; print ")^"; say__p = 0; return; 7: ! say__p = 0; if (x1 has supporter) "(getting onto ", (the) x1, ")"; if (x1 has container) "(getting into ", (the) x1, ")"; "(entering ", (the) x1, ")"; 8: print (The) actor, " gets into ", (the) x1, ".^"; 9: print (The) actor, " gets onto ", (the) x1, ".^"; } Examine: switch (n) { 1: "Darkness, noun. An absence of light to see by."; 2: "You see nothing special about ", (the) x1, "."; 3: print (The) x1, " ", (isorare) x1, " currently switched "; if (x1 has on) "on."; else "off."; 4: print (The) actor, " looks closely at ", (the) x1, ".^"; 5: "You see nothing unexpected in that direction."; } Exit: switch (n) { 1: "But you aren't in anything at the moment."; 2: "You can't get out of the closed ", (name) x1, "."; 3: print "You get "; if (x1 has supporter) print "off "; else print "out of "; print_ret (the) x1, "."; 4: print "But you aren't "; if (x1 has supporter) print "on "; else print "in "; print_ret (the) x1, "."; 5: print (The) actor, " gets off ", (the) x1, ".^"; 6: print (The) actor, " gets out of ", (the) x1, ".^"; } GetOff: "But you aren't on ", (the) x1, " at the moment."; Give: switch (n) { 1: "You aren't holding ", (the) x1, "."; 2: "You juggle ", (the) x1, " for a while, but don't achieve much."; 3: print (The) x1; if (x1 has pluralname) print " don't"; else print " doesn't"; " seem interested."; 4: print (The) x1; if (x1 has pluralname) print " aren't"; else print " isn't"; " able to receive things."; 5: "You give ", (the) x1, " to ", (the) second, "."; 6: print (The) actor, " gives ", (the) x1, " to you.^"; 7: print (The) actor, " gives ", (the) x1, " to ", (the) second, ".^"; } Go: switch (n) { 1: print "You'll have to get "; if (x1 has supporter) print "off "; else print "out of "; print_ret (the) x1, " first."; 2: print_ret (string) CANTGO__TX; ! "You can't go that way." 6: print "You can't, since ", (the) x1; if (x1 has pluralname) " lead nowhere."; else " leads nowhere."; 7: "You'll have to say which compass direction to go in."; 8: print (The) actor, " goes up"; 9: print (The) actor, " goes down"; 10: print (The) actor, " goes ", (name) x1; 11: print (The) actor, " arrives from above"; 12: print (The) actor, " arrives from below"; 13: print (The) actor, " arrives from the ", (name) x1; 14: print (The) actor, " arrives"; 15: print (The) actor, " arrives at ", (the) x1, " from above"; 16: print (The) actor, " arrives at ", (the) x1, " from below"; 17: print (The) actor, " arrives at ", (the) x1, " from the ", (name) x2; 18: print (The) actor, " goes through ", (the) x1; 19: print (The) actor, " arrives from ", (the) x1; 20: print "on ", (the) x1; 21: print "in ", (the) x1; 22: print ", pushing ", (the) x1, " in front, and you along too"; 23: print ", pushing ", (the) x1, " in front"; 24: print ", pushing ", (the) x1, " away"; 25: print ", pushing ", (the) x1, " in"; 26: print ", taking you along"; 27: print "(first getting off ", (the) x1, ")^"; say__p = 0; return; 28: print "(first opening ", (the) x1, ")^"; say__p = 0; return; } Insert: switch (n) { 1: "You need to be holding ", (the) x1, " before you can put ", (itorthem) x1, " into something else."; 2: print_ret (Cthatorthose) x1, " can't contain things."; 3: print_ret (The) x1, " ", (isorare) x1, " closed."; 4: "You'll need to take ", (itorthem) x1, " off first."; 5: "You can't put something inside itself."; 6: print "(first taking ", (itorthem) x1, " off)^"; say__p = 0; return; 7: "There is no more room in ", (the) x1, "."; 8: "Done."; 9: "You put ", (the) x1, " into ", (the) second, "."; 10: print (The) actor, " puts ", (the) x1, " into ", (the) second, ".^"; } Inv: switch (n) { 1: "You are carrying nothing."; 2: print "You are carrying"; 3: print ":^"; 4: print ".^"; 5: print (The) x1, " looks through ", (HisHerTheir) x1, " possessions.^"; } Jump: "You jump on the spot, fruitlessly."; Kiss: "Keep your mind on the game."; Listen: "You hear nothing unexpected."; ListMiscellany: switch (n) { 1: print " (providing light)"; 2: print " (closed)"; 4: print " (empty)"; 6: print " (closed and empty)"; 3: print " (closed and providing light)"; 5: print " (empty and providing light)"; 7: #ifdef SERIAL_COMMA; print " (closed, empty, and providing light)"; #ifnot; print " (closed, empty and providing light)"; #endif; 8: print " (providing light and being worn"; 9: print " (providing light"; 10: print " (being worn"; 11: print " ("; 12: print "open"; 13: print "open but empty"; 14: print "closed"; 15: print "closed and locked"; 16: print " and empty"; 17: print " (empty)"; 18: print " containing "; 19: print " (on "; 20: print ", on top of "; 21: print " (in "; 22: print ", inside "; } LMode1: " is now in its ~brief~ printing mode, which gives long descriptions of places never before visited and short descriptions otherwise."; LMode2: " is now in its ~verbose~ mode, which always gives long descriptions of locations (even if you've been there before)."; LMode3: " is now in its ~superbrief~ mode, which always gives short descriptions of locations (even if you haven't been there before)."; Lock: switch (n) { 1: if (x1 has pluralname) print "They don't "; else print "That doesn't "; "seem to be something you can lock."; 2: print_ret (ctheyreorthats) x1, " locked at the moment."; 3: "First you'll have to close ", (the) x1, "."; 4: if (x1 has pluralname) print "Those don't "; else print "That doesn't "; "seem to fit the lock."; 5: "You lock ", (the) x1, "."; 6: print (The) actor, " locks ", (the) x1, ".^"; } Look: switch (n) { 1: print " (on ", (the) x1, ")"; 2: print " (in ", (the) x1, ")"; 3: print " (as ", (object) x1, ")"; 4: print "On ", (the) x1, " "; WriteListFrom(child(x1), ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT); "."; 5,6: if (x1 ~= location) { if (x1 has supporter) print "On "; else print "In "; print (the) x1, " you"; } else print "You"; print " can "; if (n == 5) print "also "; print "see "; WriteListFrom(child(x1), ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+WORKFLAG_BIT); if (x1 ~= location) "."; else " here."; 7: "You see nothing unexpected in that direction."; 8: if (x1 has supporter) print " (on "; else print " (in "; print (the) x1, ")"; 9: print (The) actor, " looks around.^"; } LookUnder: switch (n) { 1: "But it's dark."; 2: "You find nothing of interest."; 3: print (The) actor, " looks under ", (the) x1, ".^"; } Mild: "Quite."; Miscellany: switch (n) { 1: "(considering the first sixteen objects only)^"; 2: "Nothing to do!"; 3: print " You have died "; 4: print " You have won "; 5: print "^Would you like to RESTART, RESTORE a saved game"; #Ifdef DEATH_MENTION_UNDO; print ", UNDO your last move"; #Endif; #ifdef SERIAL_COMMA; print ","; #endif; " or QUIT?"; 6: "[Your interpreter does not provide ~undo~. Sorry!]"; #Ifdef TARGET_ZCODE; 7: "~Undo~ failed. [Not all interpreters provide it.]"; #Ifnot; ! TARGET_GLULX 7: "[You cannot ~undo~ any further.]"; #Endif; ! TARGET_ 8: "Please give one of the answers above."; 9: "It is now pitch dark in here!"; 10: "I beg your pardon?"; 11: "[You can't ~undo~ what hasn't been done!]"; 12: "[Can't ~undo~ twice in succession. Sorry!]"; 13: "[Previous turn undone.]"; 14: "Sorry, that can't be corrected."; 15: "Think nothing of it."; 16: "~Oops~ can only correct a single word."; 17: "It is pitch dark, and you can't see a thing."; 18: print "yourself"; 19: "As good-looking as ever."; 20: "To repeat a command like ~frog, jump~, just say ~again~, not ~frog, again~."; 21: "You can hardly repeat that."; 22: "You can't begin with a comma."; 23: "You seem to want to talk to someone, but I can't see whom."; 24: "You can't talk to ", (the) x1, "."; 25: "To talk to someone, try ~someone, hello~ or some such."; 26: "(first taking ", (the) x1, ")"; 27: "I didn't understand that sentence."; 28: print "I only understood you as far as wanting to "; 29: "I didn't understand that number."; 30: "You can't see any such thing."; 31: "You seem to have said too little!"; 32: "You aren't holding that!"; 33: "You can't use multiple objects with that verb."; 34: "You can only use multiple objects once on a line."; 35: "I'm not sure what ~", (address) pronoun_word, "~ refers to."; 36: "You excepted something not included anyway!"; 37: "You can only do that to something animate."; #Ifdef DIALECT_US; 38: "That's not a verb I recognize."; #Ifnot; 38: "That's not a verb I recognise."; #Endif; 39: "That's not something you need to refer to in the course of this game."; 40: "You can't see ~", (address) pronoun_word, "~ (", (the) pronoun_obj, ") at the moment."; 41: "I didn't understand the way that finished."; 42: if (x1 == 0) print "None"; else print "Only ", (number) x1; print " of those "; if (x1 == 1) print "is"; else print "are"; " available."; 43: "Nothing to do!"; 44: "There are none at all available!"; 45: print "Who do you mean, "; 46: print "Which do you mean, "; 47: "Sorry, you can only have one item here. Which exactly?"; 48: print "Whom do you want"; if (actor ~= player) print " ", (the) actor; print " to "; PrintCommand(); print "?^"; 49: print "What do you want"; if (actor ~= player) print " ", (the) actor; print " to "; PrintCommand(); print "?^"; 50: print "Your score has just gone "; if (x1 > 0) print "up"; else { x1 = -x1; print "down"; } print " by ", (number) x1, " point"; if (x1 > 1) print "s"; 51: "(Since something dramatic has happened, your list of commands has been cut short.)"; 52: "^Type a number from 1 to ", x1, ", 0 to redisplay or press ENTER."; 53: "^[Please press SPACE.]"; 54: "[Comment recorded.]"; 55: "[Comment NOT recorded.]"; 56: print ".^"; 57: print "?^"; 58: print (The) actor, " ", (IsOrAre) actor, " unable to do that.^"; 59: "You must supply a noun."; 60: "You may not supply a noun."; 61: "You must name an object."; 62: "You may not name an object."; 63: "You must name a second object."; 64: "You may not name a second object."; 65: "You must supply a second noun."; 66: "You may not supply a second noun."; 67: "You must name something more substantial."; 68: print "(", (The) actor, " first taking ", (the) x1, ")^"; 69: "(first taking ", (the) x1, ")"; 70: "The use of UNDO is forbidden in this game."; 71: print (string) DARKNESS__TX; 72: print (The) x1; if (x1 has pluralname) print " have"; else print " has"; " better things to do."; 73: "That noun did not make sense in this context."; 74: print "[That command asks to do something outside of play, so it can only make sense from you to me. ", (The) x1, " cannot be asked to do this.]^"; 75: print " The End "; } No,Yes: "That was a rhetorical question."; NotifyOff: "Score notification off."; NotifyOn: "Score notification on."; Open: switch (n) { 1: print_ret (ctheyreorthats) x1, " not something you can open."; 2: if (x1 has pluralname) print "They seem "; else print "It seems "; "to be locked."; 3: print_ret (ctheyreorthats) x1, " already open."; 4: print "You open ", (the) x1, ", revealing "; if (WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT) == 0) "nothing."; "."; 5: "You open ", (the) x1, "."; 6: print (The) actor, " opens ", (the) x1, ".^"; 7: print (The) x1, " open"; if (x1 hasnt pluralname) print "s"; print ".^"; } Pronouns: switch (n) { 1: print "At the moment, "; 2: print "means "; 3: print "is unset"; 4: "no pronouns are known to the game."; 5: "."; } Pull,Push,Turn: switch (n) { 1: if (x1 has pluralname) print "Those are "; else print "It is "; "fixed in place."; 2: "You are unable to."; 3: "Nothing obvious happens."; 4: "That would be less than courteous."; 5: print (The) actor, " pulls ", (the) x1, ".^"; 6: print (The) actor, " pushes ", (the) x1, ".^"; 7: print (The) actor, " turns ", (the) x1, ".^"; } ! Push: see Pull PushDir: switch (n) { 1: print (The) x1, " cannot be pushed from place to place.^"; 2: "That's not a direction."; 3: "Not that way you can't."; } PutOn: switch (n) { 1: "You need to be holding ", (the) x1, " before you can put ", (itorthem) x1, " on top of something else."; 2: "You can't put something on top of itself."; 3: "Putting things on ", (the) x1, " would achieve nothing."; 4: "You lack the dexterity."; 5: print "(first taking ", (itorthem) x1, " off)^"; say__p = 0; return; 6: "There is no more room on ", (the) x1, "."; 7: "Done."; 8: "You put ", (the) x1, " on ", (the) second, "."; 9: print (The) actor, " puts ", (the) x1, " on ", (the) second, ".^"; } Quit: switch (n) { 1: print "Please answer yes or no."; 2: print "Are you sure you want to quit? "; } Remove: switch (n) { 1: if (x1 has pluralname) print "They are"; else print "It is"; " unfortunately closed."; 2: if (x1 has pluralname) print "But they aren't"; else print "But it isn't"; " there now."; 3: "Removed."; } Restart: switch (n) { 1: print "Are you sure you want to restart? "; 2: "Failed."; } Restore: switch (n) { 1: "Restore failed."; 2: "Ok."; } Rub: "You achieve nothing by this."; Save: switch (n) { 1: "Save failed."; 2: "Ok."; } Score: switch (n) { 1: if (deadflag) print "In that game you scored "; else print "You have so far scored "; print score, " out of a possible ", MAX_SCORE, ", in ", turns, " turn"; if (turns ~= 1) print "s"; return; 2: "There is no score in this story."; 3: print ", earning you the rank of "; } ScriptOff: switch (n) { 1: "Transcripting is already off."; 2: "^End of transcript."; 3: "Attempt to end transcript failed."; } ScriptOn: switch (n) { 1: "Transcripting is already on."; 2: "Start of a transcript of"; 3: "Attempt to begin transcript failed."; } Search: switch (n) { 1: "But it's dark."; 2: "There is nothing on ", (the) x1, "."; 3: print "On ", (the) x1, " "; WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT); "."; 4: "You find nothing of interest."; 5: "You can't see inside, since ", (the) x1, " ", (isorare) x1, " closed."; 6: print_ret (The) x1, " ", (isorare) x1, " empty."; 7: print "In ", (the) x1, " "; WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT); "."; 8: print (The) actor, " searches ", (the) x1, ".^"; } SetTo: "No, you can't set ", (thatorthose) x1, " to anything."; Show: switch (n) { 1: "You aren't holding ", (the) x1, "."; 2: print_ret (The) x1, " ", (isorare) x1, " unimpressed."; } Sing: "Your singing is abominable."; Sleep: "You aren't feeling especially drowsy."; Smell: "You smell nothing unexpected."; #Ifdef DIALECT_US; Sorry: "Oh, don't apologize."; #Ifnot; Sorry: "Oh, don't apologise."; #Endif; Squeeze: switch (n) { 1: "Keep your hands to yourself."; 2: "You achieve nothing by this."; 3: print (The) actor, " squeezes ", (the) x1, ".^"; } Strong: "Real adventurers do not use such language."; Swing: "There's nothing sensible to swing here."; SwitchOff: switch (n) { 1: print_ret (ctheyreorthats) x1, " not something you can switch."; 2: print_ret (ctheyreorthats) x1, " already off."; 3: "You switch ", (the) x1, " off."; 4: print (The) actor, " switches ", (the) x1, " off.^"; } SwitchOn: switch (n) { 1: print_ret (ctheyreorthats) x1, " not something you can switch."; 2: print_ret (ctheyreorthats) x1, " already on."; 3: "You switch ", (the) x1, " on."; 4: print (The) actor, " switches ", (the) x1, " on.^"; } Take: switch (n) { 1: "Taken."; 2: "You are always self-possessed."; 3: "I don't suppose ", (the) x1, " would care for that."; 4: print "You'd have to get "; if (x1 has supporter) print "off "; else print "out of "; print_ret (the) x1, " first."; 5: "You already have ", (thatorthose) x1, "."; 6: if (noun has pluralname) print "Those seem "; else print "That seems "; "to belong to ", (the) x1, "."; 7: if (noun has pluralname) print "Those seem "; else print "That seems "; "to be a part of ", (the) x1, "."; 8: print_ret (Cthatorthose) x1, " ", (isorare) x1, "n't available."; 9: print_ret (The) x1, " ", (isorare) x1, "n't open."; 10: if (x1 has pluralname) print "They're "; else print "That's "; "hardly portable."; 11: if (x1 has pluralname) print "They're "; else print "That's "; "fixed in place."; 12: "You're carrying too many things already."; 13: print "(putting ", (the) x1, " into ", (the) x2, " to make room)^"; say__p = 0; return; 14: "You can't reach into ", (the) x1, "."; 15: "You cannot carry ", (the) x1, "."; 16: print (The) actor, " picks up ", (the) x1, ".^"; } Taste: "You taste nothing unexpected."; Tell: switch (n) { 1: "You talk to yourself a while."; 2: "This provokes no reaction."; } Think: "What a good idea."; ThrowAt: switch (n) { 1: "Futile."; 2: "You lack the nerve when it comes to the crucial moment."; } Tie: "You would achieve nothing by this."; Touch: switch (n) { 1: "Keep your hands to yourself!"; 2: "You feel nothing unexpected."; 3: "If you think that'll help."; 4: print (The) actor, " touches ", (himheritself) x1, ".^"; 5: print (The) actor, " touches you.^"; 6: print (The) actor, " touches ", (the) x1, ".^"; } ! Turn: see Pull. Unlock: switch (n) { 1: if (x1 has pluralname) print "They don't "; else print "That doesn't "; "seem to be something you can unlock."; 2: print_ret (ctheyreorthats) x1, " unlocked at the moment."; 3: if (x1 has pluralname) print "Those don't "; else print "That doesn't "; "seem to fit the lock."; 4: "You unlock ", (the) x1, "."; 5: print (The) actor, " unlocks ", (the) x1, ".^"; } Verify: switch (n) { 1: "The game file has verified as intact."; 2: "The game file did not verify as intact, and may be corrupt."; } Wait: switch (n) { 1: "Time passes."; 2: print (The) actor, " waits.^"; } Wake: "The dreadful truth is, this is not a dream."; WakeOther:"That seems unnecessary."; Wave: switch (n) { 1: "But you aren't holding ", (thatorthose) x1, "."; 2: "You look ridiculous waving ", (the) x1, "."; 3: print (The) actor, " waves ", (the) x1, ".^"; } WaveHands:"You wave, feeling foolish."; Wear: switch (n) { 1: "You can't wear ", (thatorthose) x1, "!"; 2: "You're not holding ", (thatorthose) x1, "!"; 3: "You're already wearing ", (thatorthose) x1, "!"; 4: "You put on ", (the) x1, "."; 5: print (The) actor, " puts on ", (the) x1, ".^"; } ! Yes: see No. ]; [ L__M act n x1 x2 rv flag; @push sw__var; sw__var = act; if (n == 0) n = 1; @push action; lm_act = act; lm_n = n; lm_o = x1; lm_o2 = x2; switch (act) { ##Miscellany: rv = ((((PHR_717_r0 ())))) ; ##ListMiscellany: rv = ((((PHR_718_r1 ())))) ; default: rv = ((((PHR_719_r2 ())))) ; } action = sw__var; if (rv == false) rv = RunRoutines(LibraryMessages, before); @pull action; if (rv == false) LanguageLM(n, x1, x2); @pull sw__var; ]; Default LanguageCases 1; #Ifndef LibraryMessages; Object LibraryMessages; #Endif; Object thedark "(darkness object)"; [ OffersLight obj j; while (obj) { if (obj has light) rtrue; objectloop (j in obj) if (HasLightSource(j)) rtrue; if ((obj has container) && (obj hasnt open) && (obj hasnt transparent)) rfalse; if ((obj provides component_parent) && (obj.component_parent)) obj = obj.component_parent; else obj = parent(obj); } rfalse; ]; [ HasLightSource i j ad sr po; if (i == 0) rfalse; if (i has light) rtrue; if ((IsSeeThrough(i)) && (~~(HidesLightSource(i)))) objectloop (j in i) if (HasLightSource(j)) rtrue; ad = i.&add_to_scope; if (parent(i) ~= 0 && ad ~= 0) { if (metaclass(ad-->0) == Routine) { ats_hls = 0; ats_flag = 1; sr = scope_reason; po = parser_one; scope_reason = LOOPOVERSCOPE_REASON; parser_one = 0; RunRoutines(i, add_to_scope); scope_reason = sr; parser_one = po; ats_flag = 0; if (ats_hls == 1) rtrue; } else { for (j=0 : (WORDSIZE*j)j) && (HasLightSource(ad-->j) == 1)) rtrue; } } if (ComponentHasLight(i)) rtrue; rfalse; ]; [ ComponentHasLight o obj next_obj; if (o provides component_child) { obj = o.component_child; while (obj) { next_obj = obj.component_sibling; if (obj has light) rtrue; if (HasLightSource(obj)) rtrue; if ((obj provides component_child) && (ComponentHasLight(obj))) rtrue; obj = next_obj; } } rfalse; ]; [ HidesLightSource obj; if (obj == player) rfalse; if (obj has transparent or supporter) rfalse; if (obj has animate) rfalse; if (obj has container) return (obj hasnt open); return (obj hasnt enterable); ]; Global lightflag = false; [ ADJUST_LIGHT_R previous_light_condition; previous_light_condition = lightflag; lightflag = OffersLight(parent(player)); if ((previous_light_condition == false) && (lightflag == false)) { location = thedark; rfalse; } if ((previous_light_condition == false) && (lightflag == true)) { location = real_location; CarryOutActivity(PRINTING_NEWS_OF_LIGHT_ACT); rfalse; } if ((previous_light_condition == true) && (lightflag == false)) { location = thedark; DivideParagraphPoint(); BeginActivity(PRINTING_NEWS_OF_DARKNESS_ACT); if (ForActivity(PRINTING_NEWS_OF_DARKNESS_ACT) == false) L__M(##Miscellany, 9); EndActivity(PRINTING_NEWS_OF_DARKNESS_ACT); rfalse; } if ((previous_light_condition == true) && (lightflag == true)) { location = real_location; rfalse; } rfalse; ]; [ SilentlyConsiderLight; lightflag = OffersLight(parent(player)); if (lightflag) location = real_location; else location = thedark; rfalse; ]; [ IsSeeThrough obj; if ((obj has supporter) || (obj has transparent) || (obj has animate) || ((obj has container) && (obj has open))) rtrue; rfalse; ]; [ VisibilityParent o; if (o && (o has container) && (o hasnt open) && (o hasnt transparent)) return nothing; if (o) o = CoreOfParentOfCoreOf(o); return o; ]; [ FindVisibilityLevels lc up; if (location == thedark) { visibility_ceiling = thedark; visibility_levels = 0; } else { visibility_ceiling = player; while (true) { up = VisibilityParent(visibility_ceiling); if (up == 0) break; visibility_ceiling = up; lc++; } visibility_levels = lc; } ]; [ ScopeCeiling pos c; if (pos == player && location == thedark) return thedark; c = parent(pos); if (c == 0) return pos; while (VisibilityParent(c)) c = VisibilityParent(c); return c; ]; [ ObjectIsUntouchable item silent_flag flag2 p save_sp decision; if ((p ~= player) && (LocationOf(p) ~= LocationOf(player)) && ((item ofclass K4_door) || (item ofclass K7_backdrop))) { decision = false; } else { untouchable_object = item; untouchable_silence = silent_flag; touch_persona = p; if (p == actor) touch_persona = 0; save_sp = say__p; say__p = 0; if (ProcessRulebook(ACCESSIBILITY_RB, 0, true)) { if (RulebookSucceeded()) decision = false; else decision = true; } else decision = false; if (say__p == false) say__p = save_sp; } untouchable_silence = 0; return decision; ]; [ ACCESS_THROUGH_BARRIERS_R ancestor i j external p; p = touch_persona; if (p == 0) p = actor; ancestor = CommonAncestor(p, untouchable_object); if ((ancestor == 0) && (LocationOf(untouchable_object) == nothing) && ((untouchable_object ofclass K4_door or K7_backdrop) == false)) { if (touch_persona == 0) GL__M(##Take,8,untouchable_object); RulebookFails(); rtrue; } ! First, a barrier between the player and the ancestor. if (CoreOf(p) ~= ancestor) { i = parent(CoreOf(p)); j = CoreOf(i); external = false; if (j ~= i) { i = j; external = true; } while (i~=ancestor && i) { if ((external == false) && (ProcessRulebook(REACHING_OUTSIDE_RB, i)) && (RulebookFailed())) rtrue; ! Barrier i = parent(CoreOf(i)); j = CoreOf(i); external = false; if (j ~= i) { i = j; external = true; } } } ! Second, a barrier between the item and the ancestor. if (CoreOf(untouchable_object) ~= ancestor) { ! We can always get to the core of the item. i = CoreOf(untouchable_object); ! This will be on the inside of its parent, if its parent is a ! container, so there should be no exemption. i = parent(i); external = false; ! j = CoreOf(i); if (j ~= i) { i = j; external = true; } while (i~=ancestor && i) { if ((external == false) && (ProcessRulebook(REACHING_INSIDE_RB, i)) && (RulebookFailed())) rtrue; ! Barrier i = CoreOf(i); if (i == ancestor) break; i = parent(i); j = CoreOf(i); external = false; if (j ~= i) { i = j; external = true; } } } RulebookSucceeds(); ! No barrier rtrue; ]; [ CANT_REACH_INSIDE_CLOSED_R; if (parameter_object has container && parameter_object hasnt open) { if (touch_persona == 0) GL__M(##Take,9,parameter_object); RulebookFails(); rtrue; } rfalse; ]; [ CANT_REACH_OUTSIDE_CLOSED_R; if (parameter_object has container && parameter_object hasnt open) { if (touch_persona == 0) GL__M(##Take,9,parameter_object); RulebookFails(); rtrue; } rfalse; ]; [ CANT_REACH_INSIDE_ROOMS_R; if (parameter_object && parameter_object ofclass K1_room) { if (touch_persona == 0) GL__M(##Take,14,parameter_object); RulebookFails(); rtrue; } rfalse; ]; Constant REQUISITION_STACK_SIZE = 3*308; Array requisition_stack --> REQUISITION_STACK_SIZE; Global requisition_stack_pointer = 0; [ RequisitionStack len top addr; top = requisition_stack_pointer + len; if (top > REQUISITION_STACK_SIZE) return false; addr = requisition_stack + requisition_stack_pointer*WORDSIZE; ! print "Allocating ", addr, " at pointer ", requisition_stack_pointer, "^"; requisition_stack_pointer = top; return addr; ]; [ FreeStack addr; if (addr == 0) return; requisition_stack_pointer = (addr - requisition_stack)/WORDSIZE; ]; Global MarkedObjectArray = 0; Global MarkedObjectLength = 0; [ WriteListOfMarkedObjects style obj common_parent first mixed_parentage length; objectloop (obj ofclass Object && obj has workflag2) { length++; if (first == nothing) { first = obj; common_parent = parent(obj); } else { if (parent(obj) ~= common_parent) mixed_parentage = true; } } if (mixed_parentage) common_parent = nothing; if (length == 0) { if (style & ISARE_BIT ~= 0) print (string) IS3__TX, " ", (string) NOTHING__TX; else if (style & CFIRSTART_BIT ~= 0) print (string) NOTHING2__TX; else print (string) NOTHING__TX; } else { @push MarkedObjectArray; @push MarkedObjectLength; MarkedObjectArray = RequisitionStack(length); MarkedObjectLength = length; if (MarkedObjectArray == 0) return RunTimeProblem(RTP_LISTWRITERMEMORY); if (common_parent) { ObjectTreeCoalesce(child(common_parent)); length = 0; objectloop (obj in common_parent) ! object tree order if (obj has workflag2) MarkedObjectArray-->length++ = obj; } else { length = 0; objectloop (obj ofclass Object) ! object number order if (obj has workflag2) MarkedObjectArray-->length++ = obj; } WriteListFrom(first, style, 0, false, MarkedListIterator); FreeStack(MarkedObjectArray); @pull MarkedObjectLength; @pull MarkedObjectArray; } return; ]; Constant SEEK_ITF = 0; Constant ADVANCE_ITF = 1; Constant COALESCE_ITF = 2; Constant START_ITF = 3; ! Constant DBLW; ! Uncomment this to provide debugging information at run-time [ MarkedListIterator obj depth required_lt function i; if (obj == nothing) return nothing; switch(function) { START_ITF: return MarkedObjectArray-->0; COALESCE_ITF: return MarkedListCoalesce(); SEEK_ITF, ADVANCE_ITF: for (i=0: ii == obj) { if (function == ADVANCE_ITF) i++; for (:ii; if ((required_lt) && (obj.list_together ~= required_lt)) continue; if ((c_style & WORKFLAG_BIT) && (depth==0) && (obj hasnt workflag)) continue; if ((c_style & CONCEAL_BIT) && ((obj has concealed) || (obj has scenery))) continue; return obj; } return nothing; } } return nothing; ]; [ MarkedListCoalesce o i lt l swap m; for (i=0: ii).list_together; if (lt ~= 0) { ! Find first object in list after contiguous run with this list_together value: for (i++: (ii).list_together==lt): i++) ; ! If the contiguous run extends to end of list, the list is now perfect: if (i == MarkedObjectLength) return MarkedObjectArray-->0; ! And otherwise we look to see if any future entries belong in the earlier run: for (l=i+1: ll).list_together == lt) { ! Yes, they do: so we perform a rotation to insert it before element i: swap = MarkedObjectArray-->l; for (m=l: m>i: m--) MarkedObjectArray-->m = MarkedObjectArray-->(m-1); MarkedObjectArray-->i = swap; ! And now the run is longer: i++; if (i == MarkedObjectLength) return MarkedObjectArray-->0; } i--; } } return MarkedObjectArray-->0; ]; Global list_filter_routine; [ ObjectTreeIterator obj depth required_lt function; if ((obj == nothing) || (parent(obj) == nothing)) return nothing; if (function == START_ITF) return child(parent(obj)); if (function == COALESCE_ITF) return ObjectTreeCoalesce(obj); if (function == ADVANCE_ITF) obj = sibling(obj); for (:: obj = sibling(obj)) { if (obj == nothing) return nothing; if ((required_lt) && (obj.list_together ~= required_lt)) continue; if ((c_style & WORKFLAG_BIT) && (depth==0) && (obj hasnt workflag)) continue; if (obj hasnt list_filter_permits) continue; if ((c_style & CONCEAL_BIT) && ((obj has concealed) || (obj has scenery))) continue; return obj; } ]; [ ObjectTreeCoalesce obj memb lt later; #Ifdef DBLW; print "^^Sorting out: "; DiagnoseSortList(obj); #Endif; .StartAgain; for (memb=obj: memb~=nothing: memb=sibling(memb)) { lt = memb.list_together; if (lt ~= 0) { ! Find first object in list after contiguous run with this list_together value: for (memb=sibling(memb): (memb) && (memb.list_together == lt): memb = sibling(memb)) ; ! If the contiguous run extends to end of list, the list is now perfect: if (memb == 0) return obj; ! And otherwise we look to see if any future entries belong in the earlier run: for (later=sibling(memb): later: later=sibling(later)) if (later.list_together == lt) { ! Yes, they do: so we perform a regrouping of the list and start again: obj = GroupChildren(parent(obj), list_together, lt); #Ifdef DBLW; print "^^Sorted to: "; DiagnoseSortList(obj); #Endif; jump StartAgain; } } } return obj; ]; #Ifdef DBLW; [ DiagnoseSortList obj memb; for (memb=child(obj): memb~=nothing: memb=sibling(memb)) print memb, " --> "; new_line; ]; #Endif; [ WriteListFrom first style depth noactivity iter a ol; @push c_iterator; @push c_style; @push c_depth; @push c_margin; if (iter) c_iterator = iter; else c_iterator = ObjectTreeIterator; c_style = style; c_depth = depth; c_margin = 0; if (style & EXTRAINDENT_BIT) c_margin = 1; objectloop (a ofclass Object) { give a list_filter_permits; if ((list_filter_routine) && (list_filter_routine(a) == false)) give a ~list_filter_permits; } first = c_iterator(first, depth, 0, START_ITF); if (first == nothing) { print (string) NOTHING__TX; if (style & NEWLINE_BIT ~= 0) new_line; } else { if ((noactivity) || (iter)) { WriteListR(first, c_depth, true); say__p = 1; } else { objectloop (ol provides list_together) ol.list_together = 0; CarryOutActivity(LISTING_CONTENTS_ACT, parent(first)); } } @pull c_margin; @pull c_depth; @pull c_style; @pull c_iterator; ]; [ STANDARD_CONTENTS_LISTING_R; WriteListFrom(child(parameter_object), c_style, c_depth, true); ]; #Ifdef DBLW; Global DBLW_no_classes; Global DBLW_no_objs; [ DebugPartition partition_class_sizes partition_classes first depth i k o; print "[Length of list is ", DBLW_no_objs, " with ", k, " plural.]^"; print "[Partitioned into ", DBLW_no_classes, " equivalence classes.]^"; for (i=1: i<=DBLW_no_classes : i++) { print "Class ", i, " has size ", partition_class_sizes->i, "^"; } for (k=0, o=first: kk, " represented by ", o, " with L=", o.list_together, "^"; } ]; #Endif; [ PartitionList first no_objs depth partition_classes partition_class_sizes i k l n m; for (i=0: ii = 0; n = 1; for (i=first, k=0: kk == 0) { partition_classes->k = n; partition_class_sizes->n = 1; for (l=c_iterator(i, depth, lt_value, ADVANCE_ITF), m=k+1: (l~=0) && (mm == 0) && (ListEqual(i, l))) { if (partition_class_sizes->n < 255) (partition_class_sizes->n)++; partition_classes->m = n; } } if (n < 255) n++; } n--; #Ifdef DBLW; DBLW_no_classes = n; DBLW_no_objs = no_objs; DebugPartition(partition_class_sizes, partition_classes, first, depth); #Endif; return n; ]; [ ListEqual o1 o2; if ((o1.plural == 0) || (o2.plural == 0)) rfalse; if (child(o1) ~= 0 && WillRecurs(o1) ~= 0) rfalse; if (child(o2) ~= 0 && WillRecurs(o2) ~= 0) rfalse; if (c_style & (FULLINV_BIT + PARTINV_BIT) ~= 0) { if ((o1 hasnt worn && o2 has worn) || (o2 hasnt worn && o1 has worn)) rfalse; if ((o1 hasnt light && o2 has light) || (o2 hasnt light && o1 has light)) rfalse; if (o1 has container) { if (o2 hasnt container) rfalse; if ((o1 has open && o2 hasnt open) || (o2 has open && o1 hasnt open)) rfalse; } else if (o2 has container) rfalse; } return Identical(o1, o2); ]; [ WillRecurs o; if (c_style & ALWAYS_BIT ~= 0) rtrue; if (c_style & RECURSE_BIT == 0) rfalse; if ((o has supporter) || ((o has container) && (o has open or transparent))) rtrue; rfalse; ]; [ NumberOfGroupsInList o no_classes depth partition_classes partition_class_sizes no_groups cl memb k current_lt lt; no_groups = no_classes; for (cl=1, memb=o, k=0: cl<=no_classes: cl++) { ! Advance to first member of class number cl while (partition_classes->k ~= cl) { k++; memb = c_iterator(memb, depth, lt_value, ADVANCE_ITF); } if (memb) { ! In case of accidents, but should always happen lt = memb.list_together; if ((lt ~= lt_value) && (lt ofclass Routine or String) && (lt == current_lt)) no_groups--; current_lt = lt; } } #Ifdef DBLW; print "[There are ", no_groups, " groups.]^"; #Endif; return no_groups; ]; [ WriteListR o depth from_start partition_classes partition_class_sizes cl memb index k2 l m no_classes q groups_to_do current_lt; if (o == nothing) return; ! An empty list: no output if (from_start) { o = c_iterator(o, depth, 0, COALESCE_ITF); ! Coalesce list and choose new start } o = c_iterator(o, depth, 0, SEEK_ITF); ! Find first entry in list from o if (o == nothing) return; ! Count index = length of list for (memb=o, index=0: memb: memb=c_iterator(memb, depth, lt_value, ADVANCE_ITF)) index++; if (c_style & ISARE_BIT ~= 0) { if (index == 1 && o hasnt pluralname) print (string) IS3__TX; else print (string) ARE3__TX; if (c_style & NEWLINE_BIT ~= 0) print ":^"; else print (char) ' '; c_style = c_style - ISARE_BIT; } partition_classes = RequisitionStack(index/WORDSIZE + 2); partition_class_sizes = RequisitionStack(index/WORDSIZE + 2); if ((partition_classes == 0) || (partition_class_sizes == 0)) return RunTimeProblem(RTP_LISTWRITERMEMORY); no_classes = PartitionList(o, index, depth, partition_classes, partition_class_sizes); groups_to_do = NumberOfGroupsInList(o, no_classes, depth, partition_classes, partition_class_sizes); for (cl=1, memb=o, index=0, current_lt=0: groups_to_do>0: cl++) { ! Set memb to first object of partition class cl while (partition_classes->index ~= cl) { index++; memb=c_iterator(memb, depth, lt_value, ADVANCE_ITF); if (memb==0) { print "*** Error in list-writer ***^"; break; } } #Ifdef DBLW; ! DebugPartition(partition_class_sizes, partition_classes, o, depth); print "^[Class ", cl, " of ", no_classes, ": first object ", memb, " (", memb.list_together, "); groups_to_do ", groups_to_do, ", current_lt=", current_lt, " listing_size=", listing_size, " lt_value=", lt_value, " memb.list_together=", memb.list_together, "]^"; #Endif; if ((memb.list_together == lt_value) || (~~(memb.list_together ofclass Routine or String))) current_lt = 0; else { if (memb.list_together == current_lt) continue; ! Otherwise this class begins a new group @push listing_size; q = memb; listing_size = 1; l = index; m = cl; while (m < no_classes && q.list_together == memb.list_together) { m++; while (partition_classes->l ~= m) { l++; q = c_iterator(q, depth, lt_value, ADVANCE_ITF); } if (q.list_together == memb.list_together) listing_size++; } if (listing_size > 1) { ! The new group contains more than one partition class WriteMultiClassGroup(cl, memb, depth, partition_class_sizes); current_lt = memb.list_together; jump GroupComplete; } current_lt = 0; @pull listing_size; } WriteSingleClassGroup(cl, memb, depth, partition_class_sizes->cl); .GroupComplete; groups_to_do--; if (c_style & ENGLISH_BIT ~= 0) { if (groups_to_do == 1) { if (cl <= 1) print (string) LISTAND2__TX; else print (string) LISTAND__TX; } if (groups_to_do > 1) print (string) COMMA__TX; } } FreeStack(partition_class_sizes); FreeStack(partition_classes); ]; ! end of WriteListR [ WriteMultiClassGroup cl memb depth partition_class_sizes q k2 l; ! Save the style, because the activity below is allowed to change it q = c_style; if (c_style & INDENT_BIT ~= 0) PrintSpaces(2*(depth+c_margin)); BeginActivity(GROUPING_TOGETHER_ACT, memb); if (ForActivity(GROUPING_TOGETHER_ACT, memb)) { c_style = c_style &~ NEWLINE_BIT; } else { if (memb.list_together ofclass String) { ! Set k2 to the number of objects covered by the group k2 = 0; for (l=0 : l(l+cl); EnglishNumber(k2); print " "; print (string) memb.list_together; if (c_style & ENGLISH_BIT ~= 0) print " ("; if (c_style & INDENT_BIT ~= 0) print ":^"; } else { inventory_stage = 1; parser_one = memb; parser_two = depth + c_margin; if (RunRoutines(memb, list_together) == 1) jump Omit__Sublist2; } c_margin++; @push lt_value; @push listing_together; @push listing_size; lt_value = memb.list_together; listing_together = memb; #Ifdef DBLW; print "^^DOWN lt_value = ", lt_value, " listing_together = ", memb, "^^"; @push DBLW_no_classes; @push DBLW_no_objs; #Endif; WriteListR(memb, depth, false); #Ifdef DBLW; print "^^UP^^"; @pull DBLW_no_objs; @pull DBLW_no_classes; #Endif; @pull listing_size; @pull listing_together; @pull lt_value; c_margin--; if (memb.list_together ofclass String) { if (q & ENGLISH_BIT ~= 0) print ")"; } else { inventory_stage = 2; parser_one = memb; parser_two = depth+c_margin; RunRoutines(memb, list_together); } .Omit__Sublist2; } EndActivity(GROUPING_TOGETHER_ACT, memb); ! If the NEWLINE_BIT has been forced by the activity, act now ! before it vanishes... if (q & NEWLINE_BIT ~= 0 && c_style & NEWLINE_BIT == 0) new_line; ! ...when the original style is restored again: c_style = q; ]; [ WriteSingleClassGroup cl memb depth size q; q = c_style; if (c_style & INDENT_BIT) PrintSpaces(2*(depth+c_margin)); if (size == 1) { if (c_style & NOARTICLE_BIT ~= 0) print (name) memb; else { if (c_style & DEFART_BIT) { if ((cl == 1) && (c_style & CFIRSTART_BIT)) print (The) memb; else print (the) memb; } else { if ((cl == 1) && (c_style & CFIRSTART_BIT)) print (CIndefArt) memb; else print (a) memb; } } } else { if (c_style & DEFART_BIT) { if ((cl == 1) && (c_style & CFIRSTART_BIT)) PrefaceByArticle(memb, 0, size); else PrefaceByArticle(memb, 1, size); } @push listing_size; listing_size = size; CarryOutActivity(PRINTING_A_NUMBER_OF_ACT, memb); @pull listing_size; } if ((size > 1) && (memb hasnt pluralname)) { give memb pluralname; WriteAfterEntry(memb, depth); give memb ~pluralname; } else WriteAfterEntry(memb, depth); c_style = q; ]; [ WriteAfterEntry o depth p recurse_flag parenth_flag eldest_child child_count combo; inventory_stage = 2; if (c_style & PARTINV_BIT) { BeginActivity(PRINTING_ROOM_DESC_DETAILS_ACT); if (ForActivity(PRINTING_ROOM_DESC_DETAILS_ACT) == false) { combo = 0; if (o has light && location hasnt light) combo=combo+1; if (o has container && o hasnt open) combo=combo+2; if ((o has container && (o has open || o has transparent)) && (child(o)==0)) combo=combo+4; if (combo) L__M(##ListMiscellany, combo, o); } EndActivity(PRINTING_ROOM_DESC_DETAILS_ACT); } ! end of PARTINV_BIT processing if (c_style & FULLINV_BIT) { if (o has light && o has worn) { L__M(##ListMiscellany, 8, o); parenth_flag = true; } else { if (o has light) { L__M(##ListMiscellany, 9, o); parenth_flag = true; } if (o has worn) { L__M(##ListMiscellany, 10, o); parenth_flag = true; } } if (o has container) if (o has openable) { if (parenth_flag) { #Ifdef SERIAL_COMMA; print ","; #Endif; print (string) AND__TX; } else L__M(##ListMiscellany, 11, o); if (o has open) if (child(o)) L__M(##ListMiscellany, 12, o); else L__M(##ListMiscellany, 13, o); else if (o has lockable && o has locked) L__M(##ListMiscellany, 15, o); else L__M(##ListMiscellany, 14, o); parenth_flag = true; } else if (child(o)==0 && o has transparent) if (parenth_flag) L__M(##ListMiscellany, 16, o); else L__M(##ListMiscellany, 17, o); if (parenth_flag) print ")"; } ! end of FULLINV_BIT processing child_count = 0; eldest_child = nothing; objectloop (p in o) if ((c_style & CONCEAL_BIT == 0) || (p hasnt concealed && p hasnt scenery)) if (p has list_filter_permits) { child_count++; if (eldest_child == nothing) eldest_child = p; } if (child_count && (c_style & ALWAYS_BIT)) { if (c_style & ENGLISH_BIT) L__M(##ListMiscellany, 18, o); recurse_flag = true; } if (child_count && (c_style & RECURSE_BIT)) { if (o has supporter) { if (c_style & ENGLISH_BIT) { if (c_style & TERSE_BIT) L__M(##ListMiscellany, 19, o); else L__M(##ListMiscellany, 20, o); if (o has animate) print (string) WHOM__TX; else print (string) WHICH__TX; } recurse_flag = true; } if (o has container && (o has open || o has transparent)) { if (c_style & ENGLISH_BIT) { if (c_style & TERSE_BIT) L__M(##ListMiscellany, 21, o); else L__M(##ListMiscellany, 22, o); if (o has animate) print (string) WHOM__TX; else print (string) WHICH__TX; } recurse_flag = true; } } if (recurse_flag && (c_style & ENGLISH_BIT)) if (child_count > 1 || eldest_child has pluralname) print (string) ARE2__TX; else print (string) IS2__TX; if (c_style & NEWLINE_BIT) new_line; if (recurse_flag) { o = child(o); @push lt_value; @push listing_together; @push listing_size; @push c_iterator; c_iterator = ObjectTreeIterator; lt_value = 0; listing_together = 0; listing_size = 0; WriteListR(o, depth+1, true); @pull c_iterator; @pull listing_size; @pull listing_together; @pull lt_value; if (c_style & TERSE_BIT) print ")"; } ]; [ SayPhraseName closure; if (closure == 0) print "nothing"; else print (string) closure-->2; ]; [ KindAtomic kind; if ((kind >= 0) && (kind < BASE_KIND_HWM)) return kind; return kind-->0; ]; [ KindBaseArity kind; if ((kind >= 0) && (kind < BASE_KIND_HWM)) return 0; return kind-->1; ]; [ KindBaseTerm kind n; if ((kind >= 0) && (kind < BASE_KIND_HWM)) return UNKNOWN_TY; return kind-->(2+n); ]; [ DigitToValue c n; n = c-'0'; if ((n<0) || (n>9)) return -1; return n; ]; [ GenerateRandomNumber n m s; if (n==m) return n; if (n>m) { s = n; n = m; m = s; } n--; return random(m-n) + n; ]; Constant R_DecimalNumber = GenerateRandomNumber; Constant R_PrintTimeOfDay = GenerateRandomNumber; [ GroupChildren par prop value; while (child(par) ~= 0) { if (child(par).prop ~= value) move child(par) to out_obj; else move child(par) to in_obj; } while (child(in_obj) ~= 0) move child(in_obj) to par; while (child(out_obj) ~= 0) move child(out_obj) to par; return child(par); ]; [ PrintSpaces n; while (n > 0) { print " "; n = n - 1; } ]; [ RunRoutines obj prop; if (obj == thedark) obj = real_location; if ((obj.&prop == 0) && (prop >= INDIV_PROP_START)) rfalse; return obj.prop(); ]; [ SwapWorkflags obj lst; objectloop (obj ofclass Object) { lst = false; if (obj has workflag2) lst = true; give obj ~workflag2; if (obj has workflag) give obj workflag2; give obj ~workflag; if (lst) give obj workflag; } ]; Constant NO_USE_OPTIONS = 23; [ TestUseOption UO; if (UO == 1) rtrue; if (UO == 2) rtrue; if (UO == 3) rtrue; if (UO == 12) rtrue; rfalse; ]; [ PrintUseOption UO; switch(UO) { 0: print "ineffectual option"; 1: print "dynamic memory allocation option [8192]"; 2: print "maximum indexed text length option [1024]"; 3: print "maximum things understood at once option [100]"; 4: print "American dialect option"; 5: print "serial comma option"; 6: print "full-length room descriptions option"; 7: print "abbreviated room descriptions option"; 8: print "memory economy option"; 9: print "authorial modesty option"; 10: print "no scoring option"; 11: print "command line echoing option"; 12: print "undo prevention option"; 13: print "predictable randomisation option"; 14: print "fast route-finding option"; 15: print "slow route-finding option"; 16: print "numbered rules option"; 17: print "telemetry recordings option"; 18: print "no deprecated features option"; 19: print "VERBOSE room descriptions option"; 20: print "BRIEF room descriptions option"; 21: print "SUPERBRIEF room descriptions option"; 22: print "Manual Pronouns option"; } ]; [ IntegerDivide A B; if (B == 0) { RunTimeProblem(RTP_DIVZERO); rfalse; } return A/B; ]; [ IntegerRemainder A B; if (B == 0) { RunTimeProblem(RTP_DIVZERO); rfalse; } return A%B; ]; [ UnsignedCompare x y u v; if (x == y) return 0; if (x < 0 && y >= 0) return 1; if (x >= 0 && y < 0) return -1; u = x&~WORD_HIGHBIT; v= y&~WORD_HIGHBIT; if (u > v) return 1; return -1; ]; [ ZRegion addr; switch (metaclass(addr)) { nothing: return 0; Object, Class: return 1; Routine: return 2; String: return 3; } ]; [ GL__M a b c d; if ((actor ~= player) || (untouchable_silence)) rtrue; return L__M(a,b,c,d); ]; [ AGL__M a b c d; if (untouchable_silence) rtrue; return L__M(a,b,c,d); ]; Object InformParser "(Inform Parser)" has proper; Global best_etype; ! Preferred error number so far Global nextbest_etype; ! Preferred one, if ASKSCOPE_PE disallowed Global parser_inflection; ! A property (usually "name") to find object names in Array pattern --> 32; ! For the current pattern match Global pcount; ! and a marker within it Array pattern2 --> 32; ! And another, which stores the best match Global pcount2; ! so far Array line_ttype-->32; ! For storing an analysed grammar line Array line_tdata-->32; Array line_token-->32; Global nsns; ! Number of special_numbers entered so far Global params_wanted; ! Number of parameters needed (which may change in parsing) Global inferfrom; ! The point from which the rest of the command must be inferred Global inferword; ! And the preposition inferred Global dont_infer; ! Another dull flag Global cobj_flag = 0; Global oops_from; ! The "first mistake" word number Global saved_oops; ! Used in working this out Array oops_workspace -> 64; ! Used temporarily by "oops" routine Global held_back_mode; ! Flag: is there some input from last time Global hb_wn; ! left over? (And a save value for wn.) ! (Used for full stops and "then".) Global usual_grammar_after; ! Point from which usual grammar is parsed (it may vary from ! the above if user's routines match multi-word verbs) Constant PATTERN_NULL = $ffff; ! Entry for a token producing no text Global found_ttype; ! Used to break up tokens into type Global found_tdata; ! and data (by AnalyseToken) Global token_filter; ! For noun filtering by user routines Global length_of_noun; ! Set by NounDomain to no of words in noun Global lookahead; ! The token after the one now being matched Global multi_mode; ! Multiple mode Global multi_wanted; ! Number of things needed in multitude Global multi_had; ! Number of things actually found Global multi_context; ! What token the multi-obj was accepted for Global indef_mode; ! "Indefinite" mode - ie, "take a brick" ! is in this mode Global indef_type; ! Bit-map holding types of specification Global indef_wanted; ! Number of items wanted (INDEF_ALL_WANTED for all) Constant INDEF_ALL_WANTED = 32767; Global indef_guess_p; ! Plural-guessing flag Global indef_owner; ! Object which must hold these items Global indef_cases; ! Possible gender and numbers of them Global indef_possambig; ! Has a possibly dangerous assumption ! been made about meaning of a descriptor? Global indef_nspec_at; ! Word at which a number like "two" was parsed ! (for backtracking) Global allow_plurals; ! Whether plurals presently allowed or not Global take_all_rule; ! Slightly different rules apply to "take all" than other uses ! of multiple objects, to make adjudication produce more ! pragmatically useful results ! (Not a flag: possible values 0, 1, 2) Global dict_flags_of_noun; ! Of the noun currently being parsed ! (a bitmap in #dict_par1 format) Global pronoun__word; ! Saved value Global pronoun__obj; ! Saved value Constant comma_word = 'comma,'; ! An "untypeable word" used to substitute ! for commas in parse buffers Array match_list --> MATCH_LIST_WORDS; ! An array of matched objects so far Array match_classes --> MATCH_LIST_WORDS; ! An array of equivalence classes for them Array match_scores --> MATCH_LIST_WORDS; ! An array of match scores for them Global number_matched; ! How many items in it? (0 means none) Global number_of_classes; ! How many equivalence classes? Global match_length; ! How many words long are these matches? Global match_from; ! At what word of the input do they begin? #Ifdef TARGET_ZCODE; [ WordCount; return parse->1; ]; [ WordAddress wordnum; return buffer + parse->(wordnum*4+1); ]; [ WordLength wordnum; return parse->(wordnum*4); ]; [ MoveWord at1 b2 at2 x y; x = at1*2-1; y = at2*2-1; parse-->x++ = b2-->y++; parse-->x = b2-->y; ]; #Ifnot; [ WordCount; return parse-->0; ]; [ WordAddress wordnum; return buffer + parse-->(wordnum*3); ]; [ WordLength wordnum; return parse-->(wordnum*3-1); ]; [ MoveWord at1 b2 at2 x y; x = at1*3-2; y = at2*3-2; parse-->x++ = b2-->y++; parse-->x++ = b2-->y++; parse-->x = b2-->y; ]; #Endif; [ WordFrom w p i j wc; #Ifdef TARGET_ZCODE; wc = p->1; i = w*2-1; #Ifnot; wc = p-->0; i = w*3-2; #Endif; if ((w < 1) || (w > wc)) return 0; j = p-->i; if (j == ',//') j = comma_word; if (j == './/') j = THEN1__WD; return j; ]; [ NextWord i j wc; #Ifdef TARGET_ZCODE; wc = parse->1; i = wn*2-1; #Ifnot; wc = parse-->0; i = wn*3-2; #Endif; wn++; if ((wn < 2) || (wn > wc+1)) return 0; j = parse-->i; if (j == ',//') j = comma_word; if (j == './/') j = THEN1__WD; return j; ]; [ NextWordStopped wc; #Ifdef TARGET_ZCODE; wc = parse->1; #Ifnot; wc = parse-->0; #Endif; if ((wn < 1) || (wn > wc)) { wn++; return -1; } return NextWord(); ]; [ PrintSnippet snip from to i w1 w2; w1 = snip/100; w2 = w1 + (snip%100) - 1; if ((w2WordCount())) { if ((w1 == 1) && (w2 == 0)) rfalse; return RunTimeProblem(RTP_SAYINVALIDSNIPPET, w1, w2); } from = WordAddress(w1); to = WordAddress(w2) + WordLength(w2) - 1; for (i=from: i<=to: i++) print (char) i->0; ]; [ SpliceSnippet snip t i w1 w2 nextw at endsnippet newlen; w1 = snip/100; w2 = w1 + (snip%100) - 1; if ((w20 = 120; newlen = VM_PrintToBuffer(buffer2, 120, SpliceSnippet__TextPrinter, t, endsnippet); for (i=0: (i(at+i) = buffer2->(WORDSIZE+i); #Ifdef TARGET_ZCODE; buffer->1 = at+i; #ifnot; buffer-->0 = at+i; #endif; for (:at+i<120:i++) buffer->(at+i) = ' '; VM_Tokenise(buffer, parse); players_command = 100 + WordCount(); @pull say__pc; @pull say__p; ]; [ SpliceSnippet__TextPrinter t endsnippet; PrintText(t); if (endsnippet) { print " "; PrintSnippet(endsnippet); } ]; [ SnippetIncludes test snippet w1 w2 wlen i j; w1 = snippet/100; w2 = w1 + (snippet%100) - 1; if ((w20: i++, j--) { if (((test)(i, 0)) ~= GPR_FAIL) return i*100+wn-i; } } rfalse; ]; [ SnippetMatches snippet topic_gpr rv; wn=1; if (topic_gpr == 0) rfalse; if (metaclass(topic_gpr) == Routine) { rv = (topic_gpr)(snippet/100, snippet%100); if (rv ~= GPR_FAIL) rtrue; rfalse; } RunTimeProblem(RTP_BADTOPIC); rfalse; ]; [ UnpackGrammarLine line_address i size; for (i=0 : i<32 : i++) { line_token-->i = ENDIT_TOKEN; line_ttype-->i = ELEMENTARY_TT; line_tdata-->i = ENDIT_TOKEN; } #Ifdef TARGET_ZCODE; action_to_be = 256*(line_address->0) + line_address->1; action_reversed = ((action_to_be & $400) ~= 0); action_to_be = action_to_be & $3ff; line_address--; size = 3; #Ifnot; ! GLULX @aloads line_address 0 action_to_be; action_reversed = (((line_address->2) & 1) ~= 0); line_address = line_address - 2; size = 5; #Endif; params_wanted = 0; for (i=0 : : i++) { line_address = line_address + size; if (line_address->0 == ENDIT_TOKEN) break; line_token-->i = line_address; AnalyseToken(line_address); if (found_ttype ~= PREPOSITION_TT) params_wanted++; line_ttype-->i = found_ttype; line_tdata-->i = found_tdata; } return line_address + 1; ]; [ AnalyseToken token; if (token == ENDIT_TOKEN) { found_ttype = ELEMENTARY_TT; found_tdata = ENDIT_TOKEN; return; } found_ttype = (token->0) & $$1111; found_tdata = (token+1)-->0; ]; [ DictionaryWordToVerbNum dword verbnum; #Ifdef TARGET_ZCODE; verbnum = $ff-(dword->#dict_par2); #Ifnot; ! GLULX dword = dword + #dict_par2 - 1; @aloads dword 0 verbnum; verbnum = $ffff-verbnum; #Endif; return verbnum; ]; [ KeyboardPrimitive a_buffer a_table; #Ifdef DEBUG; #Iftrue (0 > 0); return TestKeyboardPrimitive(a_buffer, a_table); #Endif; #Endif; return VM_ReadKeyboard(a_buffer, a_table); ]; [ Keyboard a_buffer a_table nw i w w2 x1 x2; sline1 = score; sline2 = turns; while (true) { ! Save the start of the buffer, in case "oops" needs to restore it for (i=0 : i<64 : i++) oops_workspace->i = a_buffer->i; ! In case of an array entry corruption that shouldn't happen, but would be ! disastrous if it did: #Ifdef TARGET_ZCODE; a_buffer->0 = INPUT_BUFFER_LEN; a_table->0 = 15; ! Allow to split input into this many words #Endif; ! TARGET_ ! Print the prompt, and read in the words and dictionary addresses PrintPrompt(); DrawStatusLine(); KeyboardPrimitive(a_buffer, a_table); ! Set nw to the number of words #Ifdef TARGET_ZCODE; nw = a_table->1; #Ifnot; nw = a_table-->0; #Endif; ! If the line was blank, get a fresh line !if (nw == 0) { ! @push etype; etype = BLANKLINE_PE; ! players_command = 100; ! BeginActivity(PRINTING_A_PARSER_ERROR_ACT); ! if (ForActivity(PRINTING_A_PARSER_ERROR_ACT) == false) L__M(##Miscellany,10); ! EndActivity(PRINTING_A_PARSER_ERROR_ACT); ! @pull etype; ! continue; !} ! Unless the opening word was OOPS, return ! Conveniently, a_table-->1 is the first word on both the Z-machine and Glulx w = a_table-->1; if (w == OOPS1__WD or OOPS2__WD or OOPS3__WD) { if (oops_from == 0) { L__M(##Miscellany, 14); continue; } if (nw == 1) { L__M(##Miscellany, 15); continue; } if (nw > 2) { L__M(##Miscellany, 16); continue; } ! So now we know: there was a previous mistake, and the player has ! attempted to correct a single word of it. for (i=0 : ii = a_buffer->i; #Ifdef TARGET_ZCODE; x1 = a_table->9; ! Start of word following "oops" x2 = a_table->8; ! Length of word following "oops" #Ifnot; ! TARGET_GLULX x1 = a_table-->6; ! Start of word following "oops" x2 = a_table-->5; ! Length of word following "oops" #Endif; ! TARGET_ ! Repair the buffer to the text that was in it before the "oops" ! was typed: for (i=0 : i<64 : i++) a_buffer->i = oops_workspace->i; VM_Tokenise(a_buffer,a_table); ! Work out the position in the buffer of the word to be corrected: #Ifdef TARGET_ZCODE; w = a_table->(4*oops_from + 1); ! Start of word to go w2 = a_table->(4*oops_from); ! Length of word to go #Ifnot; ! TARGET_GLULX w = a_table-->(3*oops_from); ! Start of word to go w2 = a_table-->(3*oops_from - 1); ! Length of word to go #Endif; ! TARGET_ ! Write spaces over the word to be corrected: for (i=0 : i(i+w) = ' '; if (w2 < x2) { ! If the replacement is longer than the original, move up... for (i=INPUT_BUFFER_LEN-1 : i>=w+x2 : i-- ) a_buffer->i = a_buffer->(i-x2+w2); ! ...increasing buffer size accordingly. #Ifdef TARGET_ZCODE; a_buffer->1 = (a_buffer->1) + (x2-w2); #Ifnot; ! TARGET_GLULX a_buffer-->0 = (a_buffer-->0) + (x2-w2); #Endif; ! TARGET_ } ! Write the correction in: for (i=0 : i(i+w) = buffer2->(i+x1); VM_Tokenise(a_buffer, a_table); #Ifdef TARGET_ZCODE; nw = a_table->1; #Ifnot; nw = a_table-->0; #Endif; return nw; } ! Undo handling if ((w == UNDO1__WD or UNDO2__WD or UNDO3__WD) && (nw==1)) { Perform_Undo(); continue; } i = VM_Save_Undo(); #ifdef PREVENT_UNDO; undo_flag = 0; #endif; #ifndef PREVENT_UNDO; undo_flag = 2; #endif; if (i == -1) undo_flag = 0; if (i == 0) undo_flag = 1; if (i == 2) { VM_RestoreWindowColours(); VM_Style(SUBHEADER_VMSTY); SL_Location(); print "^"; ! print (name) location, "^"; VM_Style(NORMAL_VMSTY); L__M(##Miscellany, 13); continue; } return nw; } ]; [ Parser__parse syntax line num_lines line_address i j k token l m; cobj_flag = 0; parser_results-->ACTION_PRES = 0; parser_results-->NO_INPS_PRES = 0; parser_results-->INP1_PRES = 0; parser_results-->INP2_PRES = 0; meta = false; if (held_back_mode == 1) { held_back_mode = 0; VM_Tokenise(buffer, parse); jump ReParse; } .ReType; cobj_flag = 0; actors_location = ScopeCeiling(player); BeginActivity(READING_A_COMMAND_ACT); if (ForActivity(READING_A_COMMAND_ACT)==false) { Keyboard(buffer,parse); players_command = 100 + WordCount(); num_words = WordCount(); } if (EndActivity(READING_A_COMMAND_ACT)) jump ReType; .ReParse; parser_inflection = name; ! Initially assume the command is aimed at the player, and the verb ! is the first word num_words = WordCount(); wn = 1; #Ifdef LanguageToInformese; LanguageToInformese(); ! Re-tokenise: VM_Tokenise(buffer,parse); #Endif; ! LanguageToInformese num_words = WordCount(); k=0; #Ifdef DEBUG; if (parser_trace >= 2) { print "[ "; for (i=0 : i(i*2 + 1); #Ifnot; ! TARGET_GLULX j = parse-->(i*3 + 1); #Endif; ! TARGET_ k = WordAddress(i+1); l = WordLength(i+1); print "~"; for (m=0 : mm; print "~ "; if (j == 0) print "?"; else { #Ifdef TARGET_ZCODE; if (UnsignedCompare(j, HDR_DICTIONARY-->0) >= 0 && UnsignedCompare(j, HDR_HIGHMEMORY-->0) < 0) print (address) j; else print j; #Ifnot; ! TARGET_GLULX if (j->0 == $60) print (address) j; else print j; #Endif; ! TARGET_ } if (i ~= num_words-1) print " / "; } print " ]^"; } #Endif; ! DEBUG verb_wordnum = 1; actor = player; actors_location = ScopeCeiling(player); usual_grammar_after = 0; .AlmostReParse; scope_token = 0; action_to_be = NULL; ! Begin from what we currently think is the verb word .BeginCommand; wn = verb_wordnum; verb_word = NextWordStopped(); ! If there's no input here, we must have something like "person,". if (verb_word == -1) { best_etype = STUCK_PE; jump GiveError; } ! Now try for "again" or "g", which are special cases: don't allow "again" if nothing ! has previously been typed; simply copy the previous text across if (verb_word == AGAIN2__WD or AGAIN3__WD) verb_word = AGAIN1__WD; if (verb_word == AGAIN1__WD) { if (actor ~= player) { L__M(##Miscellany, 20); jump ReType; } #Ifdef TARGET_ZCODE; if (buffer3->1 == 0) { L__M(##Miscellany, 21); jump ReType; } #Ifnot; ! TARGET_GLULX if (buffer3-->0 == 0) { L__M(##Miscellany, 21); jump ReType; } #Endif; ! TARGET_ for (i=0 : ii = buffer3->i; VM_Tokenise(buffer,parse); num_words = WordCount(); players_command = 100 + WordCount(); jump ReParse; } ! Save the present input in case of an "again" next time if (verb_word ~= AGAIN1__WD) for (i=0 : ii = buffer->i; if (usual_grammar_after == 0) { j = verb_wordnum; i = RunRoutines(actor, grammar); #Ifdef DEBUG; if (parser_trace >= 2 && actor.grammar ~= 0 or NULL) print " [Grammar property returned ", i, "]^"; #Endif; ! DEBUG if ((i ~= 0 or 1) && (VM_InvalidDictionaryAddress(i))) { usual_grammar_after = verb_wordnum; i=-i; } if (i == 1) { parser_results-->ACTION_PRES = action; parser_results-->NO_INPS_PRES = 0; parser_results-->INP1_PRES = noun; parser_results-->INP2_PRES = second; if (noun) parser_results-->NO_INPS_PRES = 1; if (second) parser_results-->NO_INPS_PRES = 2; rtrue; } if (i ~= 0) { verb_word = i; wn--; verb_wordnum--; } else { wn = verb_wordnum; verb_word = NextWord(); } } else usual_grammar_after = 0; #Ifdef LanguageIsVerb; if (verb_word == 0) { i = wn; verb_word = LanguageIsVerb(buffer, parse, verb_wordnum); wn = i; } #Endif; ! LanguageIsVerb ! If the first word is not listed as a verb, it must be a direction ! or the name of someone to talk to if (verb_word == 0 || ((verb_word->#dict_par1) & 1) == 0) { ! So is the first word an object contained in the special object "compass" ! (i.e., a direction)? This needs use of NounDomain, a routine which ! does the object matching, returning the object number, or 0 if none found, ! or REPARSE_CODE if it has restructured the parse table so the whole parse ! must be begun again... wn = verb_wordnum; indef_mode = false; token_filter = 0; parameters = 0; @push actor; @push action; @push action_to_be; actor = player; meta = false; action = ##Go; action_to_be = ##Go; l = NounDomain(compass, 0, 0); @pull action_to_be; @pull action; @pull actor; if (l == REPARSE_CODE) jump ReParse; ! If it is a direction, send back the results: ! action=GoSub, no of arguments=1, argument 1=the direction. if ((l~=0) && (l ofclass K3_direction)) { parser_results-->ACTION_PRES = ##Go; parser_results-->NO_INPS_PRES = 1; parser_results-->INP1_PRES = l; jump LookForMore; } } ! end of first-word-not-a-verb ! Only check for a comma (a "someone, do something" command) if we are ! not already in the middle of one. (This simplification stops us from ! worrying about "robot, wizard, you are an idiot", telling the robot to ! tell the wizard that she is an idiot.) if (actor == player) { for (j=2 : j<=num_words : j++) { i=NextWord(); if (i == comma_word) jump Conversation; } } jump NotConversation; ! NextWord nudges the word number wn on by one each time, so we've now ! advanced past a comma. (A comma is a word all on its own in the table.) .Conversation; j = wn - 1; if (j == 1) { L__M(##Miscellany, 22); jump ReType; } ! Use NounDomain (in the context of "animate creature") to see if the ! words make sense as the name of someone held or nearby wn = 1; lookahead = HELD_TOKEN; scope_reason = TALKING_REASON; l = NounDomain(player,actors_location,6); scope_reason = PARSING_REASON; if (l == REPARSE_CODE) jump ReParse; if (l == 0) { if (verb_word && ((verb_word->#dict_par1) & 1)) jump NotConversation; L__M(##Miscellany, 23); jump ReType; } .Conversation2; ! The object addressed must at least be "talkable" if not actually "animate" ! (the distinction allows, for instance, a microphone to be spoken to, ! without the parser thinking that the microphone is human). if (l hasnt animate && l hasnt talkable) { L__M(##Miscellany, 24, l); jump ReType; } ! Check that there aren't any mystery words between the end of the person's ! name and the comma (eg, throw out "dwarf sdfgsdgs, go north"). if (wn ~= j) { if (verb_word && ((verb_word->#dict_par1) & 1)) jump NotConversation; L__M(##Miscellany, 25); jump ReType; } ! The player has now successfully named someone. Adjust "him", "her", "it": PronounNotice(l); ! Set the global variable "actor", adjust the number of the first word, ! and begin parsing again from there. verb_wordnum = j + 1; ! Stop things like "me, again": if (l == player) { wn = verb_wordnum; if (NextWordStopped() == AGAIN1__WD or AGAIN2__WD or AGAIN3__WD) { L__M(##Miscellany, 20); jump ReType; } } actor = l; actors_location = ScopeCeiling(l); #Ifdef DEBUG; if (parser_trace >= 1) print "[Actor is ", (the) actor, " in ", (name) actors_location, "]^"; #Endif; ! DEBUG jump BeginCommand; .NotConversation; if (verb_word == 0 || ((verb_word->#dict_par1) & 1) == 0) { if (actor == player) { verb_word = UnknownVerb(verb_word); if (verb_word ~= 0) jump VerbAccepted; } best_etype = VERB_PE; jump GiveError; } .VerbAccepted; ! We now definitely have a verb, not a direction, whether we got here by the ! "take ..." or "person, take ..." method. Get the meta flag for this verb: meta = ((verb_word->#dict_par1) & 2)/2; ! You can't order other people to "full score" for you, and so on... if (meta == 1 && actor ~= player) { best_etype = VERB_PE; meta = 0; jump GiveError; } ! Now let i be the corresponding verb number... i = DictionaryWordToVerbNum(verb_word); ! ...then look up the i-th entry in the verb table, whose address is at word ! 7 in the Z-machine (in the header), so as to get the address of the syntax ! table for the given verb... #Ifdef TARGET_ZCODE; syntax = (HDR_STATICMEMORY-->0)-->i; #Ifnot; ! TARGET_GLULX syntax = (#grammar_table)-->(i+1); #Endif; ! TARGET_ ! ...and then see how many lines (ie, different patterns corresponding to the ! same verb) are stored in the parse table... num_lines = (syntax->0) - 1; ! ...and now go through them all, one by one. ! To prevent pronoun_word 0 being misunderstood, pronoun_word = NULL; pronoun_obj = NULL; #Ifdef DEBUG; if (parser_trace >= 1) print "[Parsing for the verb '", (address) verb_word, "' (", num_lines+1, " lines)]^"; #Endif; ! DEBUG best_etype = STUCK_PE; nextbest_etype = STUCK_PE; multiflag = false; ! "best_etype" is the current failure-to-match error - it is by default ! the least informative one, "don't understand that sentence". ! "nextbest_etype" remembers the best alternative to having to ask a ! scope token for an error message (i.e., the best not counting ASKSCOPE_PE). ! multiflag is used here to prevent inappropriate MULTI_PE errors ! in addition to its unrelated duties passing information to action routines line_address = syntax + 1; for (line=0 : line<=num_lines : line++) { for (i=0 : i<32 : i++) { line_token-->i = ENDIT_TOKEN; line_ttype-->i = ELEMENTARY_TT; line_tdata-->i = ENDIT_TOKEN; } ! Unpack the syntax line from Inform format into three arrays; ensure that ! the sequence of tokens ends in an ENDIT_TOKEN. line_address = UnpackGrammarLine(line_address); #Ifdef DEBUG; if (parser_trace >= 1) { if (parser_trace >= 2) new_line; print "[line ", line; DebugGrammarLine(); print "]^"; } #Endif; ! DEBUG ! We aren't in "not holding" or inferring modes, and haven't entered ! any parameters on the line yet, or any special numbers; the multiple ! object is still empty. inferfrom = 0; parameters = 0; nsns = 0; special_word = 0; multiple_object-->0 = 0; multi_context = 0; etype = STUCK_PE; ! Put the word marker back to just after the verb wn = verb_wordnum+1; advance_warning = -1; indef_mode = false; for (i=0,m=false,pcount=0 : line_token-->pcount ~= ENDIT_TOKEN : pcount++) { scope_token = 0; if (line_ttype-->pcount ~= PREPOSITION_TT) i++; if (line_ttype-->pcount == ELEMENTARY_TT) { if (line_tdata-->pcount == MULTI_TOKEN) m = true; if (line_tdata-->pcount == MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN && i == 1) { ! First non-preposition is "multiexcept" or ! "multiinside", so look ahead. #Ifdef DEBUG; if (parser_trace >= 2) print " [Trying look-ahead]^"; #Endif; ! DEBUG ! We need this to be followed by 1 or more prepositions. pcount++; if (line_ttype-->pcount == PREPOSITION_TT) { ! skip ahead to a preposition word in the input do { l = NextWord(); } until ((wn > num_words) || (l && (l->#dict_par1) & 8 ~= 0)); if (wn > num_words) { #Ifdef DEBUG; if (parser_trace >= 2) print " [Look-ahead aborted: prepositions missing]^"; #Endif; jump LineFailed; } do { if (PrepositionChain(l, pcount) ~= -1) { ! advance past the chain if ((line_token-->pcount)->0 & $20 ~= 0) { pcount++; while ((line_token-->pcount ~= ENDIT_TOKEN) && ((line_token-->pcount)->0 & $10 ~= 0)) pcount++; } else { pcount++; } } else { ! try to find another preposition word do { l = NextWord(); } until ((wn >= num_words) || (l && (l->#dict_par1) & 8 ~= 0)); if (l && (l->#dict_par1) & 8) continue; ! lookahead failed #Ifdef DEBUG; if (parser_trace >= 2) print " [Look-ahead aborted: prepositions don't match]^"; #endif; jump LineFailed; } l = NextWord(); } until (line_ttype-->pcount ~= PREPOSITION_TT); ! put back the non-preposition we just read wn--; if ((line_ttype-->pcount == ELEMENTARY_TT) && (line_tdata-->pcount == NOUN_TOKEN)) { l = Descriptors(); ! skip past THE etc if (l~=0) etype=l; ! don't allow multiple objects k = parser_results-->INP1_PRES; @push k; @push parameters; parameters = 1; parser_results-->INP1_PRES = 0; l = NounDomain(actors_location, actor, NOUN_TOKEN); @pull parameters; @pull k; parser_results-->INP1_PRES = k; #Ifdef DEBUG; if (parser_trace >= 2) { print " [Advanced to ~noun~ token: "; if (l == REPARSE_CODE) print "re-parse request]^"; else { if (l == 1) print "but multiple found]^"; if (l == 0) print "error ", etype, "]^"; if (l >= 2) print (the) l, "]^"; } } #Endif; ! DEBUG if (l == REPARSE_CODE) jump ReParse; if (l >= 2) advance_warning = l; } } break; } } } ! Slightly different line-parsing rules will apply to "take multi", to ! prevent "take all" behaving correctly but misleadingly when there's ! nothing to take. take_all_rule = 0; if (m && params_wanted == 1 && action_to_be == ##Take) take_all_rule = 1; ! And now start again, properly, forearmed or not as the case may be. ! As a precaution, we clear all the variables again (they may have been ! disturbed by the call to NounDomain, which may have called outside ! code, which may have done anything!). inferfrom = 0; parameters = 0; nsns = 0; special_word = 0; multiple_object-->0 = 0; etype = STUCK_PE; wn = verb_wordnum+1; for (pcount=1 : : pcount++) { pattern-->pcount = PATTERN_NULL; scope_token = 0; token = line_token-->(pcount-1); lookahead = line_token-->pcount; #Ifdef DEBUG; if (parser_trace >= 2) print " [line ", line, " token ", pcount, " word ", wn, " : ", (DebugToken) token, "]^"; #Endif; ! DEBUG if (token ~= ENDIT_TOKEN) { scope_reason = PARSING_REASON; AnalyseToken(token); l = ParseToken(found_ttype, found_tdata, pcount-1, token); while ((l >= GPR_NOUN) && (l < -1)) l = ParseToken(ELEMENTARY_TT, l + 256); scope_reason = PARSING_REASON; if (l == GPR_PREPOSITION) { if (found_ttype~=PREPOSITION_TT && (found_ttype~=ELEMENTARY_TT || found_tdata~=TOPIC_TOKEN)) params_wanted--; l = true; } else if (l < 0) l = false; else if (l ~= GPR_REPARSE) { if (l == GPR_NUMBER) { if (nsns == 0) special_number1 = parsed_number; else special_number2 = parsed_number; nsns++; l = 1; } if (l == GPR_MULTIPLE) l = 0; parser_results-->(parameters+INP1_PRES) = l; parameters++; pattern-->pcount = l; l = true; } #Ifdef DEBUG; if (parser_trace >= 3) { print " [token resulted in "; if (l == REPARSE_CODE) print "re-parse request]^"; if (l == 0) print "failure with error type ", etype, "]^"; if (l == 1) print "success]^"; } #Endif; ! DEBUG if (l == REPARSE_CODE) jump ReParse; if (l == false) break; } else { ! If the player has entered enough already but there's still ! text to wade through: store the pattern away so as to be able to produce ! a decent error message if this turns out to be the best we ever manage, ! and in the mean time give up on this line ! However, if the superfluous text begins with a comma or "then" then ! take that to be the start of another instruction if (wn <= num_words) { l = NextWord(); if (l == THEN1__WD or THEN2__WD or THEN3__WD or comma_word) { held_back_mode = 1; hb_wn = wn-1; } else { for (m=0 : m<32 : m++) pattern2-->m = pattern-->m; pcount2 = pcount; etype = UPTO_PE; break; } } ! Now, we may need to revise the multiple object because of the single one ! we now know (but didn't when the list was drawn up). if (parameters >= 1 && parser_results-->INP1_PRES == 0) { l = ReviseMulti(parser_results-->INP2_PRES); if (l ~= 0) { etype = l; parser_results-->ACTION_PRES = action_to_be; break; } } if (parameters >= 2 && parser_results-->INP2_PRES == 0) { l = ReviseMulti(parser_results-->INP1_PRES); if (l ~= 0) { etype = l; break; } } ! To trap the case of "take all" inferring only "yourself" when absolutely ! nothing else is in the vicinity... if (take_all_rule == 2 && parser_results-->INP1_PRES == actor) { best_etype = NOTHING_PE; jump GiveError; } #Ifdef DEBUG; if (parser_trace >= 1) print "[Line successfully parsed]^"; #Endif; ! DEBUG ! The line has successfully matched the text. Declare the input error-free... oops_from = 0; ! ...explain any inferences made (using the pattern)... if (inferfrom ~= 0) { PrintInferredCommand(inferfrom); ClearParagraphing(); } ! ...copy the action number, and the number of parameters... parser_results-->ACTION_PRES = action_to_be; parser_results-->NO_INPS_PRES = parameters; ! ...reverse first and second parameters if need be... if (action_reversed && parameters == 2) { i = parser_results-->INP1_PRES; parser_results-->INP1_PRES = parser_results-->INP2_PRES; parser_results-->INP2_PRES = i; if (nsns == 2) { i = special_number1; special_number1 = special_number2; special_number2 = i; } } ! ...and to reset "it"-style objects to the first of these parameters, if ! there is one (and it really is an object)... if (parameters > 0 && parser_results-->INP1_PRES >= 2) PronounNotice(parser_results-->INP1_PRES); ! ...and return from the parser altogether, having successfully matched ! a line. if (held_back_mode == 1) { wn=hb_wn; jump LookForMore; } rtrue; } ! end of if(token ~= ENDIT_TOKEN) else } ! end of for(pcount++) .LineFailed; ! The line has failed to match. ! We continue the outer "for" loop, trying the next line in the grammar. if (etype > best_etype) best_etype = etype; if (etype ~= ASKSCOPE_PE && etype > nextbest_etype) nextbest_etype = etype; ! ...unless the line was something like "take all" which failed because ! nothing matched the "all", in which case we stop and give an error now. if (take_all_rule == 2 && etype==NOTHING_PE) break; } ! end of for(line++) ! The grammar is exhausted: every line has failed to match. .GiveError; etype = best_etype; if (actor ~= player) { if (usual_grammar_after ~= 0) { verb_wordnum = usual_grammar_after; jump AlmostReParse; } wn = verb_wordnum; special_word = NextWord(); if (special_word == comma_word) { special_word = NextWord(); verb_wordnum++; } parser_results-->ACTION_PRES = ##Answer; parser_results-->NO_INPS_PRES = 2; parser_results-->INP1_PRES = actor; parser_results-->INP2_PRES = 1; special_number1 = special_word; actor = player; consult_from = verb_wordnum; consult_words = num_words-consult_from+1; rtrue; } ! If the player was the actor (eg, in "take dfghh") the error must be printed, ! and fresh input called for. In three cases the oops word must be jiggled. if ((etype ofclass Routine) || (etype ofclass String)) { if (ParserError(etype) ~= 0) jump ReType; } else { if (verb_wordnum == 0 && etype == CANTSEE_PE) etype = VERB_PE; players_command = 100 + WordCount(); ! The snippet variable ``player's command'' BeginActivity(PRINTING_A_PARSER_ERROR_ACT); if (ForActivity(PRINTING_A_PARSER_ERROR_ACT)) jump SkipParserError; } pronoun_word = pronoun__word; pronoun_obj = pronoun__obj; if (etype == STUCK_PE) { L__M(##Miscellany, 27); oops_from = 1; } if (etype == UPTO_PE) { L__M(##Miscellany, 28); for (m=0 : m<32 : m++) pattern-->m = pattern2-->m; pcount = pcount2; PrintCommand(0); L__M(##Miscellany, 56); } if (etype == NUMBER_PE) L__M(##Miscellany, 29); if (etype == CANTSEE_PE) { L__M(##Miscellany, 30); oops_from=saved_oops; } if (etype == TOOLIT_PE) L__M(##Miscellany, 31); if (etype == NOTHELD_PE) { L__M(##Miscellany, 32); oops_from=saved_oops; } if (etype == MULTI_PE) L__M(##Miscellany, 33); if (etype == MMULTI_PE) L__M(##Miscellany, 34); if (etype == VAGUE_PE) L__M(##Miscellany, 35); if (etype == EXCEPT_PE) L__M(##Miscellany, 36); if (etype == ANIMA_PE) L__M(##Miscellany, 37); if (etype == VERB_PE) L__M(##Miscellany, 38); if (etype == SCENERY_PE) L__M(##Miscellany, 39); if (etype == ITGONE_PE) { if (pronoun_obj == NULL) L__M(##Miscellany, 35); else L__M(##Miscellany, 40); } if (etype == JUNKAFTER_PE) L__M(##Miscellany, 41); if (etype == TOOFEW_PE) L__M(##Miscellany, 42, multi_had); if (etype == NOTHING_PE) { if (parser_results-->ACTION_PRES == ##Remove && parser_results-->INP2_PRES ofclass Object) { noun = parser_results-->INP2_PRES; ! ensure valid for messages if (noun has animate) L__M(##Take, 6, noun); else if (noun hasnt container or supporter) L__M(##Insert, 2, noun); else if (noun has container && noun hasnt open) L__M(##Take, 9, noun); else if (children(noun)==0) L__M(##Search, 6, noun); else parser_results-->ACTION_PRES = 0; } if (parser_results-->ACTION_PRES ~= ##Remove) { if (multi_wanted==100) L__M(##Miscellany, 43); else L__M(##Miscellany, 44); } } if (etype == ASKSCOPE_PE) { scope_stage = 3; if (indirect(scope_error) == -1) { best_etype = nextbest_etype; if (~~((etype ofclass Routine) || (etype ofclass String))) EndActivity(PRINTING_A_PARSER_ERROR_ACT); jump GiveError; } } if (etype == NOTINCONTEXT_PE) L__M(##Miscellany, 73); .SkipParserError; if ((etype ofclass Routine) || (etype ofclass String)) jump ReType; say__p = 1; EndActivity(PRINTING_A_PARSER_ERROR_ACT); ! And go (almost) right back to square one... jump ReType; ! ...being careful not to go all the way back, to avoid infinite repetition ! of a deferred command causing an error. ! At this point, the return value is all prepared, and we are only looking ! to see if there is a "then" followed by subsequent instruction(s). .LookForMore; if (wn > num_words) rtrue; i = NextWord(); if (i == THEN1__WD or THEN2__WD or THEN3__WD or comma_word) { if (wn > num_words) { held_back_mode = false; return; } i = WordAddress(verb_wordnum); j = WordAddress(wn); for (: i0 = ' '; i = NextWord(); if (i == AGAIN1__WD or AGAIN2__WD or AGAIN3__WD) { ! Delete the words "then again" from the again buffer, ! in which we have just realised that it must occur: ! prevents an infinite loop on "i. again" i = WordAddress(wn-2)-buffer; if (wn > num_words) j = INPUT_BUFFER_LEN-1; else j = WordAddress(wn)-buffer; for (: ii = ' '; } VM_Tokenise(buffer,parse); held_back_mode = true; return; } best_etype = UPTO_PE; jump GiveError; ]; ! end of Parser__parse [ ParseTokenStopped x y; if (wn>WordCount()) return GPR_FAIL; return ParseToken(x,y); ]; Global parsetoken_nesting = 0; [ ParseToken given_ttype given_tdata token_n token i t rv; if (parsetoken_nesting > 0) { ! save match globals @push match_from; @push token_filter; @push match_length; @push number_of_classes; @push oops_from; for (i=0: ii; @push t; t = match_classes-->i; @push t; t = match_scores-->i; @push t; } @push number_matched; } parsetoken_nesting++; rv = ParseToken__(given_ttype, given_tdata, token_n, token); parsetoken_nesting--; if (parsetoken_nesting > 0) { ! restore match globals @pull number_matched; for (i=0: ii = t; @pull t; match_classes-->i = t; @pull t; match_list-->i = t; } @pull oops_from; @pull number_of_classes; @pull match_length; @pull token_filter; @pull match_from; } return rv; ]; [ ParseToken__ given_ttype given_tdata token_n token l o i j k and_parity single_object desc_wn many_flag token_allows_multiple prev_indef_wanted; token_filter = 0; parser_inflection = name; switch (given_ttype) { ELEMENTARY_TT: switch (given_tdata) { SPECIAL_TOKEN: l = TryNumber(wn); special_word = NextWord(); #Ifdef DEBUG; if (l ~= -1000) if (parser_trace >= 3) print " [Read special as the number ", l, "]^"; #Endif; ! DEBUG if (l == -1000) { #Ifdef DEBUG; if (parser_trace >= 3) print " [Read special word at word number ", wn, "]^"; #Endif; ! DEBUG l = special_word; } parsed_number = l; return GPR_NUMBER; NUMBER_TOKEN: l=TryNumber(wn++); if (l == -1000) { etype = NUMBER_PE; return GPR_FAIL; } #Ifdef DEBUG; if (parser_trace>=3) print " [Read number as ", l, "]^"; #Endif; ! DEBUG parsed_number = l; return GPR_NUMBER; CREATURE_TOKEN: if (action_to_be == ##Answer or ##Ask or ##AskFor or ##Tell) scope_reason = TALKING_REASON; TOPIC_TOKEN: consult_from = wn; if ((line_ttype-->(token_n+1) ~= PREPOSITION_TT) && (line_token-->(token_n+1) ~= ENDIT_TOKEN)) RunTimeError(13); do o = NextWordStopped(); until (o == -1 || PrepositionChain(o, token_n+1) ~= -1); wn--; consult_words = wn-consult_from; if (consult_words == 0) return GPR_FAIL; if (action_to_be == ##Ask or ##Answer or ##Tell) { o = wn; wn = consult_from; parsed_number = NextWord(); wn = o; return 1; } if (o==-1 && (line_ttype-->(token_n+1) == PREPOSITION_TT)) return GPR_FAIL; ! don't infer if required preposition is absent return GPR_PREPOSITION; } PREPOSITION_TT: ! Is it an unnecessary alternative preposition, when a previous choice ! has already been matched? if ((token->0) & $10) return GPR_PREPOSITION; ! If we've run out of the player's input, but still have parameters to ! specify, we go into "infer" mode, remembering where we are and the ! preposition we are inferring... if (wn > num_words) { if (inferfrom==0 && parameterspcount = REPARSE_CODE + VM_DictionaryAddressToNumber(given_tdata); } ! If we are not inferring, then the line is wrong... if (inferfrom == 0) return -1; ! If not, then the line is right but we mark in the preposition... pattern-->pcount = REPARSE_CODE + VM_DictionaryAddressToNumber(given_tdata); return GPR_PREPOSITION; } o = NextWord(); pattern-->pcount = REPARSE_CODE + VM_DictionaryAddressToNumber(o); ! Whereas, if the player has typed something here, see if it is the ! required preposition... if it's wrong, the line must be wrong, ! but if it's right, the token is passed (jump to finish this token). if (o == given_tdata) return GPR_PREPOSITION; if (PrepositionChain(o, token_n) ~= -1) return GPR_PREPOSITION; return -1; GPR_TT: l = indirect(given_tdata); #Ifdef DEBUG; if (parser_trace >= 3) print " [Outside parsing routine returned ", l, "]^"; #Endif; ! DEBUG return l; SCOPE_TT: scope_token = given_tdata; scope_stage = 1; #Ifdef DEBUG; if (parser_trace >= 3) print " [Scope routine called at stage 1]^"; #Endif; ! DEBUG l = indirect(scope_token); #Ifdef DEBUG; if (parser_trace >= 3) print " [Scope routine returned multiple-flag of ", l, "]^"; #Endif; ! DEBUG if (l == 1) given_tdata = MULTI_TOKEN; else given_tdata = NOUN_TOKEN; ATTR_FILTER_TT: token_filter = 1 + given_tdata; given_tdata = NOUN_TOKEN; ROUTINE_FILTER_TT: token_filter = given_tdata; given_tdata = NOUN_TOKEN; } ! end of switch(given_ttype) token = given_tdata; ! There are now three possible ways we can be here: ! parsing an elementary token other than "special" or "number"; ! parsing a scope token; ! parsing a noun-filter token (either by routine or attribute). ! ! In each case, token holds the type of elementary parse to ! perform in matching one or more objects, and ! token_filter is 0 (default), an attribute + 1 for an attribute filter ! or a routine address for a routine filter. token_allows_multiple = false; if (token == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) token_allows_multiple = true; many_flag = false; and_parity = true; dont_infer = false; ! We expect to find a list of objects next in what the player's typed. .ObjectList; #Ifdef DEBUG; if (parser_trace >= 3) print " [Object list from word ", wn, "]^"; #Endif; ! DEBUG ! Take an advance look at the next word: if it's "it" or "them", and these ! are unset, set the appropriate error number and give up on the line ! (if not, these are still parsed in the usual way - it is not assumed ! that they still refer to something in scope) o = NextWord(); wn--; pronoun_word = NULL; pronoun_obj = NULL; l = PronounValue(o); if (l ~= 0) { pronoun_word = o; pronoun_obj = l; if (l == NULL) { ! Don't assume this is a use of an unset pronoun until the ! descriptors have been checked, because it might be an ! article (or some such) instead for (l=1 : l<=LanguageDescriptors-->0 : l=l+4) if (o == LanguageDescriptors-->l) jump AssumeDescriptor; pronoun__word = pronoun_word; pronoun__obj = pronoun_obj; etype = VAGUE_PE; if (parser_trace >= 3) print " [Stop: unset pronoun]^"; return GPR_FAIL; } } .AssumeDescriptor; if (o == ME1__WD or ME2__WD or ME3__WD) { pronoun_word = o; pronoun_obj = player; } allow_plurals = true; desc_wn = wn; .TryAgain; ! First, we parse any descriptive words (like "the", "five" or "every"): l = Descriptors(token_allows_multiple); if (l ~= 0) { etype = l; return 0; } .TryAgain2; ! This is an actual specified object, and is therefore where a typing error ! is most likely to occur, so we set: oops_from = wn; ! So, two cases. Case 1: token not equal to "held" (so, no implicit takes) ! but we may well be dealing with multiple objects ! In either case below we use NounDomain, giving it the token number as ! context, and two places to look: among the actor's possessions, and in the ! present location. (Note that the order depends on which is likeliest.) if (token ~= HELD_TOKEN) { i = multiple_object-->0; #Ifdef DEBUG; if (parser_trace >= 3) print " [Calling NounDomain on location and actor]^"; #Endif; ! DEBUG l = NounDomain(actors_location, actor, token); if (l == REPARSE_CODE) return l; ! Reparse after Q&A if (indef_wanted == INDEF_ALL_WANTED && l == 0 && number_matched == 0) l = 1; ! ReviseMulti if TAKE ALL FROM empty container if (token_allows_multiple && ~~multiflag) { if (best_etype==MULTI_PE) best_etype=STUCK_PE; multiflag = true; } if (l == 0) { if (indef_possambig) { ResetDescriptors(); wn = desc_wn; jump TryAgain2; } if (etype == MULTI_PE or TOOFEW_PE && multiflag) etype = STUCK_PE; etype=CantSee(); jump FailToken; } ! Choose best error #Ifdef DEBUG; if (parser_trace >= 3) { if (l > 1) print " [ND returned ", (the) l, "]^"; else { print " [ND appended to the multiple object list:^"; k = multiple_object-->0; for (j=i+1 : j<=k : j++) print " Entry ", j, ": ", (The) multiple_object-->j, " (", multiple_object-->j, ")^"; print " List now has size ", k, "]^"; } } #Endif; ! DEBUG if (l == 1) { if (~~many_flag) many_flag = true; else { ! Merge with earlier ones k = multiple_object-->0; ! (with either parity) multiple_object-->0 = i; for (j=i+1 : j<=k : j++) { if (and_parity) MultiAdd(multiple_object-->j); else MultiSub(multiple_object-->j); } #Ifdef DEBUG; if (parser_trace >= 3) print " [Merging ", k-i, " new objects to the ", i, " old ones]^"; #Endif; ! DEBUG } } else { ! A single object was indeed found if (match_length == 0 && indef_possambig) { ! So the answer had to be inferred from no textual data, ! and we know that there was an ambiguity in the descriptor ! stage (such as a word which could be a pronoun being ! parsed as an article or possessive). It's worth having ! another go. ResetDescriptors(); wn = desc_wn; jump TryAgain2; } if ((token == CREATURE_TOKEN) && (CreatureTest(l) == 0)) { etype = ANIMA_PE; jump FailToken; } ! Animation is required if (~~many_flag) single_object = l; else { if (and_parity) MultiAdd(l); else MultiSub(l); #Ifdef DEBUG; if (parser_trace >= 3) print " [Combining ", (the) l, " with list]^"; #Endif; ! DEBUG } } } else { ! Case 2: token is "held" (which fortunately can't take multiple objects) ! and may generate an implicit take l = NounDomain(actor,actors_location,token); ! Same as above... if (l == REPARSE_CODE) return l; if (l == 0) { if (indef_possambig) { ResetDescriptors(); wn = desc_wn; jump TryAgain2; } etype = CantSee(); jump FailToken; ! Choose best error } ! ...until it produces something not held by the actor. Then an implicit ! take must be tried. If this is already happening anyway, things are too ! confused and we have to give up (but saving the oops marker so as to get ! it on the right word afterwards). ! The point of this last rule is that a sequence like ! ! > read newspaper ! (taking the newspaper first) ! The dwarf unexpectedly prevents you from taking the newspaper! ! ! should not be allowed to go into an infinite repeat - read becomes ! take then read, but take has no effect, so read becomes take then read... ! Anyway for now all we do is record the number of the object to take. o = parent(l); if (o ~= actor) { #Ifdef DEBUG; if (parser_trace >= 3) print " [Allowing object ", (the) l, " for now]^"; #Endif; ! DEBUG } single_object = l; } ! end of if (token ~= HELD_TOKEN) else ! The following moves the word marker to just past the named object... wn = oops_from + match_length; ! Object(s) specified now: is that the end of the list, or have we reached ! "and", "but" and so on? If so, create a multiple-object list if we ! haven't already (and are allowed to). .NextInList; o = NextWord(); if (o == AND1__WD or AND2__WD or AND3__WD or BUT1__WD or BUT2__WD or BUT3__WD or comma_word) { #Ifdef DEBUG; if (parser_trace >= 3) print " [Read connective '", (address) o, "']^"; #Endif; ! DEBUG if (~~token_allows_multiple) { if (multiflag) jump PassToken; ! give UPTO_PE error etype=MULTI_PE; jump FailToken; } if (o == BUT1__WD or BUT2__WD or BUT3__WD) and_parity = 1-and_parity; if (~~many_flag) { multiple_object-->0 = 1; multiple_object-->1 = single_object; many_flag = true; #Ifdef DEBUG; if (parser_trace >= 3) print " [Making new list from ", (the) single_object, "]^"; #Endif; ! DEBUG } dont_infer = true; inferfrom=0; ! Don't print (inferences) jump ObjectList; ! And back around } wn--; ! Word marker back to first not-understood word ! Happy or unhappy endings: .PassToken; if (many_flag) { single_object = GPR_MULTIPLE; multi_context = token; } else { if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (indef_wanted < INDEF_ALL_WANTED && indef_wanted > 1) { multi_had = 1; multi_wanted = indef_wanted; etype = TOOFEW_PE; jump FailToken; } } } return single_object; .FailToken; ! If we were only guessing about it being a plural, try again but only ! allowing singulars (so that words like "six" are not swallowed up as ! Descriptors) if (allow_plurals && indef_guess_p == 1) { #Ifdef DEBUG; if (parser_trace >= 4) print " [Retrying singulars after failure ", etype, "]^"; #Endif; prev_indef_wanted = indef_wanted; allow_plurals = false; wn = desc_wn; jump TryAgain; } if ((indef_wanted > 0 || prev_indef_wanted > 0) && (~~multiflag)) etype = MULTI_PE; return GPR_FAIL; ]; ! end of ParseToken__ Constant OTHER_BIT = 1; ! These will be used in Adjudicate() Constant MY_BIT = 2; ! to disambiguate choices Constant THAT_BIT = 4; Constant PLURAL_BIT = 8; Constant LIT_BIT = 16; Constant UNLIT_BIT = 32; [ ResetDescriptors; indef_mode = 0; indef_type = 0; indef_wanted = 0; indef_guess_p = 0; indef_possambig = false; indef_owner = nothing; indef_cases = $$111111111111; indef_nspec_at = 0; ]; [ ArticleDescriptors o x flag cto type n; if (wn > num_words) return 0; for (flag=true : flag :) { o = NextWordStopped(); flag = false; for (x=1 : x<=LanguageDescriptors-->0 : x=x+4) if (o == LanguageDescriptors-->x) { type = LanguageDescriptors-->(x+2); if (type == DEFART_PK or INDEFART_PK) flag = true; } } wn--; return 0; ]; [ Descriptors o x flag cto type n; ResetDescriptors(); if (wn > num_words) return 0; for (flag=true : flag :) { o = NextWordStopped(); flag = false; for (x=1 : x<=LanguageDescriptors-->0 : x=x+4) if (o == LanguageDescriptors-->x) { flag = true; type = LanguageDescriptors-->(x+2); if (type ~= DEFART_PK) indef_mode = true; indef_possambig = true; indef_cases = indef_cases & (LanguageDescriptors-->(x+1)); if (type == POSSESS_PK) { cto = LanguageDescriptors-->(x+3); switch (cto) { 0: indef_type = indef_type | MY_BIT; 1: indef_type = indef_type | THAT_BIT; default: indef_owner = PronounValue(cto); if (indef_owner == NULL) indef_owner = InformParser; } } if (type == light) indef_type = indef_type | LIT_BIT; if (type == -light) indef_type = indef_type | UNLIT_BIT; } if (o == OTHER1__WD or OTHER2__WD or OTHER3__WD) { indef_mode = 1; flag = 1; indef_type = indef_type | OTHER_BIT; } if (o == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { indef_mode = 1; flag = 1; indef_wanted = INDEF_ALL_WANTED; if (take_all_rule == 1) take_all_rule = 2; indef_type = indef_type | PLURAL_BIT; } if (allow_plurals) { if (NextWordStopped() ~= -1) { wn--; n = TryNumber(wn-1); } else { n=0; wn--; } if (n == 1) { indef_mode = 1; flag = 1; } if (n > 1) { indef_guess_p = 1; indef_mode = 1; flag = 1; indef_wanted = n; indef_nspec_at = wn-1; indef_type = indef_type | PLURAL_BIT; } } if (flag == 1 && NextWordStopped() ~= OF1__WD or OF2__WD or OF3__WD or OF4__WD) wn--; ! Skip 'of' after these } wn--; return 0; ]; [ SafeSkipDescriptors; @push indef_mode; @push indef_type; @push indef_wanted; @push indef_guess_p; @push indef_possambig; @push indef_owner; @push indef_cases; @push indef_nspec_at; Descriptors(); @pull indef_nspec_at; @pull indef_cases; @pull indef_owner; @pull indef_possambig; @pull indef_guess_p; @pull indef_wanted; @pull indef_type; @pull indef_mode; ]; [ PrepositionChain wd index; if (line_tdata-->index == wd) return wd; if ((line_token-->index)->0 & $20 == 0) return -1; do { if (line_tdata-->index == wd) return wd; index++; } until ((line_token-->index == ENDIT_TOKEN) || (((line_token-->index)->0 & $10) == 0)); return -1; ]; [ CreatureTest obj; if (obj has animate) rtrue; if (obj hasnt talkable) rfalse; if (action_to_be == ##Ask or ##Answer or ##Tell or ##AskFor) rtrue; rfalse; ]; [ NounDomain domain1 domain2 context first_word i j k l answer_words marker; #Ifdef DEBUG; if (parser_trace >= 4) { print " [NounDomain called at word ", wn, "^"; print " "; if (indef_mode) { print "seeking indefinite object: "; if (indef_type & OTHER_BIT) print "other "; if (indef_type & MY_BIT) print "my "; if (indef_type & THAT_BIT) print "that "; if (indef_type & PLURAL_BIT) print "plural "; if (indef_type & LIT_BIT) print "lit "; if (indef_type & UNLIT_BIT) print "unlit "; if (indef_owner ~= 0) print "owner:", (name) indef_owner; new_line; print " number wanted: "; if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; new_line; print " most likely GNAs of names: ", indef_cases, "^"; } else print "seeking definite object^"; } #Endif; ! DEBUG match_length = 0; number_matched = 0; match_from = wn; SearchScope(domain1, domain2, context); #Ifdef DEBUG; if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; #Endif; ! DEBUG wn = match_from+match_length; ! If nothing worked at all, leave with the word marker skipped past the ! first unmatched word... if (number_matched == 0) { wn++; rfalse; } ! Suppose that there really were some words being parsed (i.e., we did ! not just infer). If so, and if there was only one match, it must be ! right and we return it... if (match_from <= num_words) { if (number_matched == 1) { i=match_list-->0; return i; } ! ...now suppose that there was more typing to come, i.e. suppose that ! the user entered something beyond this noun. If nothing ought to follow, ! then there must be a mistake, (unless what does follow is just a full ! stop, and or comma) if (wn <= num_words) { i = NextWord(); wn--; if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word or THEN1__WD or THEN2__WD or THEN3__WD or BUT1__WD or BUT2__WD or BUT3__WD) { if (lookahead == ENDIT_TOKEN) rfalse; } } } ! Now look for a good choice, if there's more than one choice... number_of_classes = 0; if (number_matched == 1) i = match_list-->0; if (number_matched > 1) { i = true; if (number_matched > 1) for (j=0 : jj, match_list-->(j+1)) == false) i = false; if (i) dont_infer = true; i = Adjudicate(context); if (i == -1) rfalse; if (i == 1) rtrue; ! Adjudicate has made a multiple ! object, and we pass it on } ! If i is non-zero here, one of two things is happening: either ! (a) an inference has been successfully made that object i is ! the intended one from the user's specification, or ! (b) the user finished typing some time ago, but we've decided ! on i because it's the only possible choice. ! In either case we have to keep the pattern up to date, ! note that an inference has been made and return. ! (Except, we don't note which of a pile of identical objects.) if (i ~= 0) { if (dont_infer) return i; if (inferfrom == 0) inferfrom=pcount; pattern-->pcount = i; return i; } ! If we get here, there was no obvious choice of object to make. If in ! fact we've already gone past the end of the player's typing (which ! means the match list must contain every object in scope, regardless ! of its name), then it's foolish to give an enormous list to choose ! from - instead we go and ask a more suitable question... if (match_from > num_words) jump Incomplete; ! Now we print up the question, using the equivalence classes as worked ! out by Adjudicate() so as not to repeat ourselves on plural objects... BeginActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); if (ForActivity(ASKING_WHICH_DO_YOU_MEAN_ACT)) jump SkipWhichQuestion; j = 1; marker = 0; for (i=1 : i<=number_of_classes : i++) { while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; if (match_list-->marker hasnt animate) j = 0; } if (j) L__M(##Miscellany, 45); else L__M(##Miscellany, 46); j = number_of_classes; marker = 0; for (i=1 : i<=number_of_classes : i++) { while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; k = match_list-->marker; if (match_classes-->marker > 0) print (the) k; else print (a) k; if (i < j-1) print (string) COMMA__TX; if (i == j-1) { #Ifdef SERIAL_COMMA; if (j ~= 2) print ","; #Endif; ! SERIAL_COMMA print (string) OR__TX; } } L__M(##Miscellany, 57); .SkipWhichQuestion; EndActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); ! ...and get an answer: .WhichOne; #Ifdef TARGET_ZCODE; for (i=2 : ii = ' '; #Endif; ! TARGET_ZCODE answer_words=Keyboard(buffer2, parse2); ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. first_word = (parse2-->1); ! Take care of "all", because that does something too clever here to do ! later on: if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { l = multiple_object-->0; for (i=0 : ii; multiple_object-->(i+1+l) = k; } multiple_object-->0 = i+l; rtrue; } L__M(##Miscellany, 47); jump WhichOne; } ! Look for a comma, and interpret this as a fresh conversation command ! if so: for (i=1 : i<=answer_words : i++) if (WordFrom(i, parse2) == comma_word) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } ! If the first word of the reply can be interpreted as a verb, then ! assume that the player has ignored the question and given a new ! command altogether. ! (This is one time when it's convenient that the directions are ! not themselves verbs - thus, "north" as a reply to "Which, the north ! or south door" is not treated as a fresh command but as an answer.) #Ifdef LanguageIsVerb; if (first_word == 0) { j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; } #Endif; ! LanguageIsVerb if (first_word ~= 0) { j = first_word->#dict_par1; if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } } ! Now we insert the answer into the original typed command, as ! words additionally describing the same object ! (eg, > take red button ! Which one, ... ! > music ! becomes "take music red button". The parser will thus have three ! words to work from next time, not two.) #Ifdef TARGET_ZCODE; k = WordAddress(match_from) - buffer; l=buffer2->1+1; for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j--) j->0 = 0->(j-l); for (i=0 : i(k+i) = buffer2->(2+i); buffer->(k+l-1) = ' '; buffer->1 = buffer->1 + l; if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; #Ifnot; ! TARGET_GLULX k = WordAddress(match_from) - buffer; l = (buffer2-->0) + 1; for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j--) j->0 = j->(-l); for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); buffer->(k+l-1) = ' '; buffer-->0 = buffer-->0 + l; if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); #Endif; ! TARGET_ ! Having reconstructed the input, we warn the parser accordingly ! and get out. .RECONSTRUCT_INPUT; num_words = WordCount(); wn = 1; #Ifdef LanguageToInformese; LanguageToInformese(); ! Re-tokenise: VM_Tokenise(buffer,parse); #Endif; ! LanguageToInformese num_words = WordCount(); players_command = 100 + WordCount(); actors_location = ScopeCeiling(player); FollowRulebook(Activity_after_rulebooks-->READING_A_COMMAND_ACT, true); return REPARSE_CODE; ! Now we come to the question asked when the input has run out ! and can't easily be guessed (eg, the player typed "take" and there ! were plenty of things which might have been meant). .Incomplete; if (context == CREATURE_TOKEN) L__M(##Miscellany, 48); else L__M(##Miscellany, 49); #Ifdef TARGET_ZCODE; for (i=2 : ii=' '; #Endif; ! TARGET_ZCODE answer_words = Keyboard(buffer2, parse2); first_word=(parse2-->1); #Ifdef LanguageIsVerb; if (first_word==0) { j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; } #Endif; ! LanguageIsVerb ! Once again, if the reply looks like a command, give it to the ! parser to get on with and forget about the question... if (first_word ~= 0) { j = first_word->#dict_par1; if (0 ~= j&1) { VM_CopyBuffer(buffer, buffer2); return REPARSE_CODE; } } ! ...but if we have a genuine answer, then: ! ! (1) we must glue in text suitable for anything that's been inferred. if (inferfrom ~= 0) { for (j=inferfrom : jj == PATTERN_NULL) continue; #Ifdef TARGET_ZCODE; i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; #Ifnot; ! TARGET_GLULX i = WORDSIZE + buffer-->0; (buffer-->0)++; buffer->(i++) = ' '; #Endif; ! TARGET_ #Ifdef DEBUG; if (parser_trace >= 5) print "[Gluing in inference with pattern code ", pattern-->j, "]^"; #Endif; ! DEBUG ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. parse2-->1 = 0; ! An inferred object. Best we can do is glue in a pronoun. ! (This is imperfect, but it's very seldom needed anyway.) if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { PronounNotice(pattern-->j); for (k=1 : k<=LanguagePronouns-->0 : k=k+3) if (pattern-->j == LanguagePronouns-->(k+2)) { parse2-->1 = LanguagePronouns-->k; #Ifdef DEBUG; if (parser_trace >= 5) print "[Using pronoun '", (address) parse2-->1, "']^"; #Endif; ! DEBUG break; } } else { ! An inferred preposition. parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); #Ifdef DEBUG; if (parser_trace >= 5) print "[Using preposition '", (address) parse2-->1, "']^"; #Endif; ! DEBUG } ! parse2-->1 now holds the dictionary address of the word to glue in. if (parse2-->1 ~= 0) { k = buffer + i; #Ifdef TARGET_ZCODE; @output_stream 3 k; print (address) parse2-->1; @output_stream -3; k = k-->0; for (l=i : ll = buffer->(l+2); i = i + k; buffer->1 = i-2; #Ifnot; ! TARGET_GLULX k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); i = i + k; buffer-->0 = i - WORDSIZE; #Endif; ! TARGET_ } } } ! (2) we must glue the newly-typed text onto the end. #Ifdef TARGET_ZCODE; i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; for (j=0 : j1 : i++,j++) { buffer->i = buffer2->(j+2); (buffer->1)++; if (buffer->1 == INPUT_BUFFER_LEN) break; } #Ifnot; ! TARGET_GLULX i = WORDSIZE + buffer-->0; (buffer-->0)++; buffer->(i++) = ' '; for (j=0 : j0 : i++,j++) { buffer->i = buffer2->(j+WORDSIZE); (buffer-->0)++; if (buffer-->0 == INPUT_BUFFER_LEN) break; } #Endif; ! TARGET_ ! (3) we fill up the buffer with spaces, which is unnecessary, but may ! help incorrectly-written interpreters to cope. #Ifdef TARGET_ZCODE; for (: ii = ' '; #Endif; ! TARGET_ZCODE return REPARSE_CODE; ]; ! end of NounDomain [ Adjudicate context i j k good_ones last n ultimate flag offset; #Ifdef DEBUG; if (parser_trace >= 4) { print " [Adjudicating match list of size ", number_matched, " in context ", context, "^"; print " "; if (indef_mode) { print "indefinite type: "; if (indef_type & OTHER_BIT) print "other "; if (indef_type & MY_BIT) print "my "; if (indef_type & THAT_BIT) print "that "; if (indef_type & PLURAL_BIT) print "plural "; if (indef_type & LIT_BIT) print "lit "; if (indef_type & UNLIT_BIT) print "unlit "; if (indef_owner ~= 0) print "owner:", (name) indef_owner; new_line; print " number wanted: "; if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; new_line; print " most likely GNAs of names: ", indef_cases, "^"; } else print "definite object^"; } #Endif; ! DEBUG j = number_matched-1; good_ones = 0; last = match_list-->0; for (i=0 : i<=j : i++) { n = match_list-->i; match_scores-->i = good_ones; ultimate = ScopeCeiling(n); if (context==HELD_TOKEN && parent(n)==actor) { good_ones++; last=n; } if (context==MULTI_TOKEN && ultimate==ScopeCeiling(actor) && n~=actor && n hasnt concealed && n hasnt scenery) { good_ones++; last=n; } if (context==MULTIHELD_TOKEN && parent(n)==actor) { good_ones++; last=n; } if (context==MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { if (advance_warning==-1) { if (context==MULTIEXCEPT_TOKEN) { good_ones++; last=n; } if (context==MULTIINSIDE_TOKEN) { if (parent(n)~=actor) { good_ones++; last=n; } } } else { if (context==MULTIEXCEPT_TOKEN && n~=advance_warning) { good_ones++; last=n; } if (context==MULTIINSIDE_TOKEN && n in advance_warning) { good_ones++; last=n; } } } if (context==CREATURE_TOKEN && CreatureTest(n)==1) { good_ones++; last=n; } match_scores-->i = 1000*(good_ones - match_scores-->i); } if (good_ones == 1) return last; ! If there is ambiguity about what was typed, but it definitely wasn't ! animate as required, then return anything; higher up in the parser ! a suitable error will be given. (This prevents a question being asked.) if (context == CREATURE_TOKEN && good_ones == 0) return match_list-->0; if (indef_mode == 0) indef_type=0; ScoreMatchL(context); if (number_matched == 0) return -1; if (indef_mode == 0) { ! Is there now a single highest-scoring object? i = SingleBestGuess(); if (i >= 0) { #Ifdef DEBUG; if (parser_trace >= 4) print " Single best-scoring object returned.]^"; #Endif; ! DEBUG return i; } } if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (context ~= MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { etype = MULTI_PE; return -1; } i = 0; offset = multiple_object-->0; for (j=BestGuess(): j~=-1 && i(i+offset) = j; #Ifdef DEBUG; if (parser_trace >= 4) print " Accepting it^"; #Endif; ! DEBUG } else { i = i; #Ifdef DEBUG; if (parser_trace >= 4) print " Rejecting it^"; #Endif; ! DEBUG } } if (i < indef_wanted && indef_wanted < INDEF_ALL_WANTED) { etype = TOOFEW_PE; multi_wanted = indef_wanted; multi_had=i; return -1; } multiple_object-->0 = i+offset; multi_context = context; #Ifdef DEBUG; if (parser_trace >= 4) print " Made multiple object of size ", i, "]^"; #Endif; ! DEBUG return 1; } for (i=0 : ii = 0; n = 1; for (i=0 : ii == 0) { match_classes-->i = n++; flag = 0; for (j=i+1 : jj == 0 && Identical(match_list-->i, match_list-->j) == 1) { flag=1; match_classes-->j = match_classes-->i; } if (flag == 1) match_classes-->i = 1-n; } n--; number_of_classes = n; #Ifdef DEBUG; if (parser_trace >= 4) { print " Grouped into ", n, " possibilities by name:^"; for (i=0 : ii > 0) print " ", (The) match_list-->i, " (", match_list-->i, ") --- group ", match_classes-->i, "^"; } #Endif; ! DEBUG if (indef_mode == 0) { if (n > 1) { k = -1; for (i=0 : ii > k) { k = match_scores-->i; j = match_classes-->i; j = j*j; flag = 0; } else if (match_scores-->i == k) { if ((match_classes-->i) * (match_classes-->i) ~= j) flag = 1; } } if (flag) { #Ifdef DEBUG; if (parser_trace >= 4) print " Unable to choose best group, so ask player.]^"; #Endif; ! DEBUG return 0; } #Ifdef DEBUG; if (parser_trace >= 4) print " Best choices are all from the same group.^"; #Endif; ! DEBUG } } ! When the player is really vague, or there's a single collection of ! indistinguishable objects to choose from, choose the one the player ! most recently acquired, or if the player has none of them, then ! the one most recently put where it is. if (n == 1) dont_infer = true; return BestGuess(); ]; ! Adjudicate [ ReviseMulti second_p i low; #Ifdef DEBUG; if (parser_trace >= 4) print " Revising multiple object list of size ", multiple_object-->0, " with 2nd ", (name) second_p, "^"; #Endif; ! DEBUG if (multi_context == MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { for (i=1,low=0 : i<=multiple_object-->0 : i++) { if ( (multi_context==MULTIEXCEPT_TOKEN && multiple_object-->i ~= second_p) || (multi_context==MULTIINSIDE_TOKEN && multiple_object-->i in second_p)) { low++; multiple_object-->low = multiple_object-->i; } } multiple_object-->0 = low; } if (multi_context == MULTI_TOKEN && action_to_be == ##Take) { #Ifdef DEBUG; if (parser_trace >= 4) print " Token 2 plural case: number with actor ", low, "^"; #Endif; ! DEBUG if (take_all_rule == 2) { for (i=1,low=0 : i<=multiple_object-->0 : i++) { if (ScopeCeiling(multiple_object-->i) == ScopeCeiling(actor)) { low++; multiple_object-->low = multiple_object-->i; } } multiple_object-->0 = low; } } i = multiple_object-->0; #Ifdef DEBUG; if (parser_trace >= 4) print " Done: new size ", i, "^"; #Endif; ! DEBUG if (i == 0) return NOTHING_PE; return 0; ]; [ MakeMatch obj quality i; #Ifdef DEBUG; if (parser_trace >= 6) print " Match with quality ",quality,"^"; #Endif; ! DEBUG if (token_filter ~= 0 && ConsultNounFilterToken(obj) == 0) { #Ifdef DEBUG; if (parser_trace >= 6) print " Match filtered out: token filter ", token_filter, "^"; #Endif; ! DEBUG rtrue; } if (quality < match_length) rtrue; if (quality > match_length) { match_length = quality; number_matched = 0; } else { if (number_matched >= MATCH_LIST_WORDS) rtrue; for (i=0 : ii == obj) rtrue; } match_list-->number_matched++ = obj; #Ifdef DEBUG; if (parser_trace >= 6) print " Match added to list^"; #Endif; ! DEBUG ]; [ ConsultNounFilterToken obj; if (token_filter ofclass Routine) { noun = obj; return indirect(token_filter); } if (obj has (token_filter-1)) rtrue; rfalse; ]; Constant SCORE__CHOOSEOBJ = 1000; Constant SCORE__IFGOOD = 500; Constant SCORE__UNCONCEALED = 100; Constant SCORE__BESTLOC = 60; Constant SCORE__NEXTBESTLOC = 40; Constant SCORE__NOTCOMPASS = 20; Constant SCORE__NOTSCENERY = 10; Constant SCORE__NOTACTOR = 5; Constant SCORE__GNA = 1; Constant SCORE__DIVISOR = 20; Constant PREFER_HELD; [ ScoreMatchL context its_owner its_score obj i j threshold met a_s l_s; ! if (indef_type & OTHER_BIT ~= 0) threshold++; if (indef_type & MY_BIT ~= 0) threshold++; if (indef_type & THAT_BIT ~= 0) threshold++; if (indef_type & LIT_BIT ~= 0) threshold++; if (indef_type & UNLIT_BIT ~= 0) threshold++; if (indef_owner ~= nothing) threshold++; #Ifdef DEBUG; if (parser_trace >= 4) print " Scoring match list: indef mode ", indef_mode, " type ", indef_type, ", satisfying ", threshold, " requirements:^"; #Endif; ! DEBUG #ifdef PREFER_HELD; a_s = SCORE__BESTLOC; l_s = SCORE__NEXTBESTLOC; if (action_to_be == ##Take or ##Remove) { a_s = SCORE__NEXTBESTLOC; l_s = SCORE__BESTLOC; } context = context; ! silence warning #ifnot; a_s = SCORE__NEXTBESTLOC; l_s = SCORE__BESTLOC; if (context == HELD_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN) { a_s = SCORE__BESTLOC; l_s = SCORE__NEXTBESTLOC; } #endif; ! PREFER_HELD for (i=0 : ii; its_owner = parent(obj); its_score=0; met=0; ! if (indef_type & OTHER_BIT ~= 0 ! && obj ~= itobj or himobj or herobj) met++; if (indef_type & MY_BIT ~= 0 && its_owner == actor) met++; if (indef_type & THAT_BIT ~= 0 && its_owner == actors_location) met++; if (indef_type & LIT_BIT ~= 0 && obj has light) met++; if (indef_type & UNLIT_BIT ~= 0 && obj hasnt light) met++; if (indef_owner ~= 0 && its_owner == indef_owner) met++; if (met < threshold) { #Ifdef DEBUG; if (parser_trace >= 4) print " ", (The) match_list-->i, " (", match_list-->i, ") in ", (the) its_owner, " is rejected (doesn't match descriptors)^"; #Endif; ! DEBUG match_list-->i = -1; } else { its_score = 0; if (obj hasnt concealed) its_score = SCORE__UNCONCEALED; if (its_owner == actor) its_score = its_score + a_s; else if (its_owner == actors_location) its_score = its_score + l_s; else if (its_owner ~= compass) its_score = its_score + SCORE__NOTCOMPASS; its_score = its_score + SCORE__CHOOSEOBJ * ChooseObjects(obj, 2); if (obj hasnt scenery) its_score = its_score + SCORE__NOTSCENERY; if (obj ~= actor) its_score = its_score + SCORE__NOTACTOR; ! A small bonus for having the correct GNA, ! for sorting out ambiguous articles and the like. if (indef_cases & (PowersOfTwo_TB-->(GetGNAOfObject(obj)))) its_score = its_score + SCORE__GNA; match_scores-->i = match_scores-->i + its_score; #Ifdef DEBUG; if (parser_trace >= 4) print " ", (The) match_list-->i, " (", match_list-->i, ") in ", (the) its_owner, " : ", match_scores-->i, " points^"; #Endif; ! DEBUG } } for (i=0 : ii == -1) { if (i == number_matched-1) { number_matched--; break; } for (j=i : jj = match_list-->(j+1); match_scores-->j = match_scores-->(j+1); } number_matched--; } } ]; [ BestGuess earliest its_score best i; earliest = 0; best = -1; for (i=0 : ii >= 0) { its_score = match_scores-->i; if (its_score > best) { best = its_score; earliest = i; } } } #Ifdef DEBUG; if (parser_trace >= 4) if (best < 0) print " Best guess ran out of choices^"; else print " Best guess ", (the) match_list-->earliest, " (", match_list-->earliest, ")^"; #Endif; ! DEBUG if (best < 0) return -1; i = match_list-->earliest; match_list-->earliest = -1; return i; ]; [ SingleBestGuess earliest its_score best i; earliest = -1; best = -1000; for (i=0 : ii; if (its_score == best) earliest = -1; if (its_score > best) { best = its_score; earliest = match_list-->i; } } return earliest; ]; [ Identical o1 o2 p1 p2 n1 n2 i j flag; if (o1 == o2) rtrue; ! This should never happen, but to be on the safe side if (o1 == 0 || o2 == 0) rfalse; ! Similarly if (o1 ofclass K3_direction || o2 ofclass K3_direction) rfalse; ! Saves time ! What complicates things is that o1 or o2 might have a parsing routine, ! so the parser can't know from here whether they are or aren't the same. ! If they have different parsing routines, we simply assume they're ! different. If they have the same routine (which they probably got from ! a class definition) then the decision process is as follows: ! ! the routine is called (with self being o1, not that it matters) ! with noun and second being set to o1 and o2, and action being set ! to the fake action TheSame. If it returns -1, they are found ! identical; if -2, different; and if >=0, then the usual method ! is used instead. if (o1.parse_name ~= 0 || o2.parse_name ~= 0) { if (o1.parse_name ~= o2.parse_name) rfalse; parser_action = ##TheSame; parser_one = o1; parser_two = o2; j = wn; i = RunRoutines(o1,parse_name); wn = j; if (i == -1) rtrue; if (i == -2) rfalse; } ! This is the default algorithm: do they have the same words in their ! "name" (i.e. property no. 1) properties. (Note that the following allows ! for repeated words and words in different orders.) p1 = o1.&1; n1 = (o1.#1)/WORDSIZE; p2 = o2.&1; n2 = (o2.#1)/WORDSIZE; ! for (i=0 : ii, " "; } new_line; ! for (i=0 : ii, " "; } new_line; for (i=0 : ii == p2-->j) flag = 1; if (flag == 0) rfalse; } for (j=0 : ji == p2-->j) flag = 1; if (flag == 0) rfalse; } ! print "Which are identical!^"; rtrue; ]; [ PrintInferredCommand from singleton_noun; singleton_noun = FALSE; if ((from ~= 0) && (from == pcount-1) && (pattern-->from > 1) && (pattern-->from < REPARSE_CODE)) singleton_noun = TRUE; if (singleton_noun) { BeginActivity(CLARIFYING_PARSERS_CHOICE_ACT, pattern-->from); if (ForActivity(CLARIFYING_PARSERS_CHOICE_ACT, pattern-->from) == 0) { print "("; PrintCommand(from); print ")^"; } EndActivity(CLARIFYING_PARSERS_CHOICE_ACT, pattern-->from); } else { print "("; PrintCommand(from); print ")^"; } ]; [ PrintCommand from i k spacing_flag; if (from == 0) { i = verb_word; if (LanguageVerb(i) == 0) if (PrintVerb(i) == 0) print (address) i; from++; spacing_flag = true; } for (k=from : kk; if (i == PATTERN_NULL) continue; if (spacing_flag) print (char) ' '; if (i == 0) { print (string) THOSET__TX; jump TokenPrinted; } if (i == 1) { print (string) THAT__TX; jump TokenPrinted; } if (i >= REPARSE_CODE) print (address) VM_NumberToDictionaryAddress(i-REPARSE_CODE); else if (i ofclass K3_direction) print (LanguageDirection) i; ! the direction name as adverb else print (the) i; .TokenPrinted; spacing_flag = true; } ]; [ CantSee i w e; saved_oops=oops_from; if (scope_token ~= 0) { scope_error = scope_token; return ASKSCOPE_PE; } wn--; w = NextWord(); e = CANTSEE_PE; if (w == pronoun_word) { w = NextWordStopped(); wn--; if ((w == -1) || (line_token-->(pcount) ~= ENDIT_TOKEN)) { AnalyseToken(line_token-->(pcount-1)); !DebugToken(pcount-1); print " ", found_ttype, "^"; if (found_ttype == ROUTINE_FILTER_TT or ATTR_FILTER_TT) e = NOTINCONTEXT_PE; else { pronoun__word = pronoun_word; pronoun__obj = pronoun_obj; e = ITGONE_PE; } } } if (etype > e) return etype; return e; ]; [ MultiAdd o i j; i = multiple_object-->0; if (i == MATCH_LIST_WORDS-1) { toomany_flag = 1; rtrue; } for (j=1 : j<=i : j++) if (o == multiple_object-->j) rtrue; i++; multiple_object-->i = o; multiple_object-->0 = i; ]; [ MultiSub o i j k; i = multiple_object-->0; for (j=1 : j<=i : j++) if (o == multiple_object-->j) { for (k=j : k<=i : k++) multiple_object-->k = multiple_object-->(k+1); multiple_object-->0 = --i; return 0; } return VAGUE_PE; ]; [ MultiFilter attr i j o; .MFiltl; i = multiple_object-->0; for (j=1 : j<=i : j++) { o = multiple_object-->j; if (o hasnt attr) { MultiSub(o); jump Mfiltl; } } ]; [ PlaceInScope O opts; ! If opts is set, do not place contents in scope wn = match_from; if (opts == false) DoScopeActionAndRecurse(O); else DoScopeAction(O); return; ]; [ AddToScope obj; if (ats_flag >= 2) DoScopeActionAndRecurse(obj, 0, ats_flag-2); if (ats_flag == 1) { if (HasLightSource(obj)==1) ats_hls = 1; } ]; [ TestScope obj act a al sr x y; x = parser_one; y = parser_two; parser_one = obj; parser_two = 0; a = actor; al = actors_location; sr = scope_reason; scope_reason = TESTSCOPE_REASON; if (act == 0) actor = player; else actor = act; actors_location = ScopeCeiling(actor); SearchScope(actors_location, actor, 0); scope_reason = sr; actor = a; actors_location = al; parser_one = x; x = parser_two; parser_two = y; return x; ]; [ LoopOverScope routine act x y a al; x = parser_one; y = scope_reason; a = actor; al = actors_location; parser_one = routine; if (act == 0) actor = player; else actor = act; actors_location = ScopeCeiling(actor); scope_reason = LOOPOVERSCOPE_REASON; SearchScope(actors_location, actor, 0); parser_one = x; scope_reason = y; actor = a; actors_location = al; ]; [ SearchScope domain1 domain2 context i; if (domain1 == 0) return; ! (a) if (scope_token) { scope_stage = 2; #Ifdef DEBUG; if (parser_trace >= 3) print " [Scope routine called at stage 2]^"; #Endif; if (indirect(scope_token) ~= 0) rtrue; } ! (b) BeginActivity(DECIDING_SCOPE_ACT, actor); if (ForActivity(DECIDING_SCOPE_ACT, actor) == false) { ! (c.1) if ((scope_reason == PARSING_REASON) && (context == MULTIINSIDE_TOKEN) && (advance_warning ~= -1)) { if (IsSeeThrough(advance_warning) == 1) ScopeWithin(advance_warning, 0, context); } else { ! (c.2) if ((scope_reason == PARSING_REASON) && (context ~= CREATURE_TOKEN) && (indef_mode == 0) && (domain1 == actors_location)) ScopeWithin(compass); ! (c.3) if (domain1 has supporter or container) DoScopeAction(domain1); ScopeWithin(domain1, domain2, context); ! (c.4) if (domain2) { if (domain2 has supporter or container) DoScopeAction(domain2); ScopeWithin(domain2, 0, context); } } ! (c.5) if (thedark == domain1 or domain2) { DoScopeActionAndRecurse(actor, actor, context); if (parent(actor) has supporter or container) DoScopeActionAndRecurse(parent(actor), parent(actor), context); } } EndActivity(DECIDING_SCOPE_ACT, actor); ]; [ ScopeWithin domain nosearch context obj next_obj; if (domain == 0) rtrue; ! Look through the objects in the domain, avoiding "objectloop" in case ! movements occur. obj = child(domain); while (obj) { next_obj = sibling(obj); if ((domain == actor) || (TestConcealment(domain, obj) == false)) DoScopeActionAndRecurse(obj, nosearch, context); obj = next_obj; } ]; [ DoScopeActionAndRecurse domain nosearch context i ad n obj next_obj; DoScopeAction(domain); ! (a) if ((domain ~= nosearch) && ((domain ofclass K1_room or K8_person) || (IsSeeThrough(domain) == 1))) { obj = child(domain); while (obj) { next_obj = sibling(obj); if ((domain == actor) || (TestConcealment(domain, obj) == false)) DoScopeActionAndRecurse(obj, nosearch, context); obj = next_obj; } } ! (b) if (domain provides component_child) { obj = domain.component_child; while (obj) { next_obj = obj.component_sibling; if ((domain == actor) || (TestConcealment(domain, obj) == false)) DoScopeActionAndRecurse(obj, 0, context); obj = next_obj; } } ! (c) ad = domain.&add_to_scope; if (ad ~= 0) { ! Test if the property value is not an object. #Ifdef TARGET_ZCODE; i = (UnsignedCompare(ad-->0, top_object) > 0); #Ifnot; ! TARGET_GLULX i = (((ad-->0)->0) ~= $70); #Endif; ! TARGET_ if (i) { ats_flag = 2+context; RunRoutines(domain, add_to_scope); ats_flag = 0; } else { n = domain.#add_to_scope; for (i=0 : (WORDSIZE*i)i) DoScopeActionAndRecurse(ad-->i, 0, context); } } ]; [ DoScopeAction item; #Ifdef DEBUG; if (parser_trace >= 6) print "[DSA on ", (the) item, " with reason = ", scope_reason, " p1 = ", parser_one, " p2 = ", parser_two, "]^"; #Endif; ! DEBUG @push parser_one; @push scope_reason; switch(scope_reason) { TESTSCOPE_REASON: if (item == parser_one) parser_two = 1; LOOPOVERSCOPE_REASON: if (parser_one ofclass Routine) indirect(parser_one, item); PARSING_REASON, TALKING_REASON: MatchTextAgainstObject(item); } @pull scope_reason; @pull parser_one; ]; [ MatchTextAgainstObject item i; if (match_from <= num_words) { ! If there's any text to match, that is wn = match_from; i = NounWord(); if ((i == 1) && (player == item)) MakeMatch(item, 1); ! "me" if ((i >= 2) && (i < 128) && (LanguagePronouns-->i == item)) MakeMatch(item, 1); } ! Construing the current word as the start of a noun, can it refer to the ! object? wn = match_from; if (TryGivenObject(item) > 0) if (indef_nspec_at > 0 && match_from ~= indef_nspec_at) { ! This case arises if the player has typed a number in ! which is hypothetically an indefinite descriptor: ! e.g. "take two clubs". We have just checked the object ! against the word "clubs", in the hope of eventually finding ! two such objects. But we also backtrack and check it ! against the words "two clubs", in case it turns out to ! be the 2 of Clubs from a pack of cards, say. If it does ! match against "two clubs", we tear up our original ! assumption about the meaning of "two" and lapse back into ! definite mode. wn = indef_nspec_at; if (TryGivenObject(item) > 0) { match_from = indef_nspec_at; ResetDescriptors(); } wn = match_from; } ]; [ TryGivenObject obj nomatch threshold k w j; #Ifdef DEBUG; if (parser_trace >= 5) print " Trying ", (the) obj, " (", obj, ") at word ", wn, "^"; #Endif; ! DEBUG if (nomatch && obj == 0) return 0; ! if (nomatch) print "*** TryGivenObject *** on ", (the) obj, " at wn = ", wn, "^"; dict_flags_of_noun = 0; ! If input has run out then always match, with only quality 0 (this saves ! time). if (wn > num_words) { if (nomatch) return 0; if (indef_mode ~= 0) dict_flags_of_noun = $$01110000; ! Reject "plural" bit MakeMatch(obj,0); #Ifdef DEBUG; if (parser_trace >= 5) print " Matched (0)^"; #Endif; ! DEBUG return 1; } ! Ask the object to parse itself if necessary, sitting up and taking notice ! if it says the plural was used: if (obj.parse_name~=0) { parser_action = NULL; j=wn; k = RunRoutines(obj,parse_name); if (k > 0) { wn=j+k; .MMbyPN; if (parser_action == ##PluralFound) dict_flags_of_noun = dict_flags_of_noun | 4; if (dict_flags_of_noun & 4) { if (~~allow_plurals) k = 0; else { if (indef_mode == 0) { indef_mode = 1; indef_type = 0; indef_wanted = 0; } indef_type = indef_type | PLURAL_BIT; if (indef_wanted == 0) indef_wanted = INDEF_ALL_WANTED; } } #Ifdef DEBUG; if (parser_trace >= 5) print " Matched (", k, ")^"; #Endif; ! DEBUG if (nomatch == false) MakeMatch(obj,k); return k; } if (k == 0) jump NoWordsMatch; } ! The default algorithm is simply to count up how many words pass the ! Refers test: parser_action = NULL; w = NounWord(); if (w == 1 && player == obj) { k=1; jump MMbyPN; } if (w >= 2 && w < 128 && (LanguagePronouns-->w == obj)) { k = 1; jump MMbyPN; } if (Refers(obj, wn-1) == 0) { .NoWordsMatch; if (indef_mode ~= 0) { k = 0; parser_action = NULL; jump MMbyPN; } rfalse; } threshold = 1; dict_flags_of_noun = (w->#dict_par1) & $$01110100; w = NextWord(); while (Refers(obj, wn-1)) { threshold++; if (w) dict_flags_of_noun = dict_flags_of_noun | ((w->#dict_par1) & $$01110100); w = NextWord(); } k = threshold; jump MMbyPN; ]; [ Refers obj wnum wd k l m; if (obj == 0) rfalse; #Ifdef LanguageRefers; k = LanguageRefers(obj,wnum); if (k >= 0) return k; #Endif; ! LanguageRefers k = wn; wn = wnum; wd = NextWordStopped(); wn = k; if (parser_inflection >= 256) { k = indirect(parser_inflection, obj, wd); if (k >= 0) return k; m = -k; } else m = parser_inflection; k = obj.&m; l = (obj.#m)/WORDSIZE-1; for (m=0 : m<=l : m++) if (wd == k-->m) rtrue; rfalse; ]; [ WordInProperty wd obj prop k l m; k = obj.∝ l = (obj.#prop)/WORDSIZE-1; for (m=0 : m<=l : m++) if (wd == k-->m) rtrue; rfalse; ]; [ NounWord i j s; i = NextWord(); if (i == 0) rfalse; if (i == ME1__WD or ME2__WD or ME3__WD) return 1; s = LanguagePronouns-->0; for (j=1 : j<=s : j=j+3) if (i == LanguagePronouns-->j) return j+2; if ((i->#dict_par1)&128 == 0) rfalse; return i; ]; [ TryNumber wordnum i j c num len mul tot d digit; i = wn; wn = wordnum; j = NextWord(); wn = i; j = NumberWord(j); ! Test for verbal forms ONE to TWENTY if (j >= 1) return j; #Ifdef TARGET_ZCODE; i = wordnum*4+1; j = parse->i; num = j+buffer; len = parse->(i-1); #Ifnot; ! TARGET_GLULX i = wordnum*3; j = parse-->i; num = j+buffer; len = parse-->(i-1); #Endif; ! TARGET_ if (len >= 4) mul=1000; if (len == 3) mul=100; if (len == 2) mul=10; if (len == 1) mul=1; tot = 0; c = 0; len = len-1; for (c=0 : c<=len : c++) { digit=num->c; if (digit == '0') { d = 0; jump digok; } if (digit == '1') { d = 1; jump digok; } if (digit == '2') { d = 2; jump digok; } if (digit == '3') { d = 3; jump digok; } if (digit == '4') { d = 4; jump digok; } if (digit == '5') { d = 5; jump digok; } if (digit == '6') { d = 6; jump digok; } if (digit == '7') { d = 7; jump digok; } if (digit == '8') { d = 8; jump digok; } if (digit == '9') { d = 9; jump digok; } return -1000; .digok; tot = tot+mul*d; mul = mul/10; } if (len > 3) tot=10000; return tot; ]; [ I7_ExtendedTryNumber wordnum i j; i = wn; wn = wordnum; j = NextWordStopped(); wn = i; switch (j) { 'twenty-one': return 21; 'twenty-two': return 22; 'twenty-three': return 23; 'twenty-four': return 24; 'twenty-five': return 25; 'twenty-six': return 26; 'twenty-seven': return 27; 'twenty-eight': return 28; 'twenty-nine': return 29; 'thirty': return 30; default: return TryNumber(wordnum); } ]; [ GetGender person; if (person hasnt female) rtrue; rfalse; ]; [ GetGNAOfObject obj case gender; if (obj hasnt animate) case = 6; if (obj has male) gender = male; if (obj has female) gender = female; if (obj has neuter) gender = neuter; if (gender == 0) { if (case == 0) gender = LanguageAnimateGender; else gender = LanguageInanimateGender; } if (gender == female) case = case + 1; if (gender == neuter) case = case + 2; if (obj has pluralname) case = case + 3; return case; ]; [ DetectPluralWord at n i w swn outcome; swn = wn; wn = at; for (i=0:i#dict_par1) & $$00000100) { parser_action = ##PluralFound; outcome = true; } } wn = swn; return outcome; ]; [ SetPronoun dword value x; for (x=1 : x<=LanguagePronouns-->0 : x=x+3) if (LanguagePronouns-->x == dword) { LanguagePronouns-->(x+2) = value; return; } RunTimeError(14); ]; [ PronounValue dword x; for (x=1 : x<=LanguagePronouns-->0 : x=x+3) if (LanguagePronouns-->x == dword) return LanguagePronouns-->(x+2); return 0; ]; [ ResetVagueWords obj; PronounNotice(obj); ]; [ PronounNotice obj x bm; if (obj == player) return; bm = PowersOfTwo_TB-->(GetGNAOfObject(obj)); for (x=1 : x<=LanguagePronouns-->0 : x=x+3) if (bm & (LanguagePronouns-->(x+1)) ~= 0) LanguagePronouns-->(x+2) = obj; ]; [ PronounNoticeHeldObjects x; #IFNDEF MANUAL_PRONOUNS; objectloop(x in player) PronounNotice(x); #ENDIF; x = 0; ! To prevent a "not used" error rfalse; ]; [ YesOrNo i j; for (::) { #Ifdef TARGET_ZCODE; if (location == nothing || parent(player) == nothing) read buffer parse; else read buffer parse DrawStatusLine; j = parse->1; #Ifnot; ! TARGET_GLULX; KeyboardPrimitive(buffer, parse); j = parse-->0; #Endif; ! TARGET_ if (j) { ! at least one word entered i = parse-->1; if (i == YES1__WD or YES2__WD or YES3__WD) rtrue; if (i == NO1__WD or NO2__WD or NO3__WD) rfalse; } L__M(##Quit, 1); print "> "; } ]; [ NumberWord o i n; n = LanguageNumbers-->0; for (i=1 : i<=n : i=i+2) if (o == LanguageNumbers-->i) return LanguageNumbers-->(i+1); return 0; ]; !Constant COBJ_DEBUG; ! the highest value returned by CheckDPMR (see the Standard Rules) Constant HIGHEST_DPMR_SCORE = 4; Array alt_match_list --> (MATCH_LIST_WORDS+1); #ifdef TARGET_GLULX; [ COBJ__Copy words from to i; for (i=0: ii = from-->i; ]; #ifnot; [ COBJ__Copy words from to bytes; bytes = words * 2; @copy_table from to bytes; ]; #endif; ! swap alt_match_list with match_list/number_matched [ COBJ__SwapMatches i x; ! swap the counts x = number_matched; number_matched = alt_match_list-->0; alt_match_list-->0 = x; ! swap the values if (x < number_matched) x = number_matched; for (i=x: i>0: i--) { x = match_list-->(i-1); match_list-->(i-1) = alt_match_list-->i; alt_match_list-->i = x; } ]; [ ChooseObjects obj code l i swn spcount; if (code<2) rfalse; if (cobj_flag == 1) { .CodeOne; if (parameters > 0) { #ifdef COBJ_DEBUG; print "[scoring ", (the) obj, " (second)]^"; #endif; return ScoreDabCombo(parser_results-->INP1_PRES, obj); } else { #ifdef COBJ_DEBUG; print "[scoring ", (the) obj, " (first) in ", alt_match_list-->0, " combinations]^"; #endif; l = 0; for (i=1: i<=alt_match_list-->0: i++) { spcount = ScoreDabCombo(obj, alt_match_list-->i); if (spcount == HIGHEST_DPMR_SCORE) { #ifdef COBJ_DEBUG; print "[scored ", spcount, " - best possible]^"; #endif; return spcount; } if (spcount>l) l = spcount; } return l; } } if (cobj_flag == 2) { .CodeTwo; #ifdef COBJ_DEBUG; print "[scoring ", (the) obj, " (simple); parameters = ", parameters, " aw = ", advance_warning, "]^"; #endif; @push action_to_be; if (parameters==0) { if (advance_warning > 0) l = ScoreDabCombo(obj, advance_warning); else l = ScoreDabCombo(obj, 0); } else { l = ScoreDabCombo(parser_results-->INP1_PRES, obj); } @pull action_to_be; return l; } #ifdef COBJ_DEBUG; print "[choosing a cobj strategy: "; #endif; swn = wn; spcount = pcount; while (line_ttype-->pcount == PREPOSITION_TT) pcount++; if (line_ttype-->pcount == ELEMENTARY_TT) { while (wn <= num_words) { l = NextWordStopped(); wn--; if ( (l ~= -1 or 0) && (l->#dict_par1) &8 ) { wn++; continue; } ! if preposition if (l == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { wn++; continue; } SafeSkipDescriptors(); ! save the current match state @push match_length; @push token_filter; @push match_from; alt_match_list-->0 = number_matched; COBJ__Copy(number_matched, match_list, alt_match_list+WORDSIZE); ! now get all the matches for the second noun match_length = 0; number_matched = 0; match_from = wn; token_filter = 0; SearchScope(actor, actors_location, line_tdata-->pcount); #ifdef COBJ_DEBUG; print number_matched, " possible second nouns]^"; #endif; wn = swn; cobj_flag = 1; ! restore match variables COBJ__SwapMatches(); @pull match_from; @pull token_filter; @pull match_length; pcount = spcount; jump CodeOne; } } pcount = spcount; wn = swn; #ifdef COBJ_DEBUG; print "nothing interesting]^"; #endif; cobj_flag = 2; jump CodeTwo; ]; [ ScoreDabCombo a b result; @push action; @push act_requester; @push noun; @push second; action = action_to_be; act_requester = player; if (action_reversed) { noun = b; second = a; } else { noun = a; second = b; } result = CheckDPMR(); @pull second; @pull noun; @pull act_requester; @pull action; #ifdef COBJ_DEBUG; print "[", (the) a, " / ", (the) b, " => ", result, "]^"; #endif; return result; ]; [ DefaultTopic; return GPR_FAIL; ]; [ ParserError error_type; if (error_type ofclass String or Routine) PrintSingleParagraph(error_type); rfalse; ]; Object InformLibrary "(Inform Library)" has proper; Array Protect_I7_Arrays --> 16339 12345; Global EarlyInTurnSequence; [ Main; #ifdef TARGET_ZCODE; max_z_object = #largest_object - 255; #endif; ProcessRulebook(STARTUP_RB); #ifdef DEBUG; InternalTestCases(); #endif; while (true) { while (deadflag == false) { EarlyInTurnSequence = true; action = ##Wait; meta = false; noun = nothing; second = nothing; actor = player; FollowRulebook(TURN_SEQUENCE_RB); } if (FollowRulebook(SHUTDOWN_RB) == false) return; } ]; [ VIRTUAL_MACHINE_STARTUP_R; ProcessRulebook(Activity_before_rulebooks-->STARTING_VIRTUAL_MACHINE_ACT); ProcessRulebook(Activity_for_rulebooks-->STARTING_VIRTUAL_MACHINE_ACT); ProcessRulebook(Activity_after_rulebooks-->STARTING_VIRTUAL_MACHINE_ACT); VM_Initialise(); print "^^^"; rfalse; ]; Constant PLAYER_OBJECT_INIS = 0; Constant START_OBJECT_INIS = 1; Constant START_ROOM_INIS = 2; Constant START_TIME_INIS = 3; Constant DONE_INIS = 4; Array InitialSituation --> selfobj I375_entrance_hall I375_entrance_hall 540 0; [ INITIALISE_MEMORY_R; #ifdef TARGET_GLULX; VM_PreInitialise(); #Endif; #Ifdef LanguageInitialise; LanguageInitialise(); #Endif; not_yet_in_play = true; #ifdef I7_LOOKMODE; lookmode = I7_LOOKMODE; #endif; player = InitialSituation-->PLAYER_OBJECT_INIS; the_time = InitialSituation-->START_TIME_INIS; real_location = nothing; location = nothing; CreatePropertyOffsets(); HeapInitialise(); ! Create a completely unused memory allocation heap InitialHeapAllocation(); ! Allocate empty blocks for variables, properties, and such CreateBlockConstants(); ! Allocate and fill in blocks for constant values DistributeBlockConstants(); ! Ensure these exist in multiple independent copies when needed CreateDynamicRelations(); ! Create relation structures on the heap rfalse; ]; [ SEED_RANDOM_NUMBER_GENERATOR_R i; if (0) VM_Seed_RNG(0); for (i=1: i<=100: i++) random(i); rfalse; ]; [ POSITION_PLAYER_IN_MODEL_R player_to_be; player = selfobj; player_to_be = InitialSituation-->PLAYER_OBJECT_INIS; location = LocationOf(player_to_be); if (location == 0) { location = InitialSituation-->START_ROOM_INIS; if (InitialSituation-->START_OBJECT_INIS) move player_to_be to InitialSituation-->START_OBJECT_INIS; else move player_to_be to location; } if (player_to_be ~= player) { remove selfobj; ChangePlayer(player_to_be); } real_location = location; SilentlyConsiderLight(); NOTE_OBJECT_ACQUISITIONS_R(); MoveFloatingObjects(); actor = player; act_requester = nothing; actors_location = real_location; action = ##Wait; InitialSituation-->DONE_INIS = true; rfalse; ]; Constant ACTION_PRES = 0; Constant NO_INPS_PRES = 1; Constant INP1_PRES = 2; Constant INP2_PRES = 3; ! Parser.i6t code assumes this is INP1_PRES + 1 [ PARSE_COMMAND_R; if (EarlyInTurnSequence == false) rfalse; ! Prevent use outside top level not_yet_in_play = false; Parser__parse(); TreatParserResults(); rfalse; ]; [ TreatParserResults; if (parser_results-->ACTION_PRES == ##MistakeAction) meta = true; if (parser_results-->ACTION_PRES == ##Tell && parser_results-->INP1_PRES == player && actor ~= player) { parser_results-->ACTION_PRES = ##Ask; parser_results-->INP1_PRES = actor; actor = player; } ]; [ GENERATE_ACTION_R i j k l; if (EarlyInTurnSequence == false) rfalse; ! Prevent use outside top level EarlyInTurnSequence = false; action = parser_results-->ACTION_PRES; act_requester = nothing; if (actor ~= player) act_requester = player; inp1 = 0; inp2 = 0; multiflag = false; if (parser_results-->NO_INPS_PRES >= 1) { inp1 = parser_results-->INP1_PRES; if (inp1 == 0) multiflag = true; } if (parser_results-->NO_INPS_PRES >= 2) { inp2 = parser_results-->INP2_PRES; if (inp2 == 0) multiflag = true; } if (inp1 == 1) { noun = nothing; ! noun = special_number1; } else noun = inp1; if (inp2 == 1) { second = nothing; ! if (inp1 == 1) second = special_number2; else second = special_number1; } else second = inp2; if (multiflag) { if (multiple_object-->0 == 0) { L__M(##Miscellany, 2); return; } if (toomany_flag) { toomany_flag = false; L__M(##Miscellany, 1); } GenerateMultipleActions(); multiflag = false; } else BeginAction(action, noun, second); if ((actor ~= player) || (act_requester)) action = ##Wait; actor = player; act_requester = 0; if (meta) { RulebookSucceeds(); rtrue; } rfalse; ]; [ GenerateMultipleActions initial_location k item; initial_location = location; for (k=1: k<=multiple_object-->0: k++) { item = multiple_object-->k; RunParagraphOn(); if (inp1 == 0) { inp1 = item; BeginAction(action, item, second, item); inp1 = 0; } else { inp2 = item; BeginAction(action, noun, item, item); inp2 = 0; } if (deadflag) return; if (location ~= initial_location) { L__M(##Miscellany, 51); return; } } ]; [ TIMED_EVENTS_R i event_timer fire rule; for (i=1: i<=(TimedEventsTable-->0): i++) if ((rule=TimedEventsTable-->i) ~= 0) { event_timer = TimedEventTimesTable-->i; fire = false; if (event_timer<0) { (TimedEventTimesTable-->i)++; if (TimedEventTimesTable-->i == 0) fire = true; } else { if ((the_time >= event_timer) && (the_time < event_timer+30)) fire = true; } if (fire) { TimedEventsTable-->i = 0; ProcessRulebook(rule); } } rfalse; ]; [ SetTimedEvent rule event_time absolute_time i b; for (i=1: i<=(TimedEventsTable-->0): i++) { if (rule == TimedEventsTable-->i) { b=i; break; } if ((b==0) && (TimedEventsTable-->i == 0)) b=i; } if (b==0) return RunTimeProblem(RTP_TOOMANYEVENTS); TimedEventsTable-->b = rule; if (absolute_time) TimedEventTimesTable-->b = event_time; else TimedEventTimesTable-->b = -event_time; ]; Global time_step; [ SetTime t s; the_time = t; time_rate = s; time_step = 0; if (s < 0) time_step = 0-s; ]; [ ADVANCE_TIME_R; turns++; if (the_time ~= NULL) { if (time_rate >= 0) the_time = the_time+time_rate; else { time_step--; if (time_step == 0) { the_time++; time_step = -time_rate; } } the_time = the_time % TWENTY_FOUR_HOURS; } rfalse; ]; [ NOTE_OBJECT_ACQUISITIONS_R obj; objectloop (obj in player) give obj moved; objectloop (obj has concealed) if (IndirectlyContains(player, obj)) give obj ~concealed; #Ifdef RUCKSACK_CLASS; objectloop (obj in player) if (obj ofclass RUCKSACK_CLASS) SACK_OBJECT = obj; objectloop (obj ofclass RUCKSACK_CLASS && obj provides component_parent && obj.component_parent == player) SACK_OBJECT = obj; #Endif; rfalse; ]; [ RESURRECT_PLAYER_IF_ASKED_R; if (resurrect_please) { RulebookSucceeds(); resurrect_please = false; deadflag = 0; story_complete = false; rtrue; } rfalse; ]; [ ASK_FINAL_QUESTION_R; print "^"; while (true) { CarryOutActivity(DEALING_WITH_FINAL_QUESTION_ACT); DivideParagraphPoint(); } ]; [ READ_FINAL_ANSWER_R; DrawStatusLine(); KeyboardPrimitive(buffer, parse); players_command = 100 + WordCount(); num_words = WordCount(); wn = 1; rfalse; ]; [ IMMEDIATELY_RESTART_VM_R; @restart; ]; [ IMMEDIATELY_RESTORE_SAVED_R; actor = player; RESTORE_THE_GAME_R(); ]; [ IMMEDIATELY_QUIT_R; @quit; ]; [ IMMEDIATELY_UNDO_R; if (not_yet_in_play == false) turns++; Perform_Undo(); if (not_yet_in_play == false) turns--; ]; [ PRINT_OBITUARY_HEADLINE_R; print "^^ "; VM_Style(ALERT_VMSTY); print "***"; if (deadflag == 1) L__M(##Miscellany, 3); if (deadflag == 2) L__M(##Miscellany, 4); if (deadflag == 3) L__M(##Miscellany, 75); if (deadflag ~= 0 or 1 or 2 or 3) { print " "; if (deadflag ofclass Routine) (deadflag)(); if (deadflag ofclass String) print (string) deadflag; print " "; } print "***"; VM_Style(NORMAL_VMSTY); print "^^"; #Ifndef NO_SCORE; print "^"; #Endif; rfalse; ]; [ PRINT_FINAL_SCORE_R; #Ifndef NO_SCORING; ANNOUNCE_SCORE_R(); #Endif; rfalse; ]; [ DISPLAY_FINAL_STATUS_LINE_R; sline1 = score; sline2 = turns; rfalse; ]; Constant p3_printed_name = short_name; Constant p4_printed_plural_name = plural; Constant p5_indefinite_article = article; Constant p6_description = description; Constant p7_map_region = map_region; Constant p8_initial_appearance = initial; Constant p10_other_side = door_to; Constant p11_carrying_capacity = capacity; Constant p12_matching_key = with_key; Constant p63_plural_named = pluralname; Constant p65_proper_named = proper; Constant p67_privately_named = privately_named; Constant p69_lighted = light; Constant p71_visited = visited; Constant p73_lit = light; Constant p75_edible = edible; Constant p77_fixed_in_place = static; Constant p79_scenery = scenery; Constant p80_wearable = clothing; Constant p81_pushable_between_rooms = pushable; Constant p82_handled = moved; Constant p84_undescribed = concealed; Constant p85_marked_for_listing = workflag; Constant p87_mentioned = mentioned; Constant p89_enterable = enterable; Constant p91_transparent = transparent; Constant p92_open = open; Constant p94_openable = openable; Constant p96_lockable = lockable; Constant p97_locked = locked; Constant p99_female = female; Constant p101_neuter = neuter; Constant p102_switched_on = on; Constant p253 = worn; Constant p254 = vector; Constant p255 = room_index; Constant p256 = door_dir; Constant p257 = door_to; Constant p258 = absent; Constant p259 = found_in; Constant p260 = list_together; Constant p261 = cap_short_name; Constant p262 = mark_as_room; Constant p263 = mark_as_thing; Constant p264 = component_parent; Constant p265 = component_child; Constant p266 = component_sibling; Constant p267 = regional_found_in; Constant p268 = IK1_Count; Constant p269 = IK1_Link; Constant p270 = IK2_Count; Constant p271 = IK2_Link; Constant p272 = IK3_Count; Constant p273 = IK3_Link; Constant p274 = IK4_Count; Constant p275 = IK4_Link; Constant p276 = IK5_Count; Constant p277 = IK5_Link; Constant p278 = IK6_Count; Constant p279 = IK6_Link; Constant p280 = IK7_Count; Constant p281 = IK7_Link; Constant p282 = IK8_Count; Constant p283 = IK8_Link; Constant p284 = IK9_Count; Constant p285 = IK9_Link; Constant p286 = IK10_Count; Constant p287 = IK10_Link; Constant p288 = IK11_Count; Constant p289 = IK11_Link; Constant p290 = IK12_Count; Constant p291 = IK12_Link; Constant p292 = IK13_Count; Constant p293 = IK13_Link; Constant p294 = IK14_Count; Constant p295 = IK14_Link; Constant p296 = IK15_Count; Constant p297 = IK15_Link; Constant p298 = IK16_Count; Constant p299 = IK16_Link; Constant p300 = IK17_Count; Constant p301 = IK17_Link; Constant p302 = IK18_Count; Constant p303 = IK18_Link; Constant p304 = IK19_Count; Constant p305 = IK19_Link; Constant p306 = IK20_Count; Constant p307 = IK20_Link; Constant p308 = IK21_Count; Constant p309 = IK21_Link; Constant p310 = IK22_Count; Constant p311 = IK22_Link; Constant p312 = IK23_Count; Constant p313 = IK23_Link; Constant p314 = IK24_Count; Constant p315 = IK24_Link; Constant p316 = IK25_Count; Constant p317 = IK25_Link; Constant p318 = IK26_Count; Constant p319 = IK26_Link; Constant p320 = IK27_Count; Constant p321 = IK27_Link; Constant p322 = IK28_Count; Constant p323 = IK28_Link; Constant p324 = IK29_Count; Constant p325 = IK29_Link; Constant p326 = IK30_Count; Constant p327 = IK30_Link; Constant p328 = IK31_Count; Constant p329 = IK31_Link; Constant p330 = IK32_Count; Constant p331 = IK32_Link; Constant p332 = IK33_Count; Constant p333 = IK33_Link; Constant p334 = IK34_Count; Constant p335 = IK34_Link; Constant p336 = IK35_Count; Constant p337 = IK35_Link; Constant p338 = IK36_Count; Constant p339 = IK36_Link; Constant p340 = IK37_Count; Constant p341 = IK37_Link; Constant p342 = IK38_Count; Constant p343 = IK38_Link; Constant p344 = IK39_Count; Constant p345 = IK39_Link; Constant p346 = IK40_Count; Constant p347 = IK40_Link; Constant p348 = IK41_Count; Constant p349 = IK41_Link; Constant p350 = IK42_Count; Constant p351 = IK42_Link; Constant p352 = IK43_Count; Constant p353 = IK43_Link; Constant p354 = IK44_Count; Constant p355 = IK44_Link; Constant p356 = IK45_Count; Constant p357 = IK45_Link; Constant p358 = IK46_Count; Constant p359 = IK46_Link; Constant p360 = IK47_Count; Constant p361 = IK47_Link; Constant p362 = IK48_Count; Constant p363 = IK48_Link; Constant p364 = IK49_Count; Constant p365 = IK49_Link; Constant p366 = IK50_Count; Constant p367 = IK50_Link; Constant p368 = IK51_Count; Constant p369 = IK51_Link; Constant p370 = IK52_Count; Constant p371 = IK52_Link; Constant p372 = IK53_Count; Constant p373 = IK53_Link; Constant p374 = KD_Count; Constant p375 = name; Constant p376 = parse_name; Constant p377 = action_bitmap; Attribute p106_seen; Attribute p108_familiar; Attribute p114_ambiguously_plural; Attribute p116_readied; Attribute p118_at_parry; Attribute p120_at_dodge; Attribute p122_cardinal; Attribute p124_placed; Attribute p127_connectable; Attribute p129_connection_inviting; Attribute p131_placeable; Constant FBNA_PROP_NUMBER = p104_recurring; Object property_numberspace_forcer with p104_recurring false with p133_habitable false with p135_treasurable false with p137_extra_accepting false with p139_nogo false with p143_consecrated false with p145_digging_tool false with p147_collapsing_tool false with p149_emotionless false with p151_non_attacker false with p152_weapon_user false with p155_granted false with p158_flyer false with p160_blinded false with p162_eyeless false with p164_spontaneous_teleporter false with p166_teleportable false with p168_teleport_impossible_awa false with p170_follower false with p172_ranged false with p174_armour_stoppable false with p181_risky false with p183_aite_loved false with p185_flaming false with p187_cooler false with p189_rusted false with p191_rust_spored false with p193_rust_spored_candidate false with p195_rust_releasing false with p197_death_blessed false with p199_death_cursed false with p202_hidden false with p204_on_the_lookout false with p206_unnaturally_aware false with p208_unnaturally_aware_follo false with p210_smoke_attuned false with p212_ethereal false with p215_actual false with p220_corruptible false with p222_cursed false with p224_curse_identified false with p226_cautious false with p228_enraged false with p230_patient false with p232_greedy false with p234_at_stun false with p236_sometime_stunned false with p239_tentacle_confused false with p240_barkskinned false with p243_hexed false with p245_smoke_demoned false with p247_retreater false with p249_initiative_conferring false with p251_runner false ; Array property_metadata --> ! offset 0: property p0_specification "specification" NULL ! offset 2: property p1_indefinite_appearance_tex "indefinite appearance text" NULL ! offset 4: property p2_variable_initial_value "variable initial value" K1_room K2_thing K3_direction K9_region NULL ! offset 10: property short_name "printed name" K1_room K2_thing K3_direction K9_region NULL ! offset 16: property plural "printed plural name" K1_room K2_thing K3_direction K9_region NULL ! offset 22: property article "indefinite article" K1_room K2_thing K3_direction K9_region NULL ! offset 28: property description "description" K1_room K2_thing NULL ! offset 32: property map_region "map region" K1_room NULL ! offset 35: property initial "initial appearance" K2_thing NULL ! offset 38: property p9_opposite "opposite" K3_direction NULL ! offset 41: property door_to "other side" K4_door NULL ! offset 44: property capacity "carrying capacity" K5_container K6_supporter K8_person NULL ! offset 49: property with_key "matching key" K2_thing K4_door K5_container NULL ! offset 54: property p13_disambiguation_id "disambiguation id" K2_thing K12_animal NULL ! offset 58: property p14_health "health" K8_person NULL ! offset 61: property p15_initiative "initiative" K8_person NULL ! offset 64: property p16_ai_rules "ai rules" K8_person NULL ! offset 67: property p17_permanent_health "permanent health" K8_person NULL ! offset 70: property p18_melee "melee" K8_person NULL ! offset 73: property p19_defence "defence" K8_person NULL ! offset 76: property p20_damage_die "damage die" K17_weapon NULL ! offset 79: property p21_weapon_damage_bonus "weapon damage bonus" K17_weapon NULL ! offset 82: property p22_dodgability "dodgability" K17_weapon NULL ! offset 85: property p23_passive_parry_max "passive parry max" K17_weapon NULL ! offset 88: property p24_active_parry_max "active parry max" K17_weapon NULL ! offset 91: property p25_weapon_attack_bonus "weapon attack bonus" K17_weapon NULL ! offset 94: property p26_concentration "concentration" K8_person NULL ! offset 97: property p27_difficulty_level "difficulty level" K1_room K2_thing K3_direction K9_region NULL ! offset 103: property p28_x_coordinate "x-coordinate" K1_room NULL ! offset 106: property p29_y_coordinate "y-coordinate" K1_room NULL ! offset 109: property p30_z_coordinate "z-coordinate" K1_room NULL ! offset 112: property p31_level "level" K8_person NULL ! offset 115: property p32_group_level "group level" K8_person NULL ! offset 118: property p33_perception "perception" K8_person NULL ! offset 121: property p34_dexterity "dexterity" K8_person NULL ! offset 124: property p35_willpower "willpower" K8_person NULL ! offset 127: property p36_inherent_damage_modifier "inherent damage modifier" K8_person NULL ! offset 130: property p37_special_weapon_info "special weapon info" K17_weapon NULL ! offset 133: property p38_power_level "power level" K21_power NULL ! offset 136: property p39_command_text "command text" K21_power NULL ! offset 139: property p40_heal_power "heal power" K8_person NULL ! offset 142: property p41_heal_cooldown "heal cooldown" K8_person NULL ! offset 145: property p42_current_heal_cooldown "current heal cooldown" K8_person NULL ! offset 148: property p43_teleport_amount "teleport amount" K8_person NULL ! offset 151: property p44_teleport_eagerness "teleport eagerness" K8_person NULL ! offset 154: property p45_disintegrate_power "disintegrate power" K8_person NULL ! offset 157: property p46_disintegrate_cooldown "disintegrate cooldown" K8_person NULL ! offset 160: property p47_current_disintegrate_coo "current disintegrate cooldown" K8_person NULL ! offset 163: property p48_follower_percentile_chan "follower percentile chance" K8_person NULL ! offset 166: property p49_original_material "original material" K2_thing NULL ! offset 169: property p50_heat_strength "heat strength" K2_thing NULL ! offset 172: property p51_intrinsic_heat_resistanc "intrinsic heat resistance" K8_person NULL ! offset 175: property p52_internal_heat "internal heat" K2_thing NULL ! offset 178: property p53_personal_corrosion_resis "personal corrosion resistance" K2_thing NULL ! offset 181: property p54_smoke_timer "smoke timer" K1_room NULL ! offset 184: property p55_ethereal_timer "ethereal timer" K8_person NULL ! offset 187: property p56_scroll_effect "scroll-effect" K38_scroll NULL ! offset 190: property p57_true_name "true-name" K38_scroll NULL ! offset 193: property p58_hidden_identity "hidden identity" K2_thing NULL ! offset 196: property p59_hit_protection "hit protection" K8_person NULL ! offset 199: property p60_stun_count "stun count" K8_person NULL ! offset 202: property p61_constriction_prevention "constriction prevention" K24_clothing NULL ! offset 205: property p62_last_seen_location "last-seen-location" K8_person NULL ! offset 208: property pluralname "plural-named" K1_room K2_thing K3_direction K9_region NULL ! offset 214: property proper "proper-named" K1_room K2_thing K3_direction K9_region NULL ! offset 220: property privately_named "privately-named" K1_room K2_thing K3_direction K9_region NULL ! offset 226: property light "lighted" K1_room K2_thing NULL ! offset 230: property visited "visited" K1_room NULL ! offset 233: property light "lit" K1_room K2_thing NULL ! offset 237: property edible "edible" K2_thing NULL ! offset 240: property static "fixed in place" K2_thing NULL ! offset 243: property scenery "scenery" K2_thing NULL ! offset 246: property clothing "wearable" K2_thing NULL ! offset 249: property pushable "pushable between rooms" K2_thing NULL ! offset 252: property moved "handled" K2_thing NULL ! offset 255: property concealed "undescribed" K2_thing NULL ! offset 258: property workflag "marked for listing" K2_thing K3_direction NULL ! offset 262: property mentioned "mentioned" K2_thing NULL ! offset 265: property enterable "enterable" K5_container K6_supporter NULL ! offset 269: property transparent "transparent" K5_container NULL ! offset 272: property open "open" K4_door K5_container NULL ! offset 276: property openable "openable" K4_door K5_container NULL ! offset 280: property lockable "lockable" K4_door K5_container NULL ! offset 284: property locked "locked" K4_door K5_container NULL ! offset 288: property female "female" K8_person NULL ! offset 291: property neuter "neuter" K2_thing K8_person NULL ! offset 295: property on "switched on" K13_device NULL ! offset 298: property p104_recurring "recurring" NULL ! offset 300: property p106_seen "seen" K2_thing NULL ! offset 303: property p108_familiar "familiar" K2_thing NULL ! offset 306: property p110_hating "hating" NULL ! offset 308: property p111_faction "faction" K8_person NULL ! offset 311: property p112_combat_state "combat state" K8_person NULL ! offset 314: property p113_pressing "pressing" NULL ! offset 316: property p114_ambiguously_plural "ambiguously plural" K2_thing NULL ! offset 319: property p116_readied "readied" K17_weapon NULL ! offset 322: property p118_at_parry "at parry" K8_person NULL ! offset 325: property p120_at_dodge "at dodge" K8_person NULL ! offset 328: property p122_cardinal "cardinal" K3_direction NULL ! offset 331: property p124_placed "placed" K1_room NULL ! offset 334: property p126_collapse "collapse" NULL ! offset 336: property p127_connectable "connectable" K1_room NULL ! offset 339: property p129_connection_inviting "connection-inviting" K1_room NULL ! offset 342: property p131_placeable "placeable" K1_room NULL ! offset 345: property p133_habitable "habitable" K1_room NULL ! offset 348: property p135_treasurable "treasurable" K1_room NULL ! offset 351: property p137_extra_accepting "extra-accepting" K1_room NULL ! offset 354: property p139_nogo "nogo" K1_room NULL ! offset 357: property p141_vertical_placement "vertical placement" K1_room NULL ! offset 360: property p142_mood "mood" K1_room K2_thing NULL ! offset 364: property p143_consecrated "consecrated" K1_room NULL ! offset 367: property p145_digging_tool "digging tool" K2_thing NULL ! offset 370: property p147_collapsing_tool "collapsing tool" K2_thing NULL ! offset 373: property p149_emotionless "emotionless" K8_person NULL ! offset 376: property p151_non_attacker "non-attacker" K8_person NULL ! offset 379: property p152_weapon_user "weapon user" K8_person NULL ! offset 382: property p154_size "size" K8_person NULL ! offset 385: property p155_granted "granted" K21_power NULL ! offset 388: property p157_granting "granting" K21_power NULL ! offset 391: property p158_flyer "flyer" K8_person NULL ! offset 394: property p160_blinded "blinded" K8_person NULL ! offset 397: property p162_eyeless "eyeless" K8_person NULL ! offset 400: property p164_spontaneous_teleporter "spontaneous teleporter" K8_person NULL ! offset 403: property p166_teleportable "teleportable" K1_room NULL ! offset 406: property p168_teleport_impossible_awa "teleport impossible aware" K8_person NULL ! offset 409: property p170_follower "follower" K8_person NULL ! offset 412: property p172_ranged "ranged" K17_weapon NULL ! offset 415: property p174_armour_stoppable "armour-stoppable" K17_weapon NULL ! offset 418: property p176_material_adjective "material-adjective" NULL ! offset 420: property p177_destroying_heat "destroying heat" NULL ! offset 422: property p178_heat_behaviour "heat-behaviour" NULL ! offset 424: property p179_corrosion_resistance "corrosion resistance" NULL ! offset 426: property p180_material "material" K2_thing NULL ! offset 429: property p181_risky "risky" K8_person NULL ! offset 432: property p183_aite_loved "aite-loved" K8_person NULL ! offset 435: property p185_flaming "flaming" K2_thing NULL ! offset 438: property p187_cooler "cooler" K2_thing NULL ! offset 441: property p189_rusted "rusted" K2_thing NULL ! offset 444: property p191_rust_spored "rust-spored" K1_room NULL ! offset 447: property p193_rust_spored_candidate "rust-spored-candidate" K1_room NULL ! offset 450: property p195_rust_releasing "rust-releasing" K5_container NULL ! offset 453: property p197_death_blessed "death-blessed" K8_person NULL ! offset 456: property p199_death_cursed "death-cursed" K8_person NULL ! offset 459: property p201_player_form "player form" selfobj NULL ! offset 462: property p202_hidden "hidden" K8_person NULL ! offset 465: property p204_on_the_lookout "on-the-lookout" K8_person NULL ! offset 468: property p206_unnaturally_aware "unnaturally aware" K8_person NULL ! offset 471: property p208_unnaturally_aware_follo "unnaturally aware follower" K8_person NULL ! offset 474: property p210_smoke_attuned "smoke attuned" K8_person NULL ! offset 477: property p212_ethereal "ethereal" K8_person NULL ! offset 480: property p214_valuation "valuation" K2_thing NULL ! offset 483: property p215_actual "actual" K2_thing NULL ! offset 486: property p217_having_knowledge_of "having-knowledge-of" NULL ! offset 488: property p218_scroll_parsable "scroll-parsable" K38_scroll NULL ! offset 491: property p219_plural_name "plural-name" K38_scroll NULL ! offset 494: property p220_corruptible "corruptible" K2_thing NULL ! offset 497: property p222_cursed "cursed" K2_thing NULL ! offset 500: property p224_curse_identified "curse-identified" K2_thing NULL ! offset 503: property p226_cautious "cautious" K8_person NULL ! offset 506: property p228_enraged "enraged" K8_person NULL ! offset 509: property p230_patient "patient" K8_person NULL ! offset 512: property p232_greedy "greedy" K8_person NULL ! offset 515: property p234_at_stun "at-stun" K8_person NULL ! offset 518: property p236_sometime_stunned "sometime-stunned" K8_person NULL ! offset 521: property p237_domination "domination" NULL ! offset 523: property p238_grappling "grappling" K8_person NULL ! offset 526: property p239_tentacle_confused "tentacle-confused" K8_person NULL ! offset 529: property p240_barkskinned "barkskinned" K8_person NULL ! offset 532: property p242_as_shape "as-shape" I513_aswang NULL ! offset 535: property p243_hexed "hexed" K8_person NULL ! offset 538: property p245_smoke_demoned "smoke-demoned" K1_room NULL ! offset 541: property p247_retreater "retreater" K8_person NULL ! offset 544: property p249_initiative_conferring "initiative-conferring" K1_room NULL ! offset 547: property p251_runner "runner" K8_person NULL ! offset 550: property worn "" NULL ! offset 552: property vector "" NULL ! offset 554: property room_index "" NULL ! offset 556: property door_dir "" NULL ! offset 558: property door_to "" K4_door NULL ! offset 561: property absent "" NULL ! offset 563: property found_in "" NULL ! offset 565: property list_together "" NULL ! offset 567: property cap_short_name "" NULL ! offset 569: property mark_as_room "" NULL ! offset 571: property mark_as_thing "" NULL ! offset 573: property component_parent "" NULL ! offset 575: property component_child "" NULL ! offset 577: property component_sibling "" NULL ! offset 579: property regional_found_in "" NULL ! offset 581: property IK1_Count "" NULL ! offset 583: property IK1_Link "" NULL ! offset 585: property IK2_Count "" NULL ! offset 587: property IK2_Link "" NULL ! offset 589: property IK3_Count "" NULL ! offset 591: property IK3_Link "" NULL ! offset 593: property IK4_Count "" NULL ! offset 595: property IK4_Link "" NULL ! offset 597: property IK5_Count "" NULL ! offset 599: property IK5_Link "" NULL ! offset 601: property IK6_Count "" NULL ! offset 603: property IK6_Link "" NULL ! offset 605: property IK7_Count "" NULL ! offset 607: property IK7_Link "" NULL ! offset 609: property IK8_Count "" NULL ! offset 611: property IK8_Link "" NULL ! offset 613: property IK9_Count "" NULL ! offset 615: property IK9_Link "" NULL ! offset 617: property IK10_Count "" NULL ! offset 619: property IK10_Link "" NULL ! offset 621: property IK11_Count "" NULL ! offset 623: property IK11_Link "" NULL ! offset 625: property IK12_Count "" NULL ! offset 627: property IK12_Link "" NULL ! offset 629: property IK13_Count "" NULL ! offset 631: property IK13_Link "" NULL ! offset 633: property IK14_Count "" NULL ! offset 635: property IK14_Link "" NULL ! offset 637: property IK15_Count "" NULL ! offset 639: property IK15_Link "" NULL ! offset 641: property IK16_Count "" NULL ! offset 643: property IK16_Link "" NULL ! offset 645: property IK17_Count "" NULL ! offset 647: property IK17_Link "" NULL ! offset 649: property IK18_Count "" NULL ! offset 651: property IK18_Link "" NULL ! offset 653: property IK19_Count "" NULL ! offset 655: property IK19_Link "" NULL ! offset 657: property IK20_Count "" NULL ! offset 659: property IK20_Link "" NULL ! offset 661: property IK21_Count "" NULL ! offset 663: property IK21_Link "" NULL ! offset 665: property IK22_Count "" NULL ! offset 667: property IK22_Link "" NULL ! offset 669: property IK23_Count "" NULL ! offset 671: property IK23_Link "" NULL ! offset 673: property IK24_Count "" NULL ! offset 675: property IK24_Link "" NULL ! offset 677: property IK25_Count "" NULL ! offset 679: property IK25_Link "" NULL ! offset 681: property IK26_Count "" NULL ! offset 683: property IK26_Link "" NULL ! offset 685: property IK27_Count "" NULL ! offset 687: property IK27_Link "" NULL ! offset 689: property IK28_Count "" NULL ! offset 691: property IK28_Link "" NULL ! offset 693: property IK29_Count "" NULL ! offset 695: property IK29_Link "" NULL ! offset 697: property IK30_Count "" NULL ! offset 699: property IK30_Link "" NULL ! offset 701: property IK31_Count "" NULL ! offset 703: property IK31_Link "" NULL ! offset 705: property IK32_Count "" NULL ! offset 707: property IK32_Link "" NULL ! offset 709: property IK33_Count "" NULL ! offset 711: property IK33_Link "" NULL ! offset 713: property IK34_Count "" NULL ! offset 715: property IK34_Link "" NULL ! offset 717: property IK35_Count "" NULL ! offset 719: property IK35_Link "" NULL ! offset 721: property IK36_Count "" NULL ! offset 723: property IK36_Link "" NULL ! offset 725: property IK37_Count "" NULL ! offset 727: property IK37_Link "" NULL ! offset 729: property IK38_Count "" NULL ! offset 731: property IK38_Link "" NULL ! offset 733: property IK39_Count "" NULL ! offset 735: property IK39_Link "" NULL ! offset 737: property IK40_Count "" NULL ! offset 739: property IK40_Link "" NULL ! offset 741: property IK41_Count "" NULL ! offset 743: property IK41_Link "" NULL ! offset 745: property IK42_Count "" NULL ! offset 747: property IK42_Link "" NULL ! offset 749: property IK43_Count "" NULL ! offset 751: property IK43_Link "" NULL ! offset 753: property IK44_Count "" NULL ! offset 755: property IK44_Link "" NULL ! offset 757: property IK45_Count "" NULL ! offset 759: property IK45_Link "" NULL ! offset 761: property IK46_Count "" NULL ! offset 763: property IK46_Link "" NULL ! offset 765: property IK47_Count "" NULL ! offset 767: property IK47_Link "" NULL ! offset 769: property IK48_Count "" NULL ! offset 771: property IK48_Link "" NULL ! offset 773: property IK49_Count "" NULL ! offset 775: property IK49_Link "" NULL ! offset 777: property IK50_Count "" NULL ! offset 779: property IK50_Link "" NULL ! offset 781: property IK51_Count "" NULL ! offset 783: property IK51_Link "" NULL ! offset 785: property IK52_Count "" NULL ! offset 787: property IK52_Link "" NULL ! offset 789: property IK53_Count "" NULL ! offset 791: property IK53_Link "" NULL ! offset 793: property KD_Count "" NULL ! offset 795: property name "" NULL ! offset 797: property parse_name "" NULL ! offset 799: property action_bitmap "" NULL ; Constant attributed_property_offsets_SIZE 48; Array attributed_property_offsets --> attributed_property_offsets_SIZE; Constant valued_property_offsets_SIZE (100 + 378 + INDIV_PROP_START-48); Array valued_property_offsets --> valued_property_offsets_SIZE; [ CreatePropertyOffsets i; for (i=0: ii = -1; for (i=0: ii = -1; valued_property_offsets-->p0_specification = 0; valued_property_offsets-->p1_indefinite_appearance_tex = 2; valued_property_offsets-->p2_variable_initial_value = 4; valued_property_offsets-->short_name = 10; valued_property_offsets-->plural = 16; valued_property_offsets-->article = 22; valued_property_offsets-->description = 28; valued_property_offsets-->map_region = 32; valued_property_offsets-->initial = 35; valued_property_offsets-->p9_opposite = 38; valued_property_offsets-->door_to = 41; valued_property_offsets-->capacity = 44; valued_property_offsets-->with_key = 49; valued_property_offsets-->p13_disambiguation_id = 54; valued_property_offsets-->p14_health = 58; valued_property_offsets-->p15_initiative = 61; valued_property_offsets-->p16_ai_rules = 64; valued_property_offsets-->p17_permanent_health = 67; valued_property_offsets-->p18_melee = 70; valued_property_offsets-->p19_defence = 73; valued_property_offsets-->p20_damage_die = 76; valued_property_offsets-->p21_weapon_damage_bonus = 79; valued_property_offsets-->p22_dodgability = 82; valued_property_offsets-->p23_passive_parry_max = 85; valued_property_offsets-->p24_active_parry_max = 88; valued_property_offsets-->p25_weapon_attack_bonus = 91; valued_property_offsets-->p26_concentration = 94; valued_property_offsets-->p27_difficulty_level = 97; valued_property_offsets-->p28_x_coordinate = 103; valued_property_offsets-->p29_y_coordinate = 106; valued_property_offsets-->p30_z_coordinate = 109; valued_property_offsets-->p31_level = 112; valued_property_offsets-->p32_group_level = 115; valued_property_offsets-->p33_perception = 118; valued_property_offsets-->p34_dexterity = 121; valued_property_offsets-->p35_willpower = 124; valued_property_offsets-->p36_inherent_damage_modifier = 127; valued_property_offsets-->p37_special_weapon_info = 130; valued_property_offsets-->p38_power_level = 133; valued_property_offsets-->p39_command_text = 136; valued_property_offsets-->p40_heal_power = 139; valued_property_offsets-->p41_heal_cooldown = 142; valued_property_offsets-->p42_current_heal_cooldown = 145; valued_property_offsets-->p43_teleport_amount = 148; valued_property_offsets-->p44_teleport_eagerness = 151; valued_property_offsets-->p45_disintegrate_power = 154; valued_property_offsets-->p46_disintegrate_cooldown = 157; valued_property_offsets-->p47_current_disintegrate_coo = 160; valued_property_offsets-->p48_follower_percentile_chan = 163; valued_property_offsets-->p49_original_material = 166; valued_property_offsets-->p50_heat_strength = 169; valued_property_offsets-->p51_intrinsic_heat_resistanc = 172; valued_property_offsets-->p52_internal_heat = 175; valued_property_offsets-->p53_personal_corrosion_resis = 178; valued_property_offsets-->p54_smoke_timer = 181; valued_property_offsets-->p55_ethereal_timer = 184; valued_property_offsets-->p56_scroll_effect = 187; valued_property_offsets-->p57_true_name = 190; valued_property_offsets-->p58_hidden_identity = 193; valued_property_offsets-->p59_hit_protection = 196; valued_property_offsets-->p60_stun_count = 199; valued_property_offsets-->p61_constriction_prevention = 202; valued_property_offsets-->p62_last_seen_location = 205; attributed_property_offsets-->pluralname = 208; attributed_property_offsets-->proper = 214; attributed_property_offsets-->privately_named = 220; attributed_property_offsets-->light = 226; attributed_property_offsets-->visited = 230; attributed_property_offsets-->light = 233; attributed_property_offsets-->edible = 237; attributed_property_offsets-->static = 240; attributed_property_offsets-->scenery = 243; attributed_property_offsets-->clothing = 246; attributed_property_offsets-->pushable = 249; attributed_property_offsets-->moved = 252; attributed_property_offsets-->concealed = 255; attributed_property_offsets-->workflag = 258; attributed_property_offsets-->mentioned = 262; attributed_property_offsets-->enterable = 265; attributed_property_offsets-->transparent = 269; attributed_property_offsets-->open = 272; attributed_property_offsets-->openable = 276; attributed_property_offsets-->lockable = 280; attributed_property_offsets-->locked = 284; attributed_property_offsets-->female = 288; attributed_property_offsets-->neuter = 291; attributed_property_offsets-->on = 295; valued_property_offsets-->p104_recurring = 298; attributed_property_offsets-->p106_seen = 300; attributed_property_offsets-->p108_familiar = 303; valued_property_offsets-->p110_hating = 306; valued_property_offsets-->p111_faction = 308; valued_property_offsets-->p112_combat_state = 311; valued_property_offsets-->p113_pressing = 314; attributed_property_offsets-->p114_ambiguously_plural = 316; attributed_property_offsets-->p116_readied = 319; attributed_property_offsets-->p118_at_parry = 322; attributed_property_offsets-->p120_at_dodge = 325; attributed_property_offsets-->p122_cardinal = 328; attributed_property_offsets-->p124_placed = 331; valued_property_offsets-->p126_collapse = 334; attributed_property_offsets-->p127_connectable = 336; attributed_property_offsets-->p129_connection_inviting = 339; attributed_property_offsets-->p131_placeable = 342; valued_property_offsets-->p133_habitable = 345; valued_property_offsets-->p135_treasurable = 348; valued_property_offsets-->p137_extra_accepting = 351; valued_property_offsets-->p139_nogo = 354; valued_property_offsets-->p141_vertical_placement = 357; valued_property_offsets-->p142_mood = 360; valued_property_offsets-->p143_consecrated = 364; valued_property_offsets-->p145_digging_tool = 367; valued_property_offsets-->p147_collapsing_tool = 370; valued_property_offsets-->p149_emotionless = 373; valued_property_offsets-->p151_non_attacker = 376; valued_property_offsets-->p152_weapon_user = 379; valued_property_offsets-->p154_size = 382; valued_property_offsets-->p155_granted = 385; valued_property_offsets-->p157_granting = 388; valued_property_offsets-->p158_flyer = 391; valued_property_offsets-->p160_blinded = 394; valued_property_offsets-->p162_eyeless = 397; valued_property_offsets-->p164_spontaneous_teleporter = 400; valued_property_offsets-->p166_teleportable = 403; valued_property_offsets-->p168_teleport_impossible_awa = 406; valued_property_offsets-->p170_follower = 409; valued_property_offsets-->p172_ranged = 412; valued_property_offsets-->p174_armour_stoppable = 415; valued_property_offsets-->p176_material_adjective = 418; valued_property_offsets-->p177_destroying_heat = 420; valued_property_offsets-->p178_heat_behaviour = 422; valued_property_offsets-->p179_corrosion_resistance = 424; valued_property_offsets-->p180_material = 426; valued_property_offsets-->p181_risky = 429; valued_property_offsets-->p183_aite_loved = 432; valued_property_offsets-->p185_flaming = 435; valued_property_offsets-->p187_cooler = 438; valued_property_offsets-->p189_rusted = 441; valued_property_offsets-->p191_rust_spored = 444; valued_property_offsets-->p193_rust_spored_candidate = 447; valued_property_offsets-->p195_rust_releasing = 450; valued_property_offsets-->p197_death_blessed = 453; valued_property_offsets-->p199_death_cursed = 456; valued_property_offsets-->p201_player_form = 459; valued_property_offsets-->p202_hidden = 462; valued_property_offsets-->p204_on_the_lookout = 465; valued_property_offsets-->p206_unnaturally_aware = 468; valued_property_offsets-->p208_unnaturally_aware_follo = 471; valued_property_offsets-->p210_smoke_attuned = 474; valued_property_offsets-->p212_ethereal = 477; valued_property_offsets-->p214_valuation = 480; valued_property_offsets-->p215_actual = 483; valued_property_offsets-->p217_having_knowledge_of = 486; valued_property_offsets-->p218_scroll_parsable = 488; valued_property_offsets-->p219_plural_name = 491; valued_property_offsets-->p220_corruptible = 494; valued_property_offsets-->p222_cursed = 497; valued_property_offsets-->p224_curse_identified = 500; valued_property_offsets-->p226_cautious = 503; valued_property_offsets-->p228_enraged = 506; valued_property_offsets-->p230_patient = 509; valued_property_offsets-->p232_greedy = 512; valued_property_offsets-->p234_at_stun = 515; valued_property_offsets-->p236_sometime_stunned = 518; valued_property_offsets-->p237_domination = 521; valued_property_offsets-->p238_grappling = 523; valued_property_offsets-->p239_tentacle_confused = 526; valued_property_offsets-->p240_barkskinned = 529; valued_property_offsets-->p242_as_shape = 532; valued_property_offsets-->p243_hexed = 535; valued_property_offsets-->p245_smoke_demoned = 538; valued_property_offsets-->p247_retreater = 541; valued_property_offsets-->p249_initiative_conferring = 544; valued_property_offsets-->p251_runner = 547; attributed_property_offsets-->worn = 550; valued_property_offsets-->vector = 552; valued_property_offsets-->room_index = 554; valued_property_offsets-->door_dir = 556; valued_property_offsets-->door_to = 558; attributed_property_offsets-->absent = 561; valued_property_offsets-->found_in = 563; valued_property_offsets-->list_together = 565; valued_property_offsets-->cap_short_name = 567; attributed_property_offsets-->mark_as_room = 569; attributed_property_offsets-->mark_as_thing = 571; valued_property_offsets-->component_parent = 573; valued_property_offsets-->component_child = 575; valued_property_offsets-->component_sibling = 577; valued_property_offsets-->regional_found_in = 579; valued_property_offsets-->IK1_Count = 581; valued_property_offsets-->IK1_Link = 583; valued_property_offsets-->IK2_Count = 585; valued_property_offsets-->IK2_Link = 587; valued_property_offsets-->IK3_Count = 589; valued_property_offsets-->IK3_Link = 591; valued_property_offsets-->IK4_Count = 593; valued_property_offsets-->IK4_Link = 595; valued_property_offsets-->IK5_Count = 597; valued_property_offsets-->IK5_Link = 599; valued_property_offsets-->IK6_Count = 601; valued_property_offsets-->IK6_Link = 603; valued_property_offsets-->IK7_Count = 605; valued_property_offsets-->IK7_Link = 607; valued_property_offsets-->IK8_Count = 609; valued_property_offsets-->IK8_Link = 611; valued_property_offsets-->IK9_Count = 613; valued_property_offsets-->IK9_Link = 615; valued_property_offsets-->IK10_Count = 617; valued_property_offsets-->IK10_Link = 619; valued_property_offsets-->IK11_Count = 621; valued_property_offsets-->IK11_Link = 623; valued_property_offsets-->IK12_Count = 625; valued_property_offsets-->IK12_Link = 627; valued_property_offsets-->IK13_Count = 629; valued_property_offsets-->IK13_Link = 631; valued_property_offsets-->IK14_Count = 633; valued_property_offsets-->IK14_Link = 635; valued_property_offsets-->IK15_Count = 637; valued_property_offsets-->IK15_Link = 639; valued_property_offsets-->IK16_Count = 641; valued_property_offsets-->IK16_Link = 643; valued_property_offsets-->IK17_Count = 645; valued_property_offsets-->IK17_Link = 647; valued_property_offsets-->IK18_Count = 649; valued_property_offsets-->IK18_Link = 651; valued_property_offsets-->IK19_Count = 653; valued_property_offsets-->IK19_Link = 655; valued_property_offsets-->IK20_Count = 657; valued_property_offsets-->IK20_Link = 659; valued_property_offsets-->IK21_Count = 661; valued_property_offsets-->IK21_Link = 663; valued_property_offsets-->IK22_Count = 665; valued_property_offsets-->IK22_Link = 667; valued_property_offsets-->IK23_Count = 669; valued_property_offsets-->IK23_Link = 671; valued_property_offsets-->IK24_Count = 673; valued_property_offsets-->IK24_Link = 675; valued_property_offsets-->IK25_Count = 677; valued_property_offsets-->IK25_Link = 679; valued_property_offsets-->IK26_Count = 681; valued_property_offsets-->IK26_Link = 683; valued_property_offsets-->IK27_Count = 685; valued_property_offsets-->IK27_Link = 687; valued_property_offsets-->IK28_Count = 689; valued_property_offsets-->IK28_Link = 691; valued_property_offsets-->IK29_Count = 693; valued_property_offsets-->IK29_Link = 695; valued_property_offsets-->IK30_Count = 697; valued_property_offsets-->IK30_Link = 699; valued_property_offsets-->IK31_Count = 701; valued_property_offsets-->IK31_Link = 703; valued_property_offsets-->IK32_Count = 705; valued_property_offsets-->IK32_Link = 707; valued_property_offsets-->IK33_Count = 709; valued_property_offsets-->IK33_Link = 711; valued_property_offsets-->IK34_Count = 713; valued_property_offsets-->IK34_Link = 715; valued_property_offsets-->IK35_Count = 717; valued_property_offsets-->IK35_Link = 719; valued_property_offsets-->IK36_Count = 721; valued_property_offsets-->IK36_Link = 723; valued_property_offsets-->IK37_Count = 725; valued_property_offsets-->IK37_Link = 727; valued_property_offsets-->IK38_Count = 729; valued_property_offsets-->IK38_Link = 731; valued_property_offsets-->IK39_Count = 733; valued_property_offsets-->IK39_Link = 735; valued_property_offsets-->IK40_Count = 737; valued_property_offsets-->IK40_Link = 739; valued_property_offsets-->IK41_Count = 741; valued_property_offsets-->IK41_Link = 743; valued_property_offsets-->IK42_Count = 745; valued_property_offsets-->IK42_Link = 747; valued_property_offsets-->IK43_Count = 749; valued_property_offsets-->IK43_Link = 751; valued_property_offsets-->IK44_Count = 753; valued_property_offsets-->IK44_Link = 755; valued_property_offsets-->IK45_Count = 757; valued_property_offsets-->IK45_Link = 759; valued_property_offsets-->IK46_Count = 761; valued_property_offsets-->IK46_Link = 763; valued_property_offsets-->IK47_Count = 765; valued_property_offsets-->IK47_Link = 767; valued_property_offsets-->IK48_Count = 769; valued_property_offsets-->IK48_Link = 771; valued_property_offsets-->IK49_Count = 773; valued_property_offsets-->IK49_Link = 775; valued_property_offsets-->IK50_Count = 777; valued_property_offsets-->IK50_Link = 779; valued_property_offsets-->IK51_Count = 781; valued_property_offsets-->IK51_Link = 783; valued_property_offsets-->IK52_Count = 785; valued_property_offsets-->IK52_Link = 787; valued_property_offsets-->IK53_Count = 789; valued_property_offsets-->IK53_Link = 791; valued_property_offsets-->KD_Count = 793; valued_property_offsets-->name = 795; valued_property_offsets-->parse_name = 797; valued_property_offsets-->action_bitmap = 799; ]; Constant NUMBER_RULEBOOKS_CREATED = 674; Constant V0_printing_the_name_of_some = 0; Constant V1_printing_the_plural_name_ = 1; Constant V2_printing_a_number_of_some = 2; Constant V3_printing_room_description = 3; Constant V4_listing_contents_of_somet = 4; Constant V5_grouping_together_somethi = 5; Constant V6_writing_a_paragraph_about = 6; Constant V7_listing_nondescript_items = 7; Constant V8_printing_the_name_of_a_da = 8; Constant V9_printing_the_description_ = 9; Constant V10_printing_the_announcemen = 10; Constant V11_printing_the_announcemen = 11; Constant V12_printing_a_refusal_to_ac = 12; Constant V13_constructing_the_status_ = 13; Constant V14_printing_the_banner_text = 14; Constant V15_reading_a_command = 15; Constant V16_deciding_the_scope_of_so = 16; Constant V17_deciding_the_concealed_p = 17; Constant V18_deciding_whether_all_inc = 18; Constant V19_clarifying_the_parser_s_ = 19; Constant V20_asking_which_do_you_mean = 20; Constant V21_printing_a_parser_error = 21; Constant V22_supplying_a_missing_noun = 22; Constant V23_supplying_a_missing_seco = 23; Constant V24_implicitly_taking_someth = 24; Constant V25_starting_the_virtual_mac = 25; Constant V26_amusing_a_victorious_pla = 26; Constant V27_printing_the_player_s_ob = 27; Constant V28_handling_the_final_quest = 28; Constant V29_printing_the_locale_desc = 29; Constant V30_choosing_notable_locale_ = 30; Constant V31_printing_a_locale_paragr = 31; Constant V32_displaying = 32; Constant V33_cloning_a_new_object_fro = 33; Constant V34_restoring_from_a_saved_g = 34; Constant V35_failing_to_restore_from_ = 35; Constant V36_automatically_saving_the = 36; Constant V37_failing_to_automatically = 37; Constant V38_failing_to_delete_a_save = 38; Constant V39_running_the_parser = 39; Array Activity_before_rulebooks --> 29 32 35 38 41 44 47 50 53 56 59 62 65 68 71 74 77 80 83 86 89 92 95 98 101 104 107 110 113 116 119 122 365 388 391 394 397 400 403 409 NULL; Array Activity_for_rulebooks --> 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 366 389 392 395 398 401 404 410 NULL; Array Activity_after_rulebooks --> 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 103 106 109 112 115 118 121 124 367 390 393 396 399 402 405 411 NULL; Array Activity_atb_rulebooks -> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 $ff; Constant RELS_SYMMETRIC $8000; Constant RELS_EQUIVALENCE $4000; Constant RELS_X_UNIQUE $2000; Constant RELS_Y_UNIQUE $1000; Constant RELS_TEST $0800; Constant RELS_ASSERT_TRUE $0400; Constant RELS_ASSERT_FALSE $0200; Constant RELS_SHOW $0100; Constant RELS_ROUTE_FIND $0080; Constant RELS_ROUTE_FIND_COUNT $0040; Constant RELS_LOOKUP_ANY $0008; Constant RELS_LOOKUP_ALL_X $0004; Constant RELS_LOOKUP_ALL_Y $0002; Constant RELS_LIST $0001; #Iftrue (WORDSIZE == 2); Constant REL_BLOCK_HEADER ($100*5 + $$1101); #Ifnot; Constant REL_BLOCK_HEADER ($100*6 + $$1101)*$10000; #Endif; [ PrintSceneName value; switch(value) { I66_entire_game: print "Entire Game"; default: print ""; } ]; [ A_PrintSceneName value; return (value % 1)+1; ]; [ B_PrintSceneName value; return ((value+-1) % 1)+1; ]; [ R_PrintSceneName a b; if (a == 0 && b == 0) return (random(1)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintFigureName value; switch(value) { I65_figure_of_cover: print "Figure of cover"; I526_figure_opening_figure: print "Figure opening figure"; default: print ""; } ]; [ A_PrintFigureName value; return (value % 2)+1; ]; [ B_PrintFigureName value; return ((value+0) % 2)+1; ]; [ R_PrintFigureName a b; if (a == 0 && b == 0) return (random(2)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintSoundName value; switch(value) { default: print ""; } ]; [ A_PrintSoundName value; return (value % 0)+1; ]; [ B_PrintSoundName value; return ((value+-2) % 0)+1; ]; [ R_PrintSoundName a b; if (a == 0 && b == 0) return (random(0)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintExternalFileName value; switch(value) { I89_file_of_save_data: print "file of save data"; I525_file_of_victories: print "File Of Victories"; I527_file_of_achievements: print "File Of Achievements"; default: print ""; } ]; [ A_PrintExternalFileName value; return (value % 3)+1; ]; [ B_PrintExternalFileName value; return ((value+1) % 3)+1; ]; [ R_PrintExternalFileName a b; if (a == 0 && b == 0) return (random(3)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T57 value; switch(value) { I68_didn_t_understand_error: print "didn't understand error"; I69_only_understood_as_far_a: print "only understood as far as error"; I70_didn_t_understand_that_n: print "didn't understand that number error"; I71_can_only_do_that_to_some: print "can only do that to something animate error"; I72_can_t_see_any_such_thing: print "can't see any such thing error"; I73_said_too_little_error: print "said too little error"; I74_aren_t_holding_that_erro: print "aren't holding that error"; I75_can_t_use_multiple_objec: print "can't use multiple objects error"; I76_can_only_use_multiple_ob: print "can only use multiple objects error"; I77_not_sure_what_it_refers_: print "not sure what it refers to error"; I78_excepted_something_not_i: print "excepted something not included error"; I79_not_a_verb_i_recognise_e: print "not a verb I recognise error"; I80_not_something_you_need_t: print "not something you need to refer to error"; I81_can_t_see_it_at_the_mome: print "can't see it at the moment error"; I82_didn_t_understand_the_wa: print "didn't understand the way that finished error"; I83_not_enough_of_those_avai: print "not enough of those available error"; I84_nothing_to_do_error: print "nothing to do error"; I85_noun_did_not_make_sense_: print "noun did not make sense in that context error"; I86_referred_to_a_determinat: print "referred to a determination of scope error"; I87_i_beg_your_pardon_error: print "I beg your pardon error"; default: print ""; } ]; [ A_T57 value; return (value % 20)+1; ]; [ B_T57 value; return ((value+18) % 20)+1; ]; [ R_T57 a b; if (a == 0 && b == 0) return (random(20)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T59 value; switch(value) { I91_friendly: print "friendly"; I92_passive: print "passive"; I93_hostile: print "hostile"; I158_undead: print "undead"; I159_horrific: print "horrific"; I160_demonic: print "demonic"; I465_enslaved: print "enslaved"; default: print ""; } ]; [ A_T59 value; return (value % 7)+1; ]; [ B_T59 value; return ((value+5) % 7)+1; ]; [ R_T59 a b; if (a == 0 && b == 0) return (random(7)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T60 value; switch(value) { I95_at_inactive: print "at-Inactive"; I96_at_act: print "at-Act"; I97_at_react: print "at-React"; default: print ""; } ]; [ A_T60 value; return (value % 3)+1; ]; [ B_T60 value; return ((value+1) % 3)+1; ]; [ R_T60 a b; if (a == 0 && b == 0) return (random(3)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T61 value; switch(value) { I99_peace: print "peace"; I100_combat: print "combat"; I101_player_choosing: print "player choosing"; I102_reactions: print "reactions"; I103_concluding: print "concluding"; default: print ""; } ]; [ A_T61 value; return (value % 5)+1; ]; [ B_T61 value; return ((value+3) % 5)+1; ]; [ R_T61 a b; if (a == 0 && b == 0) return (random(5)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T65 value; switch(value) { I109_vp_agnostic: print "vp-agnostic"; I110_vp_underground: print "vp-underground"; I111_vp_likely_underground: print "vp-likely-underground"; I112_vp_above_ground: print "vp-above-ground"; I113_vp_high: print "vp-high"; I114_vp_likely_high: print "vp-likely-high"; default: print ""; } ]; [ A_T65 value; return (value % 6)+1; ]; [ B_T65 value; return ((value+4) % 6)+1; ]; [ R_T65 a b; if (a == 0 && b == 0) return (random(6)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T66 value; switch(value) { I116_civilised: print "civilised"; I117_religious: print "religious"; I118_barren: print "barren"; I119_deathly: print "deathly"; I120_elemental: print "elemental"; I121_magical: print "magical"; I122_alchemical: print "alchemical"; I123_non_mood: print "non-mood"; default: print ""; } ]; [ A_T66 value; return (value % 8)+1; ]; [ B_T66 value; return ((value+6) % 8)+1; ]; [ R_T66 a b; if (a == 0 && b == 0) return (random(8)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T68 value; switch(value) { I151_tiny: print "tiny"; I152_small: print "small"; I153_medium: print "medium"; I154_large: print "large"; I155_huge: print "huge"; I156_gargantuan: print "gargantuan"; default: print ""; } ]; [ A_T68 value; return (value % 6)+1; ]; [ B_T68 value; return ((value+4) % 6)+1; ]; [ R_T68 a b; if (a == 0 && b == 0) return (random(6)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T70 value; switch(value) { I165_other_material: print "other-material"; I166_iron: print "iron"; I167_silver: print "silver"; I168_paper: print "paper"; I169_cloth: print "cloth"; I170_wood: print "wood"; I171_leather: print "leather"; I172_flesh: print "flesh"; I173_glass: print "glass"; I174_stone: print "stone"; I175_dragon_skin: print "dragon skin"; I176_radiance: print "radiance"; I177_adamant: print "adamant"; I178_vapour: print "vapour"; default: print ""; } ]; [ A_T70 value; return (value % 14)+1; ]; [ B_T70 value; return ((value+12) % 14)+1; ]; [ R_T70 a b; if (a == 0 && b == 0) return (random(14)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T71 value; switch(value) { I163_burner: print "burner"; I164_melter: print "melter"; default: print ""; } ]; [ A_T71 value; return (value % 2)+1; ]; [ B_T71 value; return ((value+0) % 2)+1; ]; [ R_T71 a b; if (a == 0 && b == 0) return (random(2)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T72 value; switch(value) { I181_human_form: print "human-form"; I182_ghoul: print "ghoul"; I183_vampire: print "vampire"; I184_vampire_bat: print "vampire bat"; default: print ""; } ]; [ A_T72 value; return (value % 4)+1; ]; [ B_T72 value; return ((value+2) % 4)+1; ]; [ R_T72 a b; if (a == 0 && b == 0) return (random(4)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T73 value; switch(value) { I188_minor: print "minor"; I189_major: print "major"; I190_epic: print "epic"; I191_unique: print "unique"; I192_special: print "special"; I193_non_treasure: print "non-treasure"; default: print ""; } ]; [ A_T73 value; return (value % 6)+1; ]; [ B_T73 value; return ((value+4) % 6)+1; ]; [ R_T73 a b; if (a == 0 && b == 0) return (random(6)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T91 value; switch(value) { I212_scroll_teleportation: print "scroll-teleportation"; I213_scroll_identify: print "scroll-identify"; I214_scroll_remove_curse: print "scroll-remove-curse"; I215_scroll_ghoulification: print "scroll-ghoulification"; I216_scroll_shadows: print "scroll-shadows"; I217_scroll_summoning: print "scroll-summoning"; I218_scroll_fireworks: print "scroll-fireworks"; I219_scroll_blade: print "scroll-blade"; I220_scroll_protection: print "scroll-protection"; I221_scroll_ethereal: print "scroll-ethereal"; I222_scroll_skill: print "scroll-skill"; I223_scroll_death: print "scroll-death"; I224_no_effect: print "no-effect"; default: print ""; } ]; [ A_T91 value; return (value % 13)+1; ]; [ B_T91 value; return ((value+11) % 13)+1; ]; [ R_T91 a b; if (a == 0 && b == 0) return (random(13)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T92 value; switch(value) { I226_none_parse: print "none-parse"; I227_mort_eilysh_parse: print "mort-eilysh-parse"; I228_naar_od_erae_parse: print "naar-od-erae-parse"; I229_dolp_zeez_parse: print "dolp-zeez-parse"; I230_chetnak_parse: print "chetnak-parse"; I231_cistrob_jirsgev_parse: print "cistrob-jirsgev-parse"; I232_twan_metier_parse: print "twan-metier-parse"; I233_hermei_le_schim_parse: print "hermei-le-schim-parse"; I234_lonsifira_parse: print "lonsifira-parse"; I235_kripmeteel_parse: print "kripmeteel-parse"; I236_souspenot_parse: print "souspenot-parse"; I237_shalm_sawesas_parse: print "shalm-sawesas-parse"; I238_zyxyz_parse: print "zyxyz-parse"; default: print ""; } ]; [ A_T92 value; return (value % 13)+1; ]; [ B_T92 value; return ((value+11) % 13)+1; ]; [ R_T92 a b; if (a == 0 && b == 0) return (random(13)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T108 value; switch(value) { I510_as_witch: print "as-witch"; I511_as_bird: print "as-bird"; I512_as_dog: print "as-dog"; default: print ""; } ]; [ A_T108 value; return (value % 3)+1; ]; [ B_T108 value; return ((value+1) % 3)+1; ]; [ R_T108 a b; if (a == 0 && b == 0) return (random(3)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ T109 value; switch(value) { I529_assistant_dungeoneer: print "Assistant dungeoneer"; I530_adventurer: print "Adventurer"; I531_hunter: print "Hunter"; I532_destroyer: print "Destroyer"; I533_mageslayer: print "Mageslayer"; I534_deathblow: print "Deathblow"; I535_i_return_to_serve: print "I return to serve"; I536_from_the_shadows_i_come: print "From the shadows I come"; I537_stunning_performance: print "Stunning performance"; I538_detox: print "Detox"; I539_injury_to_insult: print "Injury to insult"; I540_unmoved: print "Unmoved"; I541_nature_s_fragile_vessel: print "Nature's fragile vessel"; I542_durin_s_bane: print "Durin's bane"; default: print ""; } ]; [ A_T109 value; return (value % 14)+1; ]; [ B_T109 value; return ((value+12) % 14)+1; ]; [ R_T109 a b; if (a == 0 && b == 0) return (random(14)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintKindValuePair k v; k = KindAtomic(k); switch(k) { 2: print (DA_Number) v; 3: print (DA_Number) v; 4: print (DA_Number) v; 5: print (DA_Number) v; 6: print (DA_Number) v; 7: print (DA_Number) v; 8: print (DA_Number) v; 9: print (PrintShortName) v; 10: print (DecimalNumber) v; 11: print (DA_TruthState) v; 12: print (PrintText) v; 13: print (INDEXED_TEXT_TY_Say) v; 14: print (DecimalNumber) v; 15: print (PrintUseOption) v; 16: print (PrintSnippet) v; 17: print (PrintTableName) v; 18: print (DA_Number) v; 19: print (RulebookOutcomePrintingRule) v; 20: print (DecimalNumber) v; 22: print (DecimalNumber) v; 24: print (SayPhraseName) v; 25: print (DecimalNumber) v; 26: print (RELATION_TY_Say) v; 27: print (RulePrintingRule) v; 28: print (RulePrintingRule) v; 29: print (DecimalNumber) v; 30: print (LIST_OF_TY_Say) v; 31: print (DecimalNumber) v; 32: print (PROPERTY_TY_Say) v; 33: print (DecimalNumber) v; 34: print (COMBINATION_TY_Say) v; 35: print (DecimalNumber) v; 36: print (STORED_ACTION_TY_Say) v; 37: print (SayActionName) v; 38: print (PrintTimeOfDay) v; 39: print (PrintSceneName) v; 40: print (PrintFigureName) v; 41: print (PrintSoundName) v; 42: print (PrintExternalFileName) v; 43: print (T57) v; 44: print (T59) v; 45: print (T60) v; 46: print (T61) v; 47: print (T65) v; 48: print (T66) v; 49: print (T68) v; 50: print (T70) v; 51: print (T71) v; 52: print (T72) v; 53: print (T73) v; 54: print (T91) v; 55: print (T92) v; 56: print (T108) v; 57: print (T109) v; default: print v; } ]; [ DefaultValueOfKOV sk k; k = KindAtomic(sk); switch(k) { 9: return nothing; 10: return 0; 11: return false; 12: return EMPTY_TEXT_VALUE; 13: return BlkValueCreate(k, 0, sk); 14: return 32; 15: return 0; 16: return 101; 17: return TheEmptyTable; 18: return 0; 19: return ; 20: return DefaultTopic; 22: return ; 24: return Default_Value_0; 25: return ; 26: return BlkValueCreate(k, 0, sk); 27: return LITTLE_USED_DO_NOTHING_R; 28: return 0; 29: return PRINTING_THE_NAME_ACT; 30: return BlkValueCreate(k, 0, sk); 31: return Prop_Falsity; 32: return ; 33: return ; 34: return BlkValueCreate(k, 0, sk); 35: return ; 36: return BlkValueCreate(k, 0, sk); 37: return ##Wait; 38: return 540; 39: return I66_entire_game; 40: return I65_figure_of_cover; 41: return ; 42: return I89_file_of_save_data; 43: return I68_didn_t_understand_error; 44: return I91_friendly; 45: return I95_at_inactive; 46: return I99_peace; 47: return I109_vp_agnostic; 48: return I116_civilised; 49: return I151_tiny; 50: return I165_other_material; 51: return I163_burner; 52: return I181_human_form; 53: return I188_minor; 54: return I212_scroll_teleportation; 55: return I226_none_parse; 56: return I510_as_witch; 57: return I529_assistant_dungeoneer; default: return 0; } ]; [ KOVComparisonFunction k; k = KindAtomic(k); switch(k) { 9: return UnsignedCompare; 11: return UnsignedCompare; 12: return UnsignedCompare; 13: return BlkValueCompare; 14: return UnsignedCompare; 15: return UnsignedCompare; 16: return UnsignedCompare; 17: return UnsignedCompare; 18: return UnsignedCompare; 19: return UnsignedCompare; 20: return UnsignedCompare; 22: return UnsignedCompare; 24: return UnsignedCompare; 25: return UnsignedCompare; 26: return BlkValueCompare; 27: return UnsignedCompare; 28: return UnsignedCompare; 29: return UnsignedCompare; 30: return BlkValueCompare; 31: return UnsignedCompare; 32: return UnsignedCompare; 33: return UnsignedCompare; 34: return BlkValueCompare; 35: return UnsignedCompare; 36: return BlkValueCompare; 37: return UnsignedCompare; 39: return UnsignedCompare; 40: return UnsignedCompare; 41: return UnsignedCompare; 42: return UnsignedCompare; default: return 0; } ]; [ KOVDomainSize k; k = KindAtomic(k); switch(k) { 39: return 1; 40: return 2; 41: return 0; 42: return 3; 43: return 20; 44: return 7; 45: return 3; 46: return 5; 47: return 6; 48: return 8; 49: return 6; 50: return 14; 51: return 2; 52: return 4; 53: return 6; 54: return 13; 55: return 13; 56: return 3; 57: return 14; default: return 0; } ]; [ KOVIsBlockValue k; k = KindAtomic(k); if (k == 13 or 26 or 30 or 34 or 36) rtrue; rfalse; ]; [ KOVSupportFunction k; k = KindAtomic(k); switch(k) { 13: return INDEXED_TEXT_TY_Support; 26: return RELATION_TY_Support; 30: return LIST_OF_TY_Support; 34: return COMBINATION_TY_Support; 36: return STORED_ACTION_TY_Support; } rfalse; ]; [ I7_Kind_Name k; if (k == K1_room) print "room"; if (k == K2_thing) print "thing"; if (k == K3_direction) print "direction"; if (k == K4_door) print "door"; if (k == K5_container) print "container"; if (k == K6_supporter) print "supporter"; if (k == K7_backdrop) print "backdrop"; if (k == K8_person) print "person"; if (k == K9_region) print "region"; if (k == K10_man) print "man"; if (k == K11_woman) print "woman"; if (k == K12_animal) print "animal"; if (k == K13_device) print "device"; if (k == K14_vehicle) print "vehicle"; if (k == K15_player_s_holdall) print "player's holdall"; if (k == K16_subject) print "subject"; if (k == K17_weapon) print "weapon"; if (k == K18_natural_weapon) print "natural weapon"; if (k == K19_monster) print "monster"; if (k == K20_tunnel) print "Tunnel"; if (k == K21_power) print "power"; if (k == K22_treasure_pack) print "treasure pack"; if (k == K23_essence) print "essence"; if (k == K24_clothing) print "Clothing"; if (k == K25_necklace) print "necklace"; if (k == K26_hat) print "hat"; if (k == K27_shirt) print "shirt"; if (k == K28_cloak) print "cloak"; if (k == K29_shoes) print "Shoes"; if (k == K30_trousers) print "Trousers"; if (k == K31_belt) print "belt"; if (k == K32_gauntlets) print "Gauntlets"; if (k == K33_mask) print "mask"; if (k == K34_suit) print "suit"; if (k == K35_grenade) print "grenade"; if (k == K36_salve) print "salve"; if (k == K37_sprayable) print "sprayable"; if (k == K38_scroll) print "scroll"; if (k == K39_sword) print "sword"; if (k == K40_rapier) print "rapier"; if (k == K41_dagger) print "dagger"; if (k == K42_axe) print "axe"; if (k == K43_scythe) print "scythe"; if (k == K44_staff_of_pain) print "staff of pain"; if (k == K45_flash_grenade) print "flash grenade"; if (k == K46_rust_grenade) print "rust grenade"; if (k == K47_smoke_grenade) print "smoke grenade"; if (k == K48_fragmentation_grenade) print "fragmentation grenade"; if (k == K49_unguentum_argenti) print "unguentum argenti"; if (k == K50_package_of_ment) print "package of ment"; if (k == K51_extra) print "extra"; if (k == K52_symbol_extra) print "symbol-extra"; if (k == K53_rotting_limb) print "rotting limb"; ]; Constant RBNO_0 = "allow access"; Constant RBNO_1 = "deny access"; Constant RBNO_2 = "there is sufficient light"; Constant RBNO_3 = "there is insufficient light"; Constant RBNO_4 = "persuasion succeeds"; Constant RBNO_5 = "persuasion fails"; Constant RBNO_6 = "it is very likely"; Constant RBNO_7 = "it is likely"; Constant RBNO_8 = "it is possible"; Constant RBNO_9 = "it is unlikely"; Constant RBNO_10 = "it is very unlikely"; Constant RBNO_11 = "it does not"; Constant RBNO_12 = "it does"; [ RulebookOutcomePrintingRule rbno; print (string) rbno; rfalse; ]; Array KindHierarchy --> K0_kind (0) K1_room (0) K2_thing (0) K3_direction (0) K4_door (2) K5_container (2) K6_supporter (2) K7_backdrop (2) K8_person (2) K9_region (0) K10_man (8) K11_woman (8) K12_animal (8) K13_device (2) K14_vehicle (5) K15_player_s_holdall (5) K16_subject (2) K17_weapon (2) K18_natural_weapon (17) K19_monster (8) K20_tunnel (1) K21_power (2) K22_treasure_pack (5) K23_essence (2) K24_clothing (2) K25_necklace (24) K26_hat (24) K27_shirt (24) K28_cloak (24) K29_shoes (24) K30_trousers (24) K31_belt (24) K32_gauntlets (24) K33_mask (24) K34_suit (24) K35_grenade (2) K36_salve (2) K37_sprayable (2) K38_scroll (2) K39_sword (17) K40_rapier (17) K41_dagger (17) K42_axe (17) K43_scythe (17) K44_staff_of_pain (17) K45_flash_grenade (35) K46_rust_grenade (35) K47_smoke_grenade (35) K48_fragmentation_grenade (35) K49_unguentum_argenti (36) K50_package_of_ment (2) K51_extra (2) K52_symbol_extra (51) K53_rotting_limb (2) ; Constant IK1_First = X125; Constant IK2_First = I106_your_natural_weapon; Constant IK3_First = I46_north; Constant IK4_First = nothing; Constant IK5_First = I280_small_flash_grenade_pac; Constant IK6_First = nothing; Constant IK7_First = I179_rust_spores; Constant IK8_First = selfobj; Constant IK9_First = nothing; Constant IK10_First = I466_fafhrd; Constant IK11_First = nothing; Constant IK12_First = nothing; Constant IK13_First = nothing; Constant IK14_First = nothing; Constant IK15_First = nothing; Constant IK16_First = nothing; Constant IK17_First = I106_your_natural_weapon; Constant IK18_First = I106_your_natural_weapon; Constant IK19_First = I436_swarm_of_daggers; Constant IK20_First = X125; Constant IK21_First = I438_power_of_the_daggers; Constant IK22_First = I280_small_flash_grenade_pac; Constant IK23_First = I271_essence_of_caution; Constant IK24_First = I274_tormenting_necklace; Constant IK25_First = I274_tormenting_necklace; Constant IK26_First = I277_crown_of_the_empire; Constant IK27_First = I306_smoky_robe; Constant IK28_First = I353_cloak_of_shadows; Constant IK29_First = I349_boots_of_the_war_dance; Constant IK30_First = nothing; Constant IK31_First = nothing; Constant IK32_First = nothing; Constant IK33_First = I275_goggles_of_acuity; Constant IK34_First = I351_suit_of_plate_mail; Constant IK35_First = X281; Constant IK36_First = X314; Constant IK37_First = I344_fungicide_contraption; Constant IK38_First = I239_scroll_of_teleportation; Constant IK39_First = I310_smoky_blade; Constant IK40_First = I265_gilded_rapier; Constant IK41_First = I308_gorgeous_dagger; Constant IK42_First = I309_fearsome_axe; Constant IK43_First = I459_scythe_of_flaming; Constant IK44_First = I483_tormentor_s_staff; Constant IK45_First = X281; Constant IK46_First = X289; Constant IK47_First = X292; Constant IK48_First = X299; Constant IK49_First = X314; Constant IK50_First = X362; Constant IK51_First = I429_broken_pipe; Constant IK52_First = I434_holy_symbols; Constant IK53_First = I504_rotting_left_leg; Constant No_Directions = 12; ! Table of direction object alias constants: Constant DirectionObject_0 = I46_north; Constant DirectionObject_1 = I47_northeast; Constant DirectionObject_2 = I48_northwest; Constant DirectionObject_3 = I49_south; Constant DirectionObject_4 = I50_southeast; Constant DirectionObject_5 = I51_southwest; Constant DirectionObject_6 = I52_east; Constant DirectionObject_7 = I53_west; Constant DirectionObject_8 = I54_up; Constant DirectionObject_9 = I55_down; Constant DirectionObject_10 = in_obj; Constant DirectionObject_11 = out_obj; Array Map_Storage --> 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X125 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X126 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X127 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X128 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X129 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X130 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X131 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X132 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X133 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X134 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X135 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X136 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X137 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X138 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X139 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X140 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X141 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X142 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X143 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X144 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X145 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X146 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X147 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X148 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: X149 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I186_moving_through_solid_ro 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I375_entrance_hall 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I378_hall_of_mirrors 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I381_phantasmagoria 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I383_lake_of_lava 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I384_bridge_of_doom 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I387_temple_of_nomos 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I389_temple_of_aite 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I391_temple_of_sul 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I394_temple_of_isatzo 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I396_crypt 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I400_workshop_of_the_bladema 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I402_space_time_discontinuum 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I403_vast_staircase 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I405_alchemical_laboratory 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I407_hall_of_vapours 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I410_portal_room 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I413_library 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I416_drawing_room 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I418_quartering_room 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I421_eternal_prison 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I422_hidden_treasury 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I424_cavern_of_rust 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I425_portal_of_smoke 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I427_lair_of_the_imp 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I521_elemental_plane_of_smok 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I522_elemental_plane_of_smok 0 0 0 0 0 0 0 0 0 0 0 0 ! Exits from: I524_null_room ; Class VPH_Class; Array KOV_representatives --> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ValuePropertyHolder_39 0 0 0 0 0 0 0 0 0 0 ValuePropertyHolder_50 0 0 0 ValuePropertyHolder_54 0 0 0 ; VPH_Class ValuePropertyHolder_39 with value_range 1 with p104_recurring KOVP_39_P104 with description KOVP_39_P6 ; ! Storage for property p104_recurring of kind SCENE_TY Array KOVP_39_P104 table 0 0 (true) ; ! Storage for property description of kind SCENE_TY Array KOVP_39_P6 table 0 0 (EMPTY_TEXT_VALUE) ; VPH_Class ValuePropertyHolder_50 with value_range 14 with p176_material_adjective tab_16_1 with p177_destroying_heat tab_16_2 with p178_heat_behaviour tab_16_3 with p179_corrosion_resistance tab_16_4 ; ! Storage for property p176_material_adjective of kind Array KOVP_50_P176 table 0 0 (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) ; ! Storage for property p177_destroying_heat of kind Array KOVP_50_P177 table 0 0 (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) ; ! Storage for property p178_heat_behaviour of kind Array KOVP_50_P178 table 0 0 (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) ; ! Storage for property p179_corrosion_resistance of kind Array KOVP_50_P179 table 0 0 (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) ; VPH_Class ValuePropertyHolder_54 with value_range 13 with p217_having_knowledge_of KOVP_54_P217 ; ! Storage for property p217_having_knowledge_of of kind Array KOVP_54_P217 table 0 0 (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) (nothing) ; Class K0_kind with p27_difficulty_level 0 has ~pluralname has ~proper with short_name EMPTY_TEXT_VALUE with plural EMPTY_TEXT_VALUE with article EMPTY_TEXT_VALUE ; Class K1_room class K0_kind with description EMPTY_TEXT_VALUE with map_region nothing has ~privately_named has light has ~visited has ~p124_placed has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p139_nogo false with p141_vertical_placement I109_vp_agnostic with p142_mood I118_barren with p143_consecrated false with p166_teleportable true with p191_rust_spored false with p245_smoke_demoned false with p249_initiative_conferring true with p28_x_coordinate 0 with p29_y_coordinate 0 with p30_z_coordinate 0 with p193_rust_spored_candidate false with p54_smoke_timer 0 ; Class K20_tunnel class K1_room with description SC_4 has ~p131_placeable ; Class K2_thing class K0_kind with p13_disambiguation_id 0 with p50_heat_strength 0 with p52_internal_heat 0 with p53_personal_corrosion_resis 0 with p58_hidden_identity I270_non_thing has ~privately_named has ~light has ~edible has ~static has ~concealed has ~workflag has mentioned has neuter has ~p106_seen has ~p108_familiar has ~p114_ambiguously_plural with p142_mood I123_non_mood with p145_digging_tool false with p147_collapsing_tool false with p180_material I165_other_material with p185_flaming false with p187_cooler true with p189_rusted false with p214_valuation I193_non_treasure with p215_actual true with p220_corruptible true with p222_cursed false with p224_curse_identified false with component_parent nothing with component_child nothing with component_sibling nothing with parse_name Parse_Name_GV114 with action_bitmap 0 0 0 0 0 0 0 0 0 0 has ~scenery has ~clothing has ~pushable has ~moved with description EMPTY_TEXT_VALUE with initial EMPTY_TEXT_VALUE with with_key nothing with p49_original_material I165_other_material ; Class K6_supporter class K2_thing has transparent supporter with plural "supporters" with capacity 100 has static has ~enterable ; Class K8_person class K2_thing has transparent animate with before NULL, with plural "people" with capacity 100 with p14_health 10 with p16_ai_rules 413 with p18_melee 0 with p19_defence 7 with p26_concentration 0 with p31_level 0 with p32_group_level 0 with p33_perception 5 with p34_dexterity 5 with p35_willpower 5 with p36_inherent_damage_modifier 0 with p40_heal_power 0 with p41_heal_cooldown 3 with p42_current_heal_cooldown 0 with p43_teleport_amount 0 with p44_teleport_eagerness 10 with p45_disintegrate_power 0 with p46_disintegrate_cooldown 5 with p47_current_disintegrate_coo 0 with p48_follower_percentile_chan 100 with p51_intrinsic_heat_resistanc 0 with p55_ethereal_timer 0 with p59_hit_protection 0 with p60_stun_count 0 with p62_last_seen_location I524_null_room has ~female has ~neuter with p111_faction I92_passive with p112_combat_state I95_at_inactive has ~p118_at_parry has ~p120_at_dodge with p149_emotionless false with p151_non_attacker false with p152_weapon_user false with p154_size I153_medium with p158_flyer false with p160_blinded false with p162_eyeless false with p164_spontaneous_teleporter false with p168_teleport_impossible_awa false with p170_follower false with p180_material I172_flesh with p181_risky false with p183_aite_loved false with p202_hidden false with p204_on_the_lookout false with p210_smoke_attuned false with p212_ethereal false with p226_cautious false with p228_enraged false with p230_patient false with p232_greedy false with p234_at_stun false with p239_tentacle_confused false with p240_barkskinned false with p243_hexed false with p247_retreater false with p251_runner false with parse_name Parse_Name_GV96 with p15_initiative 0 with p17_permanent_health 0 with p197_death_blessed false with p199_death_cursed false with p206_unnaturally_aware false with p208_unnaturally_aware_follo false with p236_sometime_stunned false with p238_grappling nothing ; Class K10_man class K8_person with plural "men" has ~female has ~neuter ; Class K11_woman class K8_person with plural "women" has female has ~neuter ; Class K12_animal class K8_person with plural "animals" with parse_name [ original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_0; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_0; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_0; } .pvp_pass_L_0; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_1; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_1; } .pvp_pass_L_1; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ], with p13_disambiguation_id 0 ; Class K19_monster class K8_person with plural "monsters" has neuter with p111_faction I93_hostile ; Class K4_door class K2_thing has door, with plural "doors" has static has ~pushable has ~open has openable has ~lockable has ~locked with door_to nothing with with_key nothing ; Class K5_container class K2_thing has container, with plural "containers" with capacity 100 has ~transparent has open has ~openable has ~lockable has ~locked with p195_rust_releasing false has ~enterable with with_key nothing ; Class K14_vehicle class K5_container with plural "vehicles" has static has enterable ; Class K15_player_s_holdall class K5_container with plural "player's holdalls" has ~static has openable ; Class K22_treasure_pack class K5_container with plural "treasure packs" ; Class K7_backdrop class K2_thing with plural "backdrops" has static has scenery has ~pushable ; Class K13_device class K2_thing has switchable, with plural "devices" has ~on ; Class K16_subject class K2_thing with plural "subjects" has p108_familiar ; Class K17_weapon class K2_thing with plural "weapons" with p20_damage_die 6 with p21_weapon_damage_bonus 0 with p22_dodgability 2 with p23_passive_parry_max 2 with p24_active_parry_max 2 with p25_weapon_attack_bonus 0 with p37_special_weapon_info EMPTY_TEXT_VALUE has ~p116_readied with p172_ranged false with p174_armour_stoppable true ; Class K18_natural_weapon class K17_weapon with plural "natural weapons" with description SC_5 with p20_damage_die 3 with p22_dodgability 2 with p23_passive_parry_max 2 with p24_active_parry_max 0 has privately_named ; Class K39_sword class K17_weapon with plural "swords" with p23_passive_parry_max 4 with p180_material I166_iron with parse_name Parse_Name_GV127 ; Class K40_rapier class K17_weapon with plural "rapiers" with p20_damage_die 5 with p24_active_parry_max 3 with p180_material I166_iron with parse_name Parse_Name_GV128 ; Class K41_dagger class K17_weapon with plural "daggers" with p20_damage_die 3 with p21_weapon_damage_bonus 0 with p22_dodgability 3 with p23_passive_parry_max 1 with p24_active_parry_max 1 with p25_weapon_attack_bonus -1 with p37_special_weapon_info text_routine_0 with p180_material I166_iron ; Class K42_axe class K17_weapon with plural "axes" with p20_damage_die 4 with p21_weapon_damage_bonus 2 with p22_dodgability 3 with p23_passive_parry_max 1 with p24_active_parry_max 2 with p25_weapon_attack_bonus -1 with p180_material I166_iron ; Class K43_scythe class K17_weapon with plural "scythes" with p20_damage_die 10 with p21_weapon_damage_bonus 0 with p22_dodgability 3 with p23_passive_parry_max 1 with p24_active_parry_max 1 with p25_weapon_attack_bonus -2 with p180_material I166_iron ; Class K44_staff_of_pain class K17_weapon with plural "staves of pain" with p20_damage_die 4 with p21_weapon_damage_bonus 0 with p22_dodgability 0 with p23_passive_parry_max 0 with p24_active_parry_max 1 with p25_weapon_attack_bonus 1 with p172_ranged true with p180_material I170_wood ; Class K21_power class K2_thing with plural "powers" with p38_power_level 1 with p39_command_text EMPTY_TEXT_VALUE with p155_granted false with p157_granting nothing ; Class K23_essence class K2_thing with plural "essences" with p27_difficulty_level 1 with p142_mood I121_magical with p180_material I166_iron with parse_name Parse_Name_GV120 ; Class K24_clothing class K2_thing with plural "Clothings" with p61_constriction_prevention 0 has clothing ; Class K25_necklace class K24_clothing with plural "necklaces" ; Class K26_hat class K24_clothing with plural "hats" ; Class K27_shirt class K24_clothing with plural "shirts" ; Class K28_cloak class K24_clothing with plural "cloaks" ; Class K29_shoes class K24_clothing with plural "Shoeses" ; Class K30_trousers class K24_clothing with plural "Trouserss" ; Class K31_belt class K24_clothing with plural "belts" ; Class K32_gauntlets class K24_clothing with plural "Gauntletss" ; Class K33_mask class K24_clothing with plural "masks" ; Class K34_suit class K24_clothing with plural "suits" ; Class K35_grenade class K2_thing with plural "grenades" with p142_mood I122_alchemical with p180_material I166_iron ; Class K45_flash_grenade class K35_grenade with plural "flash grenades" with description SC_6 with p180_material I166_iron ; Class K46_rust_grenade class K35_grenade with plural "rust grenades" with description SC_7 with p180_material I166_iron ; Class K47_smoke_grenade class K35_grenade with plural "smoke grenades" with description SC_8 with p180_material I166_iron ; Class K48_fragmentation_grenade class K35_grenade with plural "fragmentation grenades" with description text_routine_1 with p180_material I166_iron with parse_name Parse_Name_GV129 ; Class K36_salve class K2_thing with plural "salves" with p142_mood I122_alchemical ; Class K49_unguentum_argenti class K36_salve with plural "unguenta argenti" with description SC_9 with parse_name Parse_Name_GV130 ; Class K37_sprayable class K2_thing with plural "sprayables" with p142_mood I122_alchemical ; Class K38_scroll class K2_thing with plural "scrolls" with description SC_10 has ~proper with p142_mood I116_civilised with p180_material I168_paper with p215_actual false with parse_name Parse_Name_GV125 with p56_scroll_effect I212_scroll_teleportation with p57_true_name false with p218_scroll_parsable I226_none_parse with p219_plural_name EMPTY_TEXT_VALUE ; Class K50_package_of_ment class K2_thing with plural "packages of ment" with description text_routine_2 with p180_material I168_paper ; Class K51_extra class K2_thing with plural "extras" has static ; Class K52_symbol_extra class K51_extra with plural "symbol-extras" ; Class K53_rotting_limb class K2_thing with plural "rotting limbs" with p180_material I172_flesh ; Class K9_region class K0_kind with plural "regions" has ~privately_named ; Class K3_direction class K0_kind has scenery, ! class CompassDirection, with plural "directions" has ~privately_named has ~workflag has ~p122_cardinal with p9_opposite I46_north ; Object I46_north "" Compass class K3_direction with short_name "north" with article SC_11 with p9_opposite I49_south has p122_cardinal with vector 0 with list_together 0 with IK3_Count 0 with IK3_Link I47_northeast with KD_Count 3 with name 'north' 'n//' with parse_name Parse_Name_GV1 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I47_northeast "" Compass class K3_direction with short_name "northeast" with article SC_11 with p9_opposite I51_southwest with vector 0 with list_together 0 with IK3_Count 1 with IK3_Link I48_northwest with KD_Count 3 with name 'northeast' 'ne' with parse_name Parse_Name_GV2 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I48_northwest "" Compass class K3_direction with short_name "northwest" with article SC_11 with p9_opposite I50_southeast with vector 0 with list_together 0 with IK3_Count 2 with IK3_Link I49_south with KD_Count 3 with name 'northwest' 'nw' with parse_name Parse_Name_GV3 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I49_south "" Compass class K3_direction with short_name "south" with article SC_11 with p9_opposite I46_north has p122_cardinal with vector 0 with list_together 0 with IK3_Count 3 with IK3_Link I50_southeast with KD_Count 3 with name 'south' 's//' with parse_name Parse_Name_GV4 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I50_southeast "" Compass class K3_direction with short_name "southeast" with article SC_11 with p9_opposite I48_northwest with vector 0 with list_together 0 with IK3_Count 4 with IK3_Link I51_southwest with KD_Count 3 with name 'southeast' 'se' with parse_name Parse_Name_GV5 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I51_southwest "" Compass class K3_direction with short_name "southwest" with article SC_11 with p9_opposite I47_northeast with vector 0 with list_together 0 with IK3_Count 5 with IK3_Link I52_east with KD_Count 3 with name 'southwest' 'sw' with parse_name Parse_Name_GV6 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I52_east "" Compass class K3_direction with short_name "east" with article SC_11 with p9_opposite I53_west has p122_cardinal with vector 0 with list_together 0 with IK3_Count 6 with IK3_Link I53_west with KD_Count 3 with name 'east' 'e//' with parse_name Parse_Name_GV7 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I53_west "" Compass class K3_direction with short_name "west" with article SC_11 with p9_opposite I52_east has p122_cardinal with vector 0 with list_together 0 with IK3_Count 7 with IK3_Link I54_up with KD_Count 3 with name 'west' 'w//' with parse_name Parse_Name_GV8 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I54_up "" Compass class K3_direction with short_name "up" with article SC_11 with p9_opposite I55_down has p122_cardinal with vector 0 with list_together 0 with IK3_Count 8 with IK3_Link I55_down with KD_Count 3 with name 'up' 'u//' with parse_name Parse_Name_GV9 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I55_down "" Compass class K3_direction with short_name "down" with article SC_11 with p9_opposite I54_up has p122_cardinal with vector 0 with list_together 0 with IK3_Count 9 with IK3_Link in_obj with KD_Count 3 with name 'down' 'd//' with parse_name Parse_Name_GV10 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object in_obj "" Compass class K3_direction with short_name "inside" with article SC_11 with p9_opposite out_obj with vector 0 with list_together 0 with IK3_Count 10 with IK3_Link out_obj with KD_Count 3 with name 'inside' 'in' with parse_name Parse_Name_GV11 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object out_obj "" Compass class K3_direction with short_name "outside" with article SC_11 with p9_opposite in_obj with vector 0 with list_together 0 with IK3_Count 11 with IK3_Link nothing with KD_Count 3 with name 'outside' 'out' with parse_name Parse_Name_GV12 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I106_your_natural_weapon "" class K18_natural_weapon with short_name "your natural weapon" has proper with vector 0 with list_together 0 with cap_short_name "Your natural weapon" has mark_as_thing with component_parent selfobj with IK2_Count 1 with IK2_Link I179_rust_spores with IK17_Count 0 with IK17_Link I308_gorgeous_dagger with IK18_Count 0 with IK18_Link I437_swarm_of_daggers_s_natu with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X125 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 0 with IK1_Link X126 with IK20_Count 0 with IK20_Link X126 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X126 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 1 with IK1_Link X127 with IK20_Count 1 with IK20_Link X127 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X127 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 2 with IK1_Link X128 with IK20_Count 2 with IK20_Link X128 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X128 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 3 with IK1_Link X129 with IK20_Count 3 with IK20_Link X129 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X129 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 4 with IK1_Link X130 with IK20_Count 4 with IK20_Link X130 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X130 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 5 with IK1_Link X131 with IK20_Count 5 with IK20_Link X131 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X131 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 6 with IK1_Link X132 with IK20_Count 6 with IK20_Link X132 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X132 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 7 with IK1_Link X133 with IK20_Count 7 with IK20_Link X133 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X133 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 8 with IK1_Link X134 with IK20_Count 8 with IK20_Link X134 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X134 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 9 with IK1_Link X135 with IK20_Count 9 with IK20_Link X135 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X135 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 10 with IK1_Link X136 with IK20_Count 10 with IK20_Link X136 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X136 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 11 with IK1_Link X137 with IK20_Count 11 with IK20_Link X137 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X137 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 12 with IK1_Link X138 with IK20_Count 12 with IK20_Link X138 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X138 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 13 with IK1_Link X139 with IK20_Count 13 with IK20_Link X139 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X139 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 14 with IK1_Link X140 with IK20_Count 14 with IK20_Link X140 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X140 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 15 with IK1_Link X141 with IK20_Count 15 with IK20_Link X141 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X141 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 16 with IK1_Link X142 with IK20_Count 16 with IK20_Link X142 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X142 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 17 with IK1_Link X143 with IK20_Count 17 with IK20_Link X143 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X143 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 18 with IK1_Link X144 with IK20_Count 18 with IK20_Link X144 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X144 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 19 with IK1_Link X145 with IK20_Count 19 with IK20_Link X145 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X145 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 20 with IK1_Link X146 with IK20_Count 20 with IK20_Link X146 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X146 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 21 with IK1_Link X147 with IK20_Count 21 with IK20_Link X147 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X147 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 22 with IK1_Link X148 with IK20_Count 22 with IK20_Link X148 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X148 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 23 with IK1_Link X149 with IK20_Count 23 with IK20_Link X149 with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object X149 "" class K20_tunnel with short_name "Tunnel" with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 24 with IK1_Link I186_moving_through_solid_ro with IK20_Count 24 with IK20_Link nothing with KD_Count 20 with name 'tunnel' 'tunnels//p' ; Object I179_rust_spores "" class K7_backdrop with short_name "Rust spores" has pluralname has proper with vector 0 with found_in FoundEverywhere with list_together 0 with cap_short_name "Rust spores" has mark_as_thing with IK2_Count 2 with IK2_Link I185_clouds_of_smoke with IK7_Count 0 with IK7_Link I185_clouds_of_smoke with KD_Count 7 with name 'rust' 'spores' 'brown' 'moss' 'spore' with parse_name Parse_Name_GV116 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I185_clouds_of_smoke "" class K7_backdrop with short_name "Clouds of smoke" has pluralname has proper with vector 0 with found_in FoundEverywhere with list_together 0 with cap_short_name "Clouds of smoke" has mark_as_thing with IK2_Count 3 with IK2_Link I239_scroll_of_teleportation with IK7_Count 1 with IK7_Link nothing with KD_Count 7 with name 'clouds' 'of' 'smoke' 'cloud' 'fog' 'vapour' 'vaopurs' 'vapor' 'vapors' 'vapours' 'vapour' with parse_name Parse_Name_GV119 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I186_moving_through_solid_ro "" class K1_room with short_name "Moving through solid rock" with description SC_12 has proper has ~p131_placeable with p133_habitable false with vector 0 with room_index -1 with list_together 0 with cap_short_name "Moving through solid rock" has mark_as_room with IK1_Count 25 with IK1_Link I375_entrance_hall with KD_Count 1 with name 'moving' 'through' 'solid' 'rock' ; Object I239_scroll_of_teleportation "" class K38_scroll with short_name "scroll of teleportation" with description SC_13 with p56_scroll_effect I212_scroll_teleportation with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_14 with vector 0 with list_together 0 with cap_short_name "Scroll of teleportation" has mark_as_thing with IK2_Count 4 with IK2_Link I240_scroll_of_identify with IK38_Count 0 with IK38_Link I240_scroll_of_identify with KD_Count 38 with name 'scroll' 'of' 'teleportation' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I240_scroll_of_identify "" class K38_scroll with short_name SC_15 with description SC_16 with p56_scroll_effect I213_scroll_identify with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_17 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 5 with IK2_Link I241_scroll_of_remove_curse with IK38_Count 1 with IK38_Link I241_scroll_of_remove_curse with KD_Count 38 with name 'scroll' 'of' 'identify' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I241_scroll_of_remove_curse "" class K38_scroll with short_name SC_18 with description SC_19 with p56_scroll_effect I214_scroll_remove_curse with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_20 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 6 with IK2_Link I242_scroll_of_ghoulificatio with IK38_Count 2 with IK38_Link I242_scroll_of_ghoulificatio with KD_Count 38 with name 'scroll' 'of' 'remove' 'curse' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I242_scroll_of_ghoulificatio "" class K38_scroll with short_name SC_21 with description SC_22 with p56_scroll_effect I215_scroll_ghoulification with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_23 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 7 with IK2_Link I243_scroll_of_shadows with IK38_Count 3 with IK38_Link I243_scroll_of_shadows with KD_Count 38 with name 'scroll' 'of' 'ghoulification' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I243_scroll_of_shadows "" class K38_scroll with short_name SC_24 with description SC_25 with p56_scroll_effect I216_scroll_shadows with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_26 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 8 with IK2_Link I244_scroll_of_summoning with IK38_Count 4 with IK38_Link I244_scroll_of_summoning with KD_Count 38 with name 'scroll' 'of' 'shadows' 'shadow' with parse_name Parse_Name_GV131 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I244_scroll_of_summoning "" class K38_scroll with short_name SC_27 with description SC_28 with p56_scroll_effect I217_scroll_summoning with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_29 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 9 with IK2_Link I245_scroll_of_fireworks with IK38_Count 5 with IK38_Link I245_scroll_of_fireworks with KD_Count 38 with name 'scroll' 'of' 'summoning' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I245_scroll_of_fireworks "" class K38_scroll with short_name SC_30 with description SC_31 with p56_scroll_effect I218_scroll_fireworks with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_32 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 10 with IK2_Link I246_scroll_of_the_blade with IK38_Count 6 with IK38_Link I246_scroll_of_the_blade with KD_Count 38 with name 'scroll' 'of' 'fireworks' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I246_scroll_of_the_blade "" class K38_scroll with short_name SC_33 with description SC_34 with p56_scroll_effect I219_scroll_blade with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_35 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 11 with IK2_Link I247_scroll_of_protection with IK38_Count 7 with IK38_Link I247_scroll_of_protection with KD_Count 38 with name 'scroll' 'of' 'the' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I247_scroll_of_protection "" class K38_scroll with short_name SC_36 with description SC_37 with p56_scroll_effect I220_scroll_protection with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_38 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 12 with IK2_Link I248_scroll_of_etherealness with IK38_Count 8 with IK38_Link I248_scroll_of_etherealness with KD_Count 38 with name 'scroll' 'of' 'protection' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I248_scroll_of_etherealness "" class K38_scroll with short_name SC_39 with description SC_40 with p56_scroll_effect I221_scroll_ethereal with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_41 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 13 with IK2_Link I249_scroll_of_skill with IK38_Count 9 with IK38_Link I249_scroll_of_skill with KD_Count 38 with name 'scroll' 'of' 'etherealness' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I249_scroll_of_skill "" class K38_scroll with short_name SC_42 with description SC_43 with p56_scroll_effect I222_scroll_skill with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_44 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 14 with IK2_Link I250_scroll_of_death with IK38_Count 10 with IK38_Link I250_scroll_of_death with KD_Count 38 with name 'scroll' 'of' 'skill' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I250_scroll_of_death "" class K38_scroll with short_name SC_45 with description SC_46 with p56_scroll_effect I223_scroll_death with p57_true_name 1 has proper with p180_material I168_paper with p218_scroll_parsable I226_none_parse with p219_plural_name SC_47 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 15 with IK2_Link I251_scroll_labelled_mort_ei with IK38_Count 11 with IK38_Link I251_scroll_labelled_mort_ei with KD_Count 38 with name 'scroll' 'of' 'death' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I251_scroll_labelled_mort_ei "" class K38_scroll with short_name "scroll labelled MORT EILYSH" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I227_mort_eilysh_parse with p219_plural_name SC_48 with vector 0 with list_together 0 with cap_short_name "Scroll labelled MORT EILYSH" has mark_as_thing with IK2_Count 16 with IK2_Link I252_scroll_labelled_naar_od with IK38_Count 12 with IK38_Link I252_scroll_labelled_naar_od with KD_Count 38 with name 'scroll' 'labelled' 'mort' 'eilysh' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I252_scroll_labelled_naar_od "" class K38_scroll with short_name "scroll labelled NAAR OD ERAE" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I228_naar_od_erae_parse with p219_plural_name SC_49 with vector 0 with list_together 0 with cap_short_name "Scroll labelled NAAR OD ERAE" has mark_as_thing with IK2_Count 17 with IK2_Link I253_scroll_labelled_dolp_ze with IK38_Count 13 with IK38_Link I253_scroll_labelled_dolp_ze with KD_Count 38 with name 'scroll' 'labelled' 'naar' 'od' 'erae' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I253_scroll_labelled_dolp_ze "" class K38_scroll with short_name "scroll labelled DOLP ZEEZ" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I229_dolp_zeez_parse with p219_plural_name SC_50 with vector 0 with list_together 0 with cap_short_name "Scroll labelled DOLP ZEEZ" has mark_as_thing with IK2_Count 18 with IK2_Link I254_scroll_labelled_chetnak with IK38_Count 14 with IK38_Link I254_scroll_labelled_chetnak with KD_Count 38 with name 'scroll' 'labelled' 'dolp' 'zeez' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I254_scroll_labelled_chetnak "" class K38_scroll with short_name "scroll labelled CHETNAK" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I230_chetnak_parse with p219_plural_name SC_51 with vector 0 with list_together 0 with cap_short_name "Scroll labelled CHETNAK" has mark_as_thing with IK2_Count 19 with IK2_Link I255_scroll_labelled_cistrob with IK38_Count 15 with IK38_Link I255_scroll_labelled_cistrob with KD_Count 38 with name 'scroll' 'labelled' 'chetnak' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I255_scroll_labelled_cistrob "" class K38_scroll with short_name "scroll labelled CISTROB JIRSGEV" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I231_cistrob_jirsgev_parse with p219_plural_name SC_52 with vector 0 with list_together 0 with cap_short_name "Scroll labelled CISTROB JIRSGEV" has mark_as_thing with IK2_Count 20 with IK2_Link I256_scroll_labelled_twan_me with IK38_Count 16 with IK38_Link I256_scroll_labelled_twan_me with KD_Count 38 with name 'scroll' 'labelled' 'cistrob' 'jirsgev' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I256_scroll_labelled_twan_me "" class K38_scroll with short_name "scroll labelled TWAN METIER" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I232_twan_metier_parse with p219_plural_name SC_53 with vector 0 with list_together 0 with cap_short_name "Scroll labelled TWAN METIER" has mark_as_thing with IK2_Count 21 with IK2_Link I257_scroll_labelled_hermei_ with IK38_Count 17 with IK38_Link I257_scroll_labelled_hermei_ with KD_Count 38 with name 'scroll' 'labelled' 'twan' 'metier' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I257_scroll_labelled_hermei_ "" class K38_scroll with short_name "scroll labelled HERMEI LE SCHIM" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I233_hermei_le_schim_parse with p219_plural_name SC_54 with vector 0 with list_together 0 with cap_short_name "Scroll labelled HERMEI LE SCHIM" has mark_as_thing with IK2_Count 22 with IK2_Link I258_scroll_labelled_lonsifi with IK38_Count 18 with IK38_Link I258_scroll_labelled_lonsifi with KD_Count 38 with name 'scroll' 'labelled' 'hermei' 'le' 'schim' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I258_scroll_labelled_lonsifi "" class K38_scroll with short_name "scroll labelled LONSIFIRA" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I234_lonsifira_parse with p219_plural_name SC_55 with vector 0 with list_together 0 with cap_short_name "Scroll labelled LONSIFIRA" has mark_as_thing with IK2_Count 23 with IK2_Link I259_scroll_labelled_kripmet with IK38_Count 19 with IK38_Link I259_scroll_labelled_kripmet with KD_Count 38 with name 'scroll' 'labelled' 'lonsifira' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I259_scroll_labelled_kripmet "" class K38_scroll with short_name "scroll labelled KRIPMETEEL" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I235_kripmeteel_parse with p219_plural_name SC_56 with vector 0 with list_together 0 with cap_short_name "Scroll labelled KRIPMETEEL" has mark_as_thing with IK2_Count 24 with IK2_Link I260_scroll_labelled_souspen with IK38_Count 20 with IK38_Link I260_scroll_labelled_souspen with KD_Count 38 with name 'scroll' 'labelled' 'kripmeteel' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I260_scroll_labelled_souspen "" class K38_scroll with short_name "scroll labelled SOUSPENOT" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I236_souspenot_parse with p219_plural_name SC_57 with vector 0 with list_together 0 with cap_short_name "Scroll labelled SOUSPENOT" has mark_as_thing with IK2_Count 25 with IK2_Link I261_scroll_labelled_shalm_s with IK38_Count 21 with IK38_Link I261_scroll_labelled_shalm_s with KD_Count 38 with name 'scroll' 'labelled' 'souspenot' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I261_scroll_labelled_shalm_s "" class K38_scroll with short_name "scroll labelled SHALM SAWESAS" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I237_shalm_sawesas_parse with p219_plural_name SC_58 with vector 0 with list_together 0 with cap_short_name "Scroll labelled SHALM SAWESAS" has mark_as_thing with IK2_Count 26 with IK2_Link I262_scroll_labelled_zyxyz with IK38_Count 22 with IK38_Link I262_scroll_labelled_zyxyz with KD_Count 38 with name 'scroll' 'labelled' 'shalm' 'sawesas' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I262_scroll_labelled_zyxyz "" class K38_scroll with short_name "scroll labelled ZYXYZ" with p56_scroll_effect I224_no_effect with p57_true_name 0 has proper with p218_scroll_parsable I238_zyxyz_parse with p219_plural_name SC_59 with vector 0 with list_together 0 with cap_short_name "Scroll labelled ZYXYZ" has mark_as_thing with IK2_Count 27 with IK2_Link I270_non_thing with IK38_Count 23 with IK38_Link nothing with KD_Count 38 with name 'scroll' 'labelled' 'zyxyz' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I270_non_thing "" class K2_thing with short_name "non-thing" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 29 with IK2_Link I271_essence_of_caution with KD_Count 2 with name 'non-thing' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I271_essence_of_caution "" class K23_essence with short_name "essence of caution" with article SC_11 with description text_routine_3 with p142_mood I121_magical with p180_material I166_iron with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 30 with IK2_Link I272_essence_of_rage with IK23_Count 0 with IK23_Link I272_essence_of_rage with KD_Count 23 with name 'essence' 'of' 'caution' 'essence' 'small' 'metal' 'bottle' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I272_essence_of_rage "" class K23_essence with short_name "essence of rage" with article SC_11 with description text_routine_4 with p142_mood I121_magical with p180_material I166_iron with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 31 with IK2_Link I273_essence_of_patience with IK23_Count 1 with IK23_Link I273_essence_of_patience with KD_Count 23 with name 'essence' 'of' 'rage' 'essence' 'small' 'metal' 'bottle' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I273_essence_of_patience "" class K23_essence with short_name "essence of patience" with article SC_11 with description text_routine_5 with p142_mood I121_magical with p180_material I166_iron with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 32 with IK2_Link I274_tormenting_necklace with IK23_Count 2 with IK23_Link I352_essence_of_greed with KD_Count 23 with name 'essence' 'of' 'patience' 'essence' 'small' 'metal' 'bottle' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I274_tormenting_necklace "" class K25_necklace with short_name "tormenting necklace" with description text_routine_6 with p142_mood I119_deathly with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 33 with IK2_Link I275_goggles_of_acuity with IK24_Count 0 with IK24_Link I275_goggles_of_acuity with IK25_Count 0 with IK25_Link nothing with KD_Count 25 with name 'tormenting' 'necklace' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I275_goggles_of_acuity "" class K33_mask with short_name "goggles of acuity" with article SC_11 with description text_routine_7 has pluralname with p142_mood I116_civilised with p180_material I171_leather with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 34 with IK2_Link I276_goggles_of_blindness with IK24_Count 1 with IK24_Link I276_goggles_of_blindness with IK33_Count 0 with IK33_Link I276_goggles_of_blindness with KD_Count 33 with name 'goggles' 'of' 'acuity' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I276_goggles_of_blindness "" class K33_mask with short_name "goggles of blindness" with article SC_11 with description SC_60 has pluralname with p180_material I171_leather with p222_cursed true with p224_curse_identified true with vector 0 with list_together 0 has mark_as_thing with IK2_Count 35 with IK2_Link I277_crown_of_the_empire with IK24_Count 2 with IK24_Link I277_crown_of_the_empire with IK33_Count 1 with IK33_Link I305_war_mask with KD_Count 33 with name 'goggles' 'of' 'blindness' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I277_crown_of_the_empire "" class K26_hat with short_name "crown of the empire" with article SC_11 with description text_routine_8 with p142_mood I116_civilised with p180_material I166_iron with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 36 with IK2_Link I278_crown_of_hargo with IK24_Count 3 with IK24_Link I278_crown_of_hargo with IK26_Count 0 with IK26_Link I278_crown_of_hargo with KD_Count 26 with name 'crown' 'of' 'the' 'empire' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I278_crown_of_hargo "" class K26_hat with short_name "crown of Hargo" with article SC_11 with description text_routine_9 with p180_material I166_iron with p222_cursed true with p224_curse_identified true with vector 0 with list_together 0 has mark_as_thing with IK2_Count 37 with IK2_Link I280_small_flash_grenade_pac with IK24_Count 4 with IK24_Link I304_metastasio_s_hat with IK26_Count 1 with IK26_Link I304_metastasio_s_hat with KD_Count 26 with name 'crown' 'of' 'hargo' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I280_small_flash_grenade_pac "" class K22_treasure_pack with short_name "small-flash-grenade-pack" with p142_mood I120_elemental with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 38 with IK2_Link X281 with IK5_Count 0 with IK5_Link I283_large_flash_grenade_pac with IK22_Count 0 with IK22_Link I283_large_flash_grenade_pac with KD_Count 22 with name 'small-flash-grenade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X281 "" class K45_flash_grenade with short_name "flash grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 39 with IK2_Link X282 with IK35_Count 0 with IK35_Link X282 with IK45_Count 0 with IK45_Link X282 with KD_Count 45 with name 'flash' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X282 "" class K45_flash_grenade with short_name "flash grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 40 with IK2_Link I283_large_flash_grenade_pac with IK35_Count 1 with IK35_Link X284 with IK45_Count 1 with IK45_Link X284 with KD_Count 45 with name 'flash' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I283_large_flash_grenade_pac "" class K22_treasure_pack with short_name "large-flash-grenade-pack" with p142_mood I120_elemental with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 41 with IK2_Link X284 with IK5_Count 1 with IK5_Link I288_small_rust_grenade_pack with IK22_Count 1 with IK22_Link I288_small_rust_grenade_pack with KD_Count 22 with name 'large-flash-grenade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X284 "" class K45_flash_grenade with short_name "flash grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 42 with IK2_Link X285 with IK35_Count 2 with IK35_Link X285 with IK45_Count 2 with IK45_Link X285 with KD_Count 45 with name 'flash' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X285 "" class K45_flash_grenade with short_name "flash grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 43 with IK2_Link X286 with IK35_Count 3 with IK35_Link X286 with IK45_Count 3 with IK45_Link X286 with KD_Count 45 with name 'flash' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X286 "" class K45_flash_grenade with short_name "flash grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 44 with IK2_Link I288_small_rust_grenade_pack with IK35_Count 4 with IK35_Link X289 with IK45_Count 4 with IK45_Link nothing with KD_Count 45 with name 'flash' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I288_small_rust_grenade_pack "" class K22_treasure_pack with short_name "small-rust-grenade-pack" with p142_mood I118_barren with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 45 with IK2_Link X289 with IK5_Count 2 with IK5_Link I291_small_smoke_grenade_pac with IK22_Count 2 with IK22_Link I291_small_smoke_grenade_pac with KD_Count 22 with name 'small-rust-grenade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X289 "" class K46_rust_grenade with short_name "rust grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 46 with IK2_Link I291_small_smoke_grenade_pac with IK35_Count 5 with IK35_Link X292 with IK46_Count 0 with IK46_Link nothing with KD_Count 46 with name 'rust' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I291_small_smoke_grenade_pac "" class K22_treasure_pack with short_name "small-smoke-grenade-pack" with p142_mood I122_alchemical with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 47 with IK2_Link X292 with IK5_Count 3 with IK5_Link I293_large_smoke_grenade_pac with IK22_Count 3 with IK22_Link I293_large_smoke_grenade_pac with KD_Count 22 with name 'small-smoke-grenade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X292 "" class K47_smoke_grenade with short_name "smoke grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 48 with IK2_Link I293_large_smoke_grenade_pac with IK35_Count 6 with IK35_Link X294 with IK47_Count 0 with IK47_Link X294 with KD_Count 47 with name 'smoke' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I293_large_smoke_grenade_pac "" class K22_treasure_pack with short_name "large-smoke-grenade-pack" with p142_mood I122_alchemical with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 49 with IK2_Link X294 with IK5_Count 4 with IK5_Link I298_etc with IK22_Count 4 with IK22_Link I298_etc with KD_Count 22 with name 'large-smoke-grenade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X294 "" class K47_smoke_grenade with short_name "smoke grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 50 with IK2_Link X295 with IK35_Count 7 with IK35_Link X295 with IK47_Count 1 with IK47_Link X295 with KD_Count 47 with name 'smoke' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X295 "" class K47_smoke_grenade with short_name "smoke grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 51 with IK2_Link X296 with IK35_Count 8 with IK35_Link X296 with IK47_Count 2 with IK47_Link X296 with KD_Count 47 with name 'smoke' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X296 "" class K47_smoke_grenade with short_name "smoke grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 52 with IK2_Link I298_etc with IK35_Count 9 with IK35_Link X299 with IK47_Count 3 with IK47_Link nothing with KD_Count 47 with name 'smoke' 'grenade' 'grenades//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I298_etc "" class K22_treasure_pack with short_name "small-fragmentation-grenade-pack" with p142_mood I122_alchemical with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 53 with IK2_Link X299 with IK5_Count 5 with IK5_Link I300_etc with IK22_Count 5 with IK22_Link I300_etc with KD_Count 22 with name 'small-fragmentation-grenade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X299 "" class K48_fragmentation_grenade with short_name "fragmentation grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 54 with IK2_Link I300_etc with IK35_Count 10 with IK35_Link X301 with IK48_Count 0 with IK48_Link X301 with KD_Count 48 with name 'fragmentation' 'grenade' 'grenades//p' 'frag' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I300_etc "" class K22_treasure_pack with short_name "large-fragmentation-grenade-pack" with p142_mood I122_alchemical with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 55 with IK2_Link X301 with IK5_Count 6 with IK5_Link I313_small_unguentum_argenti with IK22_Count 6 with IK22_Link I313_small_unguentum_argenti with KD_Count 22 with name 'large-fragmentation-grenade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X301 "" class K48_fragmentation_grenade with short_name "fragmentation grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 56 with IK2_Link X302 with IK35_Count 11 with IK35_Link X302 with IK48_Count 1 with IK48_Link X302 with KD_Count 48 with name 'fragmentation' 'grenade' 'grenades//p' 'frag' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X302 "" class K48_fragmentation_grenade with short_name "fragmentation grenade" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 57 with IK2_Link I303_blessed_grenade with IK35_Count 12 with IK35_Link I303_blessed_grenade with IK48_Count 2 with IK48_Link nothing with KD_Count 48 with name 'fragmentation' 'grenade' 'grenades//p' 'frag' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I303_blessed_grenade "" class K35_grenade with short_name "Blessed Grenade" with article SC_11 with description SC_61 with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 58 with IK2_Link I304_metastasio_s_hat with IK35_Count 13 with IK35_Link nothing with KD_Count 35 with name 'blessed' 'grenade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I304_metastasio_s_hat "" class K26_hat with short_name "Metastasio's hat" with description SC_62 has proper with p142_mood I122_alchemical with p180_material I169_cloth with p214_valuation I188_minor with vector 0 with list_together 0 with cap_short_name "Metastasio's hat" has mark_as_thing with IK2_Count 59 with IK2_Link I305_war_mask with IK24_Count 5 with IK24_Link I305_war_mask with IK26_Count 2 with IK26_Link nothing with KD_Count 26 with name 'metastasio^s' 'hat' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I305_war_mask "" class K33_mask with short_name "war mask" with description SC_63 with p142_mood I117_religious with p180_material I166_iron with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 60 with IK2_Link I306_smoky_robe with IK24_Count 6 with IK24_Link I306_smoky_robe with IK33_Count 2 with IK33_Link nothing with KD_Count 33 with name 'war' 'mask' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I306_smoky_robe "" class K27_shirt with short_name "smoky robe" with description SC_64 with p142_mood I122_alchemical with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 61 with IK2_Link I307_smoke_robe with IK24_Count 7 with IK24_Link I343_asbestos_vest with IK27_Count 0 with IK27_Link I343_asbestos_vest with KD_Count 27 with name 'smoky' 'robe' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I307_smoke_robe "" class K2_thing with short_name "smoke robe" with p180_material I169_cloth with vector 0 with list_together 0 has mark_as_thing with IK2_Count 62 with IK2_Link I308_gorgeous_dagger with KD_Count 2 with name 'smoke' 'robe' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I308_gorgeous_dagger "" class K41_dagger with short_name "gorgeous dagger" with description SC_65 with p142_mood I116_civilised with p180_material I166_iron with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 63 with IK2_Link I309_fearsome_axe with IK17_Count 2 with IK17_Link I309_fearsome_axe with IK41_Count 0 with IK41_Link I346_vampiric_dagger with KD_Count 41 with name 'gorgeous' 'dagger' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I309_fearsome_axe "" class K42_axe with short_name "fearsome axe" with description SC_66 with p20_damage_die 5 with p24_active_parry_max 1 with p142_mood I119_deathly with p180_material I166_iron with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 64 with IK2_Link I310_smoky_blade with IK17_Count 3 with IK17_Link I310_smoky_blade with IK42_Count 0 with IK42_Link I345_executioner_s_axe with KD_Count 42 with name 'fearsome' 'axe' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I310_smoky_blade "" class K39_sword with short_name "smoky blade" with description SC_67 with p142_mood I122_alchemical with p180_material I166_iron with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 65 with IK2_Link I311_dimensional_anchor with IK17_Count 4 with IK17_Link I332_adamantine_blade with IK39_Count 0 with IK39_Link I468_fafhrd_s_sword with KD_Count 39 with name 'smoky' 'blade' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I311_dimensional_anchor "" class K2_thing with short_name "dimensional anchor" with description SC_68 with p142_mood I121_magical with p180_material I174_stone with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 66 with IK2_Link I313_small_unguentum_argenti with KD_Count 2 with name 'dimensional' 'anchor' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I313_small_unguentum_argenti "" class K22_treasure_pack with short_name "small-unguentum-argenti-pack" with p142_mood I122_alchemical with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 67 with IK2_Link X314 with IK5_Count 7 with IK5_Link I315_large_unguentum_argenti with IK22_Count 7 with IK22_Link I315_large_unguentum_argenti with KD_Count 22 with name 'small-unguentum-argenti-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X314 "" class K49_unguentum_argenti with short_name "unguentum argenti" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 68 with IK2_Link I315_large_unguentum_argenti with IK36_Count 0 with IK36_Link X316 with IK49_Count 0 with IK49_Link X316 with KD_Count 49 with name 'unguentum' 'argenti' 'unguenta//p' 'salve' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I315_large_unguentum_argenti "" class K22_treasure_pack with short_name "large-unguentum-argenti-pack" with p142_mood I122_alchemical with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 69 with IK2_Link X316 with IK5_Count 8 with IK5_Link I318_etc with IK22_Count 8 with IK22_Link I318_etc with KD_Count 22 with name 'large-unguentum-argenti-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X316 "" class K49_unguentum_argenti with short_name "unguentum argenti" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 70 with IK2_Link X317 with IK36_Count 1 with IK36_Link X317 with IK49_Count 1 with IK49_Link X317 with KD_Count 49 with name 'unguentum' 'argenti' 'unguenta//p' 'salve' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> X317 "" class K49_unguentum_argenti with short_name "unguentum argenti" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 71 with IK2_Link I318_etc with IK36_Count 2 with IK36_Link nothing with IK49_Count 2 with IK49_Link nothing with KD_Count 49 with name 'unguentum' 'argenti' 'unguenta//p' 'salve' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I318_etc "" class K22_treasure_pack with short_name "small-scroll-of-teleportation-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 72 with IK2_Link I319_etc with IK5_Count 9 with IK5_Link I319_etc with IK22_Count 9 with IK22_Link I319_etc with KD_Count 22 with name 'small-scroll-of-teleportation-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I319_etc "" class K22_treasure_pack with short_name "second-small-scroll-of-teleportation-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 73 with IK2_Link I320_etc with IK5_Count 10 with IK5_Link I320_etc with IK22_Count 10 with IK22_Link I320_etc with KD_Count 22 with name 'second-small-scroll-of-teleportati' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I320_etc "" class K22_treasure_pack with short_name "large-scroll-of-teleportation-pack" with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 74 with IK2_Link I321_etc with IK5_Count 11 with IK5_Link I321_etc with IK22_Count 11 with IK22_Link I321_etc with KD_Count 22 with name 'large-scroll-of-teleportation-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I321_etc "" class K22_treasure_pack with short_name "small-scroll-of-ghoulification-pack" with p27_difficulty_level 1 with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 75 with IK2_Link I322_small_scroll_of_identif with IK5_Count 12 with IK5_Link I322_small_scroll_of_identif with IK22_Count 12 with IK22_Link I322_small_scroll_of_identif with KD_Count 22 with name 'small-scroll-of-ghoulification-pac' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I322_small_scroll_of_identif "" class K22_treasure_pack with short_name "small-scroll-of-identify-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 76 with IK2_Link I323_etc with IK5_Count 13 with IK5_Link I323_etc with IK22_Count 13 with IK22_Link I323_etc with KD_Count 22 with name 'small-scroll-of-identify-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I323_etc "" class K22_treasure_pack with short_name "second-small-scroll-of-identify-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 77 with IK2_Link I324_etc with IK5_Count 14 with IK5_Link I324_etc with IK22_Count 14 with IK22_Link I324_etc with KD_Count 22 with name 'second-small-scroll-of-identify-pa' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I324_etc "" class K22_treasure_pack with short_name "small-scroll-of-remove-curse-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 78 with IK2_Link I325_etc with IK5_Count 15 with IK5_Link I325_etc with IK22_Count 15 with IK22_Link I325_etc with KD_Count 22 with name 'small-scroll-of-remove-curse-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I325_etc "" class K22_treasure_pack with short_name "second-small-scroll-of-remove-curse-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 79 with IK2_Link I326_etc with IK5_Count 16 with IK5_Link I326_etc with IK22_Count 16 with IK22_Link I326_etc with KD_Count 22 with name 'second-small-scroll-of-remove-curs' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I326_etc "" class K22_treasure_pack with short_name "large-scroll-of-remove-curse-pack" with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 80 with IK2_Link I327_small_scroll_of_shadows with IK5_Count 17 with IK5_Link I327_small_scroll_of_shadows with IK22_Count 17 with IK22_Link I327_small_scroll_of_shadows with KD_Count 22 with name 'large-scroll-of-remove-curse-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I327_small_scroll_of_shadows "" class K22_treasure_pack with short_name "small-scroll-of-shadows-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 81 with IK2_Link I328_etc with IK5_Count 18 with IK5_Link I328_etc with IK22_Count 18 with IK22_Link I328_etc with KD_Count 22 with name 'small-scroll-of-shadows-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I328_etc "" class K22_treasure_pack with short_name "second-small-scroll-of-shadows-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 82 with IK2_Link I329_large_scroll_of_shadows with IK5_Count 19 with IK5_Link I329_large_scroll_of_shadows with IK22_Count 19 with IK22_Link I329_large_scroll_of_shadows with KD_Count 22 with name 'second-small-scroll-of-shadows-pac' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I329_large_scroll_of_shadows "" class K22_treasure_pack with short_name "large-scroll-of-shadows-pack" with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 83 with IK2_Link I330_small_scroll_of_summoni with IK5_Count 20 with IK5_Link I330_small_scroll_of_summoni with IK22_Count 20 with IK22_Link I330_small_scroll_of_summoni with KD_Count 22 with name 'large-scroll-of-shadows-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I330_small_scroll_of_summoni "" class K22_treasure_pack with short_name "small-scroll-of-summoning-pack" with p27_difficulty_level 1 with p142_mood I121_magical with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 84 with IK2_Link I331_small_scroll_of_firewor with IK5_Count 21 with IK5_Link I331_small_scroll_of_firewor with IK22_Count 21 with IK22_Link I331_small_scroll_of_firewor with KD_Count 22 with name 'small-scroll-of-summoning-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I331_small_scroll_of_firewor "" class K22_treasure_pack with short_name "small-scroll-of-fireworks-pack" with p142_mood I121_magical with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 85 with IK2_Link I332_adamantine_blade with IK5_Count 22 with IK5_Link I333_small_scroll_of_the_bla with IK22_Count 22 with IK22_Link I333_small_scroll_of_the_bla with KD_Count 22 with name 'small-scroll-of-fireworks-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I332_adamantine_blade "" class K17_weapon with short_name "adamantine blade" with description SC_69 with p180_material I177_adamant with vector 0 with list_together 0 has mark_as_thing with IK2_Count 86 with IK2_Link I333_small_scroll_of_the_bla with IK17_Count 5 with IK17_Link I345_executioner_s_axe with KD_Count 17 with name 'adamantine' 'blade' 'sword' with parse_name Parse_Name_GV132 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I333_small_scroll_of_the_bla "" class K22_treasure_pack with short_name "small-scroll-of-the-blade-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 87 with IK2_Link I334_large_scroll_of_the_bla with IK5_Count 23 with IK5_Link I334_large_scroll_of_the_bla with IK22_Count 23 with IK22_Link I334_large_scroll_of_the_bla with KD_Count 22 with name 'small-scroll-of-the-blade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I334_large_scroll_of_the_bla "" class K22_treasure_pack with short_name "large-scroll-of-the-blade-pack" with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 88 with IK2_Link I335_etc with IK5_Count 24 with IK5_Link I335_etc with IK22_Count 24 with IK22_Link I335_etc with KD_Count 22 with name 'large-scroll-of-the-blade-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I335_etc "" class K22_treasure_pack with short_name "small-scroll-of-protection-pack" with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 89 with IK2_Link I336_small_scroll_of_skill_p with IK5_Count 25 with IK5_Link I336_small_scroll_of_skill_p with IK22_Count 25 with IK22_Link I336_small_scroll_of_skill_p with KD_Count 22 with name 'small-scroll-of-protection-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I336_small_scroll_of_skill_p "" class K22_treasure_pack with short_name "small-scroll-of-skill-pack" with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 90 with IK2_Link I337_large_scroll_of_skill_p with IK5_Count 26 with IK5_Link I337_large_scroll_of_skill_p with IK22_Count 26 with IK22_Link I337_large_scroll_of_skill_p with KD_Count 22 with name 'small-scroll-of-skill-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I337_large_scroll_of_skill_p "" class K22_treasure_pack with short_name "large-scroll-of-skill-pack" with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 91 with IK2_Link I338_small_scroll_of_death_p with IK5_Count 27 with IK5_Link I338_small_scroll_of_death_p with IK22_Count 27 with IK22_Link I338_small_scroll_of_death_p with KD_Count 22 with name 'large-scroll-of-skill-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I338_small_scroll_of_death_p "" class K22_treasure_pack with short_name "small-scroll-of-death-pack" with p27_difficulty_level 1 with p142_mood I116_civilised with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 92 with IK2_Link I339_large_scroll_of_death_p with IK5_Count 28 with IK5_Link I339_large_scroll_of_death_p with IK22_Count 28 with IK22_Link I339_large_scroll_of_death_p with KD_Count 22 with name 'small-scroll-of-death-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I339_large_scroll_of_death_p "" class K22_treasure_pack with short_name "large-scroll-of-death-pack" with p27_difficulty_level 1 with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 93 with IK2_Link I340_deathly_pack with IK5_Count 29 with IK5_Link I340_deathly_pack with IK22_Count 29 with IK22_Link I340_deathly_pack with KD_Count 22 with name 'large-scroll-of-death-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I340_deathly_pack "" class K22_treasure_pack with short_name "deathly-pack" with p27_difficulty_level 1 with p142_mood I119_deathly with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 94 with IK2_Link I341_combat_scroll_pack with IK5_Count 30 with IK5_Link I341_combat_scroll_pack with IK22_Count 30 with IK22_Link I341_combat_scroll_pack with KD_Count 22 with name 'deathly-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I341_combat_scroll_pack "" class K22_treasure_pack with short_name "combat-scroll-pack" with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 95 with IK2_Link I342_thief_scroll_pack with IK5_Count 31 with IK5_Link I342_thief_scroll_pack with IK22_Count 31 with IK22_Link I342_thief_scroll_pack with KD_Count 22 with name 'combat-scroll-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I342_thief_scroll_pack "" class K22_treasure_pack with short_name "thief-scroll-pack" with p27_difficulty_level 1 with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 96 with IK2_Link I343_asbestos_vest with IK5_Count 32 with IK5_Link I386_seething_lake_of_lava with IK22_Count 32 with IK22_Link nothing with KD_Count 22 with name 'thief-scroll-pack' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I343_asbestos_vest "" class K27_shirt with short_name "asbestos vest" with description SC_70 with p142_mood I122_alchemical with p180_material I165_other_material with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 97 with IK2_Link I344_fungicide_contraption with IK24_Count 8 with IK24_Link I349_boots_of_the_war_dance with IK27_Count 1 with IK27_Link I355_robe_of_the_dead_mage with KD_Count 27 with name 'asbestos' 'vest' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I344_fungicide_contraption "" class K37_sprayable with short_name "fungicide contraption" with description SC_71 with p214_valuation I188_minor with vector 0 with list_together 0 has mark_as_thing with IK2_Count 98 with IK2_Link I345_executioner_s_axe with IK37_Count 0 with IK37_Link nothing with KD_Count 37 with name 'fungicide' 'contraption' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I345_executioner_s_axe "" class K42_axe with short_name "executioner's axe" with description SC_72 with p20_damage_die 7 with p21_weapon_damage_bonus 4 with p22_dodgability 3 with p24_active_parry_max 0 with p25_weapon_attack_bonus -3 with p37_special_weapon_info text_routine_10 with p142_mood I119_deathly with p180_material I166_iron with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 99 with IK2_Link I346_vampiric_dagger with IK17_Count 6 with IK17_Link I346_vampiric_dagger with IK42_Count 1 with IK42_Link nothing with KD_Count 42 with name 'executioner^s' 'axe' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I346_vampiric_dagger "" class K41_dagger with short_name "vampiric dagger" with description SC_73 with p20_damage_die 3 with p21_weapon_damage_bonus 0 with p22_dodgability 3 with p23_passive_parry_max 1 with p24_active_parry_max 1 with p25_weapon_attack_bonus 1 with p37_special_weapon_info text_routine_11 with p142_mood I119_deathly with p180_material I166_iron with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 100 with IK2_Link I347_magical_spade with IK17_Count 7 with IK17_Link I348_pickaxe with IK41_Count 1 with IK41_Link I495_dagger_of_draining with KD_Count 41 with name 'vampiric' 'dagger' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I347_magical_spade "" class K2_thing with short_name "magical spade" with description SC_74 with p142_mood I121_magical with p145_digging_tool true with p180_material I166_iron with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 101 with IK2_Link I348_pickaxe with KD_Count 2 with name 'magical' 'spade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I348_pickaxe "" class K17_weapon with short_name "pickaxe" with description SC_75 with p20_damage_die 5 with p21_weapon_damage_bonus 2 with p22_dodgability 3 with p23_passive_parry_max 1 with p24_active_parry_max 2 with p25_weapon_attack_bonus -2 with p142_mood I118_barren with p145_digging_tool true with p180_material I166_iron with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 102 with IK2_Link I349_boots_of_the_war_dance with IK17_Count 8 with IK17_Link I354_glass_cannon with KD_Count 17 with name 'pickaxe' 'axe' with parse_name Parse_Name_GV133 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I349_boots_of_the_war_dance "" class K29_shoes with short_name "boots of the war dance" with article SC_11 with description SC_76 has pluralname with p142_mood I116_civilised with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 103 with IK2_Link I350_boots_of_wandering with IK24_Count 9 with IK24_Link I350_boots_of_wandering with IK29_Count 0 with IK29_Link I350_boots_of_wandering with KD_Count 29 with name 'boots' 'of' 'the' 'war' 'dance' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I350_boots_of_wandering "" class K29_shoes with short_name "boots of wandering" with article SC_11 with description SC_77 has pluralname with p222_cursed true with p224_curse_identified true with vector 0 with list_together 0 has mark_as_thing with IK2_Count 104 with IK2_Link I351_suit_of_plate_mail with IK24_Count 10 with IK24_Link I351_suit_of_plate_mail with IK29_Count 1 with IK29_Link nothing with KD_Count 29 with name 'boots' 'of' 'wandering' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I351_suit_of_plate_mail "" class K34_suit with short_name "suit of plate mail" with description SC_78 with p61_constriction_prevention 3 with p142_mood I122_alchemical with p180_material I166_iron with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 105 with IK2_Link I352_essence_of_greed with IK24_Count 11 with IK24_Link I353_cloak_of_shadows with IK34_Count 0 with IK34_Link I358_suit_of_dragon_armour with KD_Count 34 with name 'suit' 'of' 'plate' 'mail' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I352_essence_of_greed "" class K23_essence with short_name "essence of greed" with article SC_11 with description text_routine_12 with p27_difficulty_level 2 with p142_mood I121_magical with p180_material I166_iron with p214_valuation I189_major with vector 0 with list_together 0 has mark_as_thing with IK2_Count 106 with IK2_Link I353_cloak_of_shadows with IK23_Count 3 with IK23_Link I356_essence_of_addiction with KD_Count 23 with name 'essence' 'of' 'greed' 'essence' 'small' 'metal' 'bottle' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I353_cloak_of_shadows "" class K28_cloak with short_name "cloak of shadows" with description SC_79 with p142_mood I116_civilised with p180_material I169_cloth with p214_valuation I190_epic with vector 0 with list_together 0 has mark_as_thing with IK2_Count 107 with IK2_Link I354_glass_cannon with IK24_Count 12 with IK24_Link I355_robe_of_the_dead_mage with IK28_Count 0 with IK28_Link nothing with KD_Count 28 with name 'cloak' 'of' 'shadows' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I354_glass_cannon "" class K17_weapon with short_name "glass cannon" with description text_routine_13 with p20_damage_die 0 with p21_weapon_damage_bonus 12 with p22_dodgability 2 with p23_passive_parry_max 0 with p24_active_parry_max 3 with p25_weapon_attack_bonus 3 with p37_special_weapon_info text_routine_14 with p142_mood I121_magical with p172_ranged true with p180_material I173_glass with p214_valuation I190_epic with vector 0 with list_together 0 has mark_as_thing with IK2_Count 108 with IK2_Link I355_robe_of_the_dead_mage with IK17_Count 9 with IK17_Link I265_gilded_rapier with KD_Count 17 with name 'glass' 'cannon' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I355_robe_of_the_dead_mage "" class K27_shirt with short_name "robe of the dead mage" with article SC_11 with description SC_80 with p27_difficulty_level 1 with p142_mood I121_magical with p180_material I169_cloth with p214_valuation I190_epic with vector 0 with list_together 0 has mark_as_thing with IK2_Count 109 with IK2_Link I356_essence_of_addiction with IK24_Count 13 with IK24_Link I358_suit_of_dragon_armour with IK27_Count 2 with IK27_Link I448_monk_s_robe with KD_Count 27 with name 'robe' 'of' 'the' 'dead' 'mage' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I356_essence_of_addiction "" class K23_essence with short_name "essence of addiction" with article SC_11 with description SC_81 with p142_mood I121_magical with p180_material I166_iron with p214_valuation I190_epic with vector 0 with list_together 0 has mark_as_thing with IK2_Count 110 with IK2_Link I357_rod_of_the_master_build with IK23_Count 4 with IK23_Link nothing with KD_Count 23 with name 'essence' 'of' 'addiction' 'essence' 'small' 'metal' 'bottle' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I357_rod_of_the_master_build "" class K2_thing with short_name "rod of the master builder" with description text_routine_15 with p142_mood I118_barren with p145_digging_tool true with p147_collapsing_tool true with p180_material I174_stone with p214_valuation I190_epic with vector 0 with list_together 0 has mark_as_thing with IK2_Count 111 with IK2_Link I358_suit_of_dragon_armour with KD_Count 2 with name 'rod' 'of' 'the' 'master' 'builder' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I358_suit_of_dragon_armour "" class K34_suit with short_name "suit of dragon armour" with description SC_82 with p142_mood I121_magical with p180_material I175_dragon_skin with p214_valuation I190_epic with vector 0 with list_together 0 has mark_as_thing with IK2_Count 112 with IK2_Link I359_drakul_s_lifeblood with IK24_Count 14 with IK24_Link I448_monk_s_robe with IK34_Count 1 with IK34_Link nothing with KD_Count 34 with name 'suit' 'of' 'dragon' 'armour' 'armor' with parse_name Parse_Name_GV134 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I359_drakul_s_lifeblood "" class K2_thing with short_name "Drakul's lifeblood" with description SC_83 with p27_difficulty_level 2 has proper with p142_mood I119_deathly with p180_material I173_glass with p214_valuation I190_epic with vector 0 with list_together 0 with cap_short_name "Drakul's lifeblood" has mark_as_thing with IK2_Count 113 with IK2_Link I360_tome_of_transmutation with KD_Count 2 with name 'drakul^s' 'lifeblood' 'blood' 'vial' with parse_name Parse_Name_GV135 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I360_tome_of_transmutation "" class K2_thing with short_name "tome of transmutation" with description text_routine_16 with p142_mood I121_magical with p180_material I168_paper with vector 0 with list_together 0 has mark_as_thing with IK2_Count 114 with IK2_Link X362 with KD_Count 2 with name 'tome' 'of' 'transmutation' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X362 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 115 with IK2_Link X363 with IK50_Count 0 with IK50_Link X363 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X363 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 116 with IK2_Link X364 with IK50_Count 1 with IK50_Link X364 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X364 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 117 with IK2_Link X365 with IK50_Count 2 with IK50_Link X365 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X365 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 118 with IK2_Link X366 with IK50_Count 3 with IK50_Link X366 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X366 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 119 with IK2_Link X367 with IK50_Count 4 with IK50_Link X367 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X367 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 120 with IK2_Link X368 with IK50_Count 5 with IK50_Link X368 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X368 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 121 with IK2_Link X369 with IK50_Count 6 with IK50_Link X369 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X369 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 122 with IK2_Link X370 with IK50_Count 7 with IK50_Link X370 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X370 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 123 with IK2_Link X371 with IK50_Count 8 with IK50_Link X371 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object X371 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 124 with IK2_Link selfobj with IK50_Count 9 with IK50_Link X372 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I375_entrance_hall "" class K1_room with short_name "Entrance Hall" with description SC_84 has p127_connectable has p129_connection_inviting has p131_placeable with p133_habitable false with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I116_civilised with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 26 with IK1_Link I378_hall_of_mirrors with KD_Count 1 with name 'entrance' 'hall' ; Object -> selfobj "" class K8_person with saved_short_name "yourself", with short_name "yourself" with description text_routine_17 has proper has concealed with p111_faction I91_friendly with p201_player_form I181_human_form with vector 0 with list_together 0 with cap_short_name "Yourself" has mark_as_thing with component_child I106_your_natural_weapon with IK2_Count 0 with IK2_Link I265_gilded_rapier with IK8_Count 0 with IK8_Link I436_swarm_of_daggers with KD_Count 8 with name 'yourself' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> -> I265_gilded_rapier "" class K40_rapier with short_name "gilded rapier" with description SC_85 has p116_readied with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with IK2_Count 28 with IK2_Link X372 with IK17_Count 1 with IK17_Link I420_putrefying_arm with IK40_Count 0 with IK40_Link nothing with KD_Count 40 with name 'gilded' 'rapier' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> -> X372 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 125 with IK2_Link X373 with IK50_Count 10 with IK50_Link X373 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> -> X373 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 126 with IK2_Link X374 with IK50_Count 11 with IK50_Link X374 with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> -> X374 "" class K50_package_of_ment with short_name "package of ment" with vector 0 with list_together 0 has mark_as_thing with IK2_Count 127 with IK2_Link I376_skull_sized_rubies with IK50_Count 12 with IK50_Link nothing with KD_Count 50 with name 'package' 'of' 'ment' 'packages//p' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I376_skull_sized_rubies "" class K2_thing with short_name "skull-sized rubies" with description SC_86 has pluralname has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 128 with IK2_Link I377_red_light with KD_Count 2 with name 'skull-sized' 'rubies' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I377_red_light "" class K2_thing with short_name "red light" with description SC_87 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 129 with IK2_Link I379_mirrors with KD_Count 2 with name 'red' 'light' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I378_hall_of_mirrors "" class K1_room with short_name "Hall of Mirrors" with description text_routine_18 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I121_magical with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 27 with IK1_Link I381_phantasmagoria with KD_Count 1 with name 'hall' 'of' 'mirrors' ; Object -> I379_mirrors "" class K2_thing with short_name "mirrors" with article SC_11 with description SC_88 has pluralname has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 130 with IK2_Link I380_reflections with KD_Count 2 with name 'mirrors' 'mirror' with parse_name Parse_Name_GV137 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I380_reflections "" class K2_thing with short_name "reflections" with description SC_89 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 131 with IK2_Link I382_radiant_images with KD_Count 2 with name 'reflections' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I381_phantasmagoria "" class K1_room with short_name "Phantasmagoria" with description text_routine_19 has proper has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I121_magical with vector 0 with room_index -1 with list_together 0 with cap_short_name "Phantasmagoria" has mark_as_room with IK1_Count 28 with IK1_Link I383_lake_of_lava with KD_Count 1 with name 'phantasmagoria' ; Object -> I382_radiant_images "" class K2_thing with short_name "radiant images" with description text_routine_20 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 132 with IK2_Link I385_exceedingly_narrow_brid with KD_Count 2 with name 'radiant' 'images' 'warriors' 'battles' 'image' with parse_name Parse_Name_GV138 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I383_lake_of_lava "" class K1_room with short_name "Lake of Lava" has proper has ~p127_connectable has ~p129_connection_inviting has ~p131_placeable with p133_habitable false with p135_treasurable false with p137_extra_accepting false with p139_nogo true with p141_vertical_placement I111_vp_likely_underground with p142_mood I120_elemental with vector 0 with room_index -1 with list_together 0 with cap_short_name "Lake of Lava" has mark_as_room with IK1_Count 29 with IK1_Link I384_bridge_of_doom with KD_Count 1 with name 'lake' 'of' 'lava' ; Object I384_bridge_of_doom "" class K1_room with short_name "Bridge of Doom" with description SC_90 has ~p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting false with p141_vertical_placement I111_vp_likely_underground with p142_mood I120_elemental with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 30 with IK1_Link I387_temple_of_nomos with KD_Count 1 with name 'bridge' 'of' 'doom' ; Object -> I385_exceedingly_narrow_brid "" class K2_thing with short_name "Exceedingly narrow bridge" with description SC_91 has proper has static has scenery with vector 0 with list_together 0 with cap_short_name "Exceedingly narrow bridge" has mark_as_thing with IK2_Count 133 with IK2_Link I386_seething_lake_of_lava with KD_Count 2 with name 'exceedingly' 'narrow' 'bridge' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I386_seething_lake_of_lava "" class K5_container with short_name "Seething lake of lava" with description SC_92 has proper has static has scenery has enterable has open with vector 0 with list_together 0 with cap_short_name "Seething lake of lava" has mark_as_thing with IK2_Count 134 with IK2_Link I388_statue_of_nomos with IK5_Count 33 with IK5_Link I398_sarcophagus with KD_Count 5 with name 'seething' 'lake' 'of' 'lava' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I387_temple_of_nomos "" class K1_room with short_name "Temple of Nomos" with description SC_93 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I117_religious with p143_consecrated true with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 31 with IK1_Link I389_temple_of_aite with KD_Count 1 with name 'temple' 'of' 'nomos' ; Object -> I388_statue_of_nomos "" class K2_thing with short_name "statue of Nomos" with description SC_94 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 135 with IK2_Link I390_statue_of_aite with KD_Count 2 with name 'statue' 'of' 'nomos' 'god' 'deity' with parse_name Parse_Name_GV139 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I389_temple_of_aite "" class K1_room with short_name "Temple of Aite" with description SC_95 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I117_religious with p143_consecrated true with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 32 with IK1_Link I391_temple_of_sul with KD_Count 1 with name 'temple' 'of' 'aite' ; Object -> I390_statue_of_aite "" class K2_thing with short_name "statue of Aite" with description SC_96 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 136 with IK2_Link I392_statue_of_sul with KD_Count 2 with name 'statue' 'of' 'aite' 'god' 'deity' with parse_name Parse_Name_GV140 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I391_temple_of_sul "" class K1_room with short_name "Temple of Sul" with description text_routine_21 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I117_religious with p143_consecrated true with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 33 with IK1_Link I394_temple_of_isatzo with KD_Count 1 with name 'temple' 'of' 'sul' ; Object -> I392_statue_of_sul "" class K2_thing with short_name "statue of Sul" with description SC_97 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 137 with IK2_Link I393_pile_of_fragments with KD_Count 2 with name 'statue' 'of' 'sul' 'god' 'deity' with parse_name Parse_Name_GV141 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I393_pile_of_fragments "" class K2_thing with short_name "pile of fragments" with description SC_98 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 138 with IK2_Link I395_statue_of_isatzo with KD_Count 2 with name 'pile' 'of' 'fragments' 'rubble' 'broken' 'statue' 'crystal' with parse_name Parse_Name_GV142 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I394_temple_of_isatzo "" class K1_room with short_name "Temple of Isatzo" with description SC_99 has p127_connectable has p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I117_religious with p143_consecrated true with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 34 with IK1_Link I396_crypt with KD_Count 1 with name 'temple' 'of' 'isatzo' ; Object -> I395_statue_of_isatzo "" class K2_thing with short_name "statue of Isatzo" with description SC_100 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 139 with IK2_Link I397_ruined_tombs with KD_Count 2 with name 'statue' 'of' 'isatzo' 'god' 'deity' 'auspicious' 'dropping' 'eye' 'arm' 'arms' with parse_name Parse_Name_GV143 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I396_crypt "" class K1_room with short_name "Crypt" with description text_routine_22 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable false with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I110_vp_underground with p142_mood I119_deathly with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 35 with IK1_Link I400_workshop_of_the_bladema with KD_Count 1 with name 'crypt' ; Object -> I397_ruined_tombs "" class K2_thing with short_name "Ruined tombs" with description SC_101 has proper has static has scenery with vector 0 with list_together 0 with cap_short_name "Ruined tombs" has mark_as_thing with IK2_Count 140 with IK2_Link I398_sarcophagus with KD_Count 2 with name 'ruined' 'tombs' 'skulls' 'skull' 'bones' 'bone' with parse_name Parse_Name_GV144 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I398_sarcophagus "" class K5_container with short_name "sarcophagus" with description SC_102 has static has scenery has ~open has openable with vector 0 with list_together 0 has mark_as_thing with component_child I399_symbols_of_death with IK2_Count 141 with IK2_Link I399_symbols_of_death with IK5_Count 34 with IK5_Link I401_huge_forge with KD_Count 5 with name 'sarcophagus' 'tomb' with parse_name Parse_Name_GV145 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I399_symbols_of_death "" class K2_thing with short_name "symbols of death" with description SC_103 with vector 0 with list_together 0 has mark_as_thing with component_parent I398_sarcophagus with IK2_Count 142 with IK2_Link I401_huge_forge with KD_Count 2 with name 'symbols' 'of' 'death' 'skeletons' 'formula' with parse_name Parse_Name_GV146 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I400_workshop_of_the_bladema "" class K1_room with short_name "Workshop of the Blademaster" with description SC_104 has proper has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I116_civilised with vector 0 with room_index -1 with list_together 0 with cap_short_name "Workshop of the Blademaster" has mark_as_room with IK1_Count 36 with IK1_Link I402_space_time_discontinuum with KD_Count 1 with name 'workshop' 'of' 'the' 'blademaster' ; Object -> I401_huge_forge "" class K5_container with short_name "huge forge" with description SC_105 has static has scenery has enterable has open with vector 0 with list_together 0 has mark_as_thing with IK2_Count 143 with IK2_Link I404_staircase with IK5_Count 35 with IK5_Link I406_curious_machine with KD_Count 5 with name 'huge' 'forge' 'sulphur' 'fire' with parse_name Parse_Name_GV147 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I402_space_time_discontinuum "" class K1_room with short_name "Space-Time Discontinuum" with description SC_106 with p27_difficulty_level 1 has proper has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I121_magical with vector 0 with room_index -1 with list_together 0 with cap_short_name "Space-Time Discontinuum" has mark_as_room with IK1_Count 37 with IK1_Link I403_vast_staircase with KD_Count 1 with name 'space-time' 'discontinuum' ; Object I403_vast_staircase "" class K1_room with short_name "Vast Staircase" with description text_routine_23 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I118_barren with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 38 with IK1_Link I405_alchemical_laboratory with KD_Count 1 with name 'vast' 'staircase' ; Object -> I404_staircase "" class K2_thing with short_name "staircase" with article SC_11 with description SC_107 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 144 with IK2_Link I406_curious_machine with KD_Count 2 with name 'staircase' 'stairs' with parse_name Parse_Name_GV148 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I405_alchemical_laboratory "" class K1_room with short_name "Alchemical Laboratory" with description SC_108 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I122_alchemical with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 39 with IK1_Link I407_hall_of_vapours with KD_Count 1 with name 'alchemical' 'laboratory' ; Object -> I406_curious_machine "" class K5_container with short_name "curious machine" with description SC_109 has static has scenery has open with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with IK2_Count 145 with IK2_Link I408_large_pipes with IK5_Count 36 with IK5_Link I415_scroll_analyser with KD_Count 5 with name 'curious' 'machine' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I407_hall_of_vapours "" class K1_room with short_name "Hall of Vapours" with description text_routine_24 has p127_connectable has p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I122_alchemical with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 40 with IK1_Link I410_portal_room with KD_Count 1 with name 'hall' 'of' 'vapours' ; Object -> I408_large_pipes "" class K2_thing with short_name "large pipes" with description SC_110 has static has scenery with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with component_child I409_big_wheel with IK2_Count 146 with IK2_Link I409_big_wheel with KD_Count 2 with name 'large' 'pipes' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I409_big_wheel "" class K2_thing with short_name "big wheel" with description SC_111 with vector 0 with list_together 0 has mark_as_thing with component_parent I408_large_pipes with IK2_Count 147 with IK2_Link I411_huge_magical_portal with KD_Count 2 with name 'big' 'wheel' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I410_portal_room "" class K1_room with short_name "Portal Room" with description text_routine_25 has proper has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I121_magical with vector 0 with room_index -1 with list_together 0 with cap_short_name "Portal Room" has mark_as_room with IK1_Count 41 with IK1_Link I413_library with KD_Count 1 with name 'portal' 'room' ; Object -> I411_huge_magical_portal "" class K2_thing with short_name "huge magical portal" with description SC_112 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 148 with IK2_Link I412_huge_empty_portal with KD_Count 2 with name 'huge' 'magical' 'portal' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I412_huge_empty_portal "" class K2_thing with short_name "huge empty portal" with article SC_11 with description SC_113 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 149 with IK2_Link I414_hundreds_of_books with KD_Count 2 with name 'huge' 'empty' 'portal' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I413_library "" class K1_room with short_name "Library" with description SC_114 has proper has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I116_civilised with vector 0 with room_index -1 with list_together 0 with cap_short_name "Library" has mark_as_room with IK1_Count 42 with IK1_Link I416_drawing_room with KD_Count 1 with name 'library' ; Object -> I414_hundreds_of_books "" class K2_thing with short_name "Hundreds of books" with description SC_115 has proper has static has scenery with p180_material I168_paper with vector 0 with list_together 0 with cap_short_name "Hundreds of books" has mark_as_thing with IK2_Count 150 with IK2_Link I415_scroll_analyser with KD_Count 2 with name 'hundreds' 'of' 'books' 'book' with parse_name Parse_Name_GV149 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I415_scroll_analyser "" class K5_container with short_name "scroll analyser" with description text_routine_26 has static has scenery has open with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with IK2_Count 151 with IK2_Link I417_fascinating_drawing with IK5_Count 37 with IK5_Link I423_ornate_chest with KD_Count 5 with name 'scroll' 'analyser' 'analyzer' 'weird' 'machine' 'device' with parse_name Parse_Name_GV150 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I416_drawing_room "" class K1_room with short_name "Drawing Room" with description SC_116 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p141_vertical_placement I109_vp_agnostic with p142_mood I116_civilised with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 43 with IK1_Link I418_quartering_room with KD_Count 1 with name 'drawing' 'room' ; Object -> I417_fascinating_drawing "" class K2_thing with short_name "fascinating drawing" has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 152 with IK2_Link I419_large_pile_of_body_part with KD_Count 2 with name 'fascinating' 'drawing' 'painting' 'shadow' 'battle' 'scene' with parse_name Parse_Name_GV151 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I418_quartering_room "" class K1_room with short_name "Quartering Room" with description SC_117 has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable true with p135_treasurable true with p141_vertical_placement I109_vp_agnostic with p142_mood I119_deathly with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 44 with IK1_Link I421_eternal_prison with KD_Count 1 with name 'quartering' 'room' ; Object -> I419_large_pile_of_body_part "" class K2_thing with short_name "large pile of body parts" with description SC_118 has static has scenery with vector 0 with list_together 0 has mark_as_thing with IK2_Count 153 with IK2_Link I420_putrefying_arm with KD_Count 2 with name 'large' 'pile' 'of' 'body' 'parts' 'human' 'non-human' 'part' 'legs' 'arms' 'heads' 'intestines' with parse_name Parse_Name_GV152 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I420_putrefying_arm "" class K17_weapon with short_name "putrefying arm" with description SC_119 with p20_damage_die 8 with p25_weapon_attack_bonus 1 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 154 with IK2_Link I423_ornate_chest with IK17_Count 10 with IK17_Link I437_swarm_of_daggers_s_natu with KD_Count 17 with name 'putrefying' 'arm' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I421_eternal_prison "" class K1_room with short_name "Eternal Prison" with description SC_120 has p127_connectable has ~p129_connection_inviting has ~p131_placeable with p133_habitable false with p135_treasurable false with p137_extra_accepting false with p141_vertical_placement I110_vp_underground with p142_mood I118_barren with p166_teleportable false with vector 0 with room_index -1 with list_together 0 has mark_as_room with IK1_Count 45 with IK1_Link I422_hidden_treasury with KD_Count 1 with name 'eternal' 'prison' ; Object I422_hidden_treasury "" class K1_room with short_name "Hidden Treasury" with description SC_121 has proper has p127_connectable has ~p129_connection_inviting has ~p131_placeable with p133_habitable false with p135_treasurable false with p141_vertical_placement I109_vp_agnostic with p142_mood I116_civilised with p166_teleportable false with vector 0 with room_index -1 with list_together 0 with cap_short_name "Hidden Treasury" has mark_as_room with IK1_Count 46 with IK1_Link I424_cavern_of_rust with KD_Count 1 with name 'hidden' 'treasury' ; Object -> I423_ornate_chest "" class K5_container with short_name "ornate chest" has static has scenery has ~open has openable with vector 0 with list_together 0 has mark_as_thing with IK2_Count 155 with IK2_Link I426_portal_to_the_elemental with IK5_Count 38 with IK5_Link I444_armadillo_stomach with KD_Count 5 with name 'ornate' 'chest' 'gems' 'precious' 'metals' with parse_name Parse_Name_GV153 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I424_cavern_of_rust "" class K1_room with short_name "Cavern of Rust" with description SC_122 has proper has p127_connectable has ~p129_connection_inviting has ~p131_placeable with p133_habitable false with p135_treasurable true with p141_vertical_placement I109_vp_agnostic with p142_mood I118_barren with p166_teleportable false with p191_rust_spored true with vector 0 with room_index -1 with list_together 0 with cap_short_name "Cavern of Rust" has mark_as_room with IK1_Count 47 with IK1_Link I425_portal_of_smoke with KD_Count 1 with name 'cavern' 'of' 'rust' ; Object I425_portal_of_smoke "" class K1_room with short_name "Portal of Smoke" with description SC_123 has proper has p127_connectable has ~p129_connection_inviting has ~p131_placeable with p133_habitable false with p135_treasurable false with p137_extra_accepting false with p141_vertical_placement I109_vp_agnostic with p142_mood I120_elemental with p166_teleportable false with vector 0 with room_index -1 with list_together 0 with cap_short_name "Portal of Smoke" has mark_as_room with IK1_Count 48 with IK1_Link I427_lair_of_the_imp with KD_Count 1 with name 'portal' 'of' 'smoke' ; Object -> I426_portal_to_the_elemental "" class K2_thing with short_name "portal to the elemental plane of smoke" with description SC_124 has static has scenery with p180_material I174_stone with vector 0 with list_together 0 has mark_as_thing with IK2_Count 156 with IK2_Link I429_broken_pipe with KD_Count 2 with name 'portal' 'to' 'the' 'elemental' 'plane' 'of' 'smoke' 'entrance' with parse_name Parse_Name_GV154 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I427_lair_of_the_imp "" class K1_room with short_name "Lair of the Imp" with description SC_125 with p27_difficulty_level 2 has proper has p127_connectable has ~p129_connection_inviting has p131_placeable with p133_habitable false with p135_treasurable true with p137_extra_accepting true with p141_vertical_placement I109_vp_agnostic with p142_mood I121_magical with p166_teleportable true with vector 0 with room_index -1 with list_together 0 with cap_short_name "Lair of the Imp" has mark_as_room with IK1_Count 49 with IK1_Link I521_elemental_plane_of_smok with KD_Count 1 with name 'lair' 'of' 'the' 'imp' ; Object I429_broken_pipe "" class K51_extra with short_name "broken pipe" with description SC_126 with initial SC_127 with p142_mood I122_alchemical with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with IK2_Count 157 with IK2_Link I430_teleportation_beacon with IK51_Count 0 with IK51_Link I430_teleportation_beacon with KD_Count 51 with name 'broken' 'pipe' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I430_teleportation_beacon "" class K51_extra with short_name "teleportation beacon" with description SC_128 with initial text_routine_27 with p142_mood I121_magical with p180_material I174_stone with vector 0 with list_together 0 has mark_as_thing with IK2_Count 158 with IK2_Link I431_statue_of_shards with IK51_Count 1 with IK51_Link I431_statue_of_shards with KD_Count 51 with name 'teleportation' 'beacon' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I431_statue_of_shards "" class K51_extra with short_name "statue of shards" with description SC_129 with initial SC_130 with p142_mood I122_alchemical with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with IK2_Count 159 with IK2_Link I432_flickering_lamps with IK51_Count 2 with IK51_Link I432_flickering_lamps with KD_Count 51 with name 'statue' 'of' 'shards' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I432_flickering_lamps "" class K51_extra with short_name "flickering lamps" with description SC_131 with initial SC_132 has pluralname with p142_mood I116_civilised with vector 0 with list_together 0 has mark_as_thing with IK2_Count 160 with IK2_Link I434_holy_symbols with IK51_Count 3 with IK51_Link I434_holy_symbols with KD_Count 51 with name 'flickering' 'lamps' 'weird' 'shadows' with parse_name Parse_Name_GV155 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I434_holy_symbols "" class K52_symbol_extra with short_name "holy symbols" with description SC_133 with initial SC_134 has pluralname with p142_mood I117_religious with vector 0 with list_together 0 has mark_as_thing with IK2_Count 161 with IK2_Link I435_unholy_symbols with IK51_Count 4 with IK51_Link I435_unholy_symbols with IK52_Count 0 with IK52_Link I435_unholy_symbols with KD_Count 52 with name 'holy' 'symbols' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I435_unholy_symbols "" class K52_symbol_extra with short_name "unholy symbols" with description SC_135 with initial SC_136 with p142_mood I117_religious with vector 0 with list_together 0 has mark_as_thing with IK2_Count 162 with IK2_Link I436_swarm_of_daggers with IK51_Count 5 with IK51_Link nothing with IK52_Count 1 with IK52_Link nothing with KD_Count 52 with name 'unholy' 'symbols' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I436_swarm_of_daggers "" class K19_monster with short_name "swarm of daggers" with description SC_137 with initial SC_138 with p14_health 12 with p18_melee 3 with p19_defence 4 with p31_level 1 with p33_perception 4 with p34_dexterity 6 with p149_emotionless true with p158_flyer true with p162_eyeless true with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with component_child I437_swarm_of_daggers_s_natu with IK2_Count 163 with IK2_Link I437_swarm_of_daggers_s_natu with IK8_Count 1 with IK8_Link I439_blood_ape with IK19_Count 0 with IK19_Link I439_blood_ape with KD_Count 19 with name 'swarm' 'of' 'daggers' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I437_swarm_of_daggers_s_natu "" class K18_natural_weapon with short_name "swarm of daggers's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I436_swarm_of_daggers with IK2_Count 164 with IK2_Link I438_power_of_the_daggers with IK17_Count 11 with IK17_Link I440_blood_ape_s_natural_wea with IK18_Count 1 with IK18_Link I440_blood_ape_s_natural_wea with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I438_power_of_the_daggers "" class K21_power with short_name "power of the daggers" with p38_power_level 1 with p39_command_text SC_139 with p157_granting I436_swarm_of_daggers with vector 0 with list_together 0 has mark_as_thing with IK2_Count 165 with IK2_Link I439_blood_ape with IK21_Count 0 with IK21_Link I441_power_of_the_ape with KD_Count 21 with name 'power' 'of' 'the' 'daggers' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I439_blood_ape "" class K19_monster with short_name "blood ape" with description text_routine_28 with initial text_routine_29 with p14_health 8 with p18_melee 0 with p19_defence 8 with p31_level 1 with p154_size I152_small with vector 0 with list_together 0 has mark_as_thing with component_child I440_blood_ape_s_natural_wea with IK2_Count 166 with IK2_Link I440_blood_ape_s_natural_wea with IK8_Count 2 with IK8_Link I442_ravenous_armadillo with IK19_Count 1 with IK19_Link I442_ravenous_armadillo with KD_Count 19 with name 'blood' 'ape' 'monkey' 'gorilla' 'simian' 'creature' with parse_name Parse_Name_GV157 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I440_blood_ape_s_natural_wea "" class K18_natural_weapon with short_name "blood ape's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I439_blood_ape with IK2_Count 167 with IK2_Link I441_power_of_the_ape with IK17_Count 12 with IK17_Link I443_ravenous_armadillo_s_na with IK18_Count 2 with IK18_Link I443_ravenous_armadillo_s_na with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I441_power_of_the_ape "" class K21_power with short_name "power of the ape" with p38_power_level 1 with p39_command_text text_routine_30 with p157_granting I439_blood_ape with vector 0 with list_together 0 has mark_as_thing with IK2_Count 168 with IK2_Link I442_ravenous_armadillo with IK21_Count 1 with IK21_Link I445_power_of_the_armadillo with KD_Count 21 with name 'power' 'of' 'the' 'ape' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I442_ravenous_armadillo "" class K19_monster with short_name "ravenous armadillo" with description SC_140 with initial SC_141 with p14_health 10 with p18_melee -2 with p19_defence 5 with p27_difficulty_level 1 with p31_level 1 with p33_perception 4 with p34_dexterity 3 with p51_intrinsic_heat_resistanc 3 with vector 0 with list_together 0 has mark_as_thing with component_child I443_ravenous_armadillo_s_na with IK2_Count 169 with IK2_Link I443_ravenous_armadillo_s_na with IK8_Count 3 with IK8_Link I446_miranda with IK19_Count 2 with IK19_Link I446_miranda with KD_Count 19 with name 'ravenous' 'armadillo' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I443_ravenous_armadillo_s_na "" class K18_natural_weapon with short_name "ravenous armadillo's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I442_ravenous_armadillo with component_sibling I444_armadillo_stomach with IK2_Count 170 with IK2_Link I444_armadillo_stomach with IK17_Count 13 with IK17_Link I449_pair_of_nunchucks with IK18_Count 3 with IK18_Link I447_miranda_s_natural_weapo with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I444_armadillo_stomach "" class K5_container with short_name "armadillo stomach" has privately_named has ~transparent has ~open with vector 0 with list_together 0 has mark_as_thing with component_parent I442_ravenous_armadillo with IK2_Count 171 with IK2_Link I445_power_of_the_armadillo with IK5_Count 39 with IK5_Link nothing with KD_Count 5 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I445_power_of_the_armadillo "" class K21_power with short_name "power of the armadillo" with p38_power_level 1 with p39_command_text SC_142 with p157_granting I442_ravenous_armadillo with vector 0 with list_together 0 has mark_as_thing with IK2_Count 172 with IK2_Link I446_miranda with IK21_Count 2 with IK21_Link I450_power_of_miranda with KD_Count 21 with name 'power' 'of' 'the' 'armadillo' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I446_miranda "" class K19_monster with short_name "Miranda" with description SC_143 with initial SC_144 with p14_health 12 with p18_melee 0 with p19_defence 7 with p31_level 1 with p33_perception 6 with p34_dexterity 7 with p35_willpower 5 has proper has female has ~neuter with p152_weapon_user true with vector 0 with list_together 0 with cap_short_name "Miranda" has mark_as_thing with component_child I447_miranda_s_natural_weapo with IK2_Count 173 with IK2_Link I448_monk_s_robe with IK8_Count 4 with IK8_Link I451_chain_golem with IK19_Count 3 with IK19_Link I451_chain_golem with KD_Count 19 with name 'miranda' 'woman' 'stunning' 'monk' 'creature' with parse_name Parse_Name_GV159 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I448_monk_s_robe "" class K27_shirt with short_name "monk's robe" with description SC_145 has clothing with p180_material I169_cloth has worn with vector 0 with list_together 0 has mark_as_thing with IK2_Count 175 with IK2_Link I449_pair_of_nunchucks with IK24_Count 15 with IK24_Link nothing with IK27_Count 3 with IK27_Link nothing with KD_Count 27 with name 'monk^s' 'robe' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I449_pair_of_nunchucks "" class K17_weapon with short_name "pair of nunchucks" with description SC_146 with p24_active_parry_max 4 has p116_readied with p180_material I170_wood with vector 0 with list_together 0 has mark_as_thing with IK2_Count 176 with IK2_Link I447_miranda_s_natural_weapo with IK17_Count 15 with IK17_Link I447_miranda_s_natural_weapo with KD_Count 17 with name 'pair' 'of' 'nunchucks' 'nunchuck' 'nunchuk' 'nunchuks' with parse_name Parse_Name_GV160 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I447_miranda_s_natural_weapo "" class K18_natural_weapon with short_name "Miranda's natural weapon" has proper with vector 0 with list_together 0 with cap_short_name "Miranda's natural weapon" has mark_as_thing with component_parent I446_miranda with IK2_Count 174 with IK2_Link I450_power_of_miranda with IK17_Count 14 with IK17_Link I452_chain_golem_s_natural_w with IK18_Count 4 with IK18_Link I452_chain_golem_s_natural_w with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I450_power_of_miranda "" class K21_power with short_name "power of Miranda" with p38_power_level 1 with p39_command_text SC_147 with p157_granting I446_miranda with vector 0 with list_together 0 has mark_as_thing with IK2_Count 177 with IK2_Link I451_chain_golem with IK21_Count 3 with IK21_Link I453_power_of_the_chains with KD_Count 21 with name 'power' 'of' 'miranda' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I451_chain_golem "" class K19_monster with short_name "chain golem" with description SC_148 with initial text_routine_31 with p14_health 24 with p18_melee 1 with p19_defence 8 with p31_level 2 with p33_perception 4 with p34_dexterity 4 with p149_emotionless true with p162_eyeless true with p180_material I166_iron with vector 0 with list_together 0 has mark_as_thing with component_child I452_chain_golem_s_natural_w with IK2_Count 178 with IK2_Link I452_chain_golem_s_natural_w with IK8_Count 5 with IK8_Link I454_jumping_bomb with IK19_Count 4 with IK19_Link I454_jumping_bomb with KD_Count 19 with name 'chain' 'golem' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I452_chain_golem_s_natural_w "" class K18_natural_weapon with short_name "chain golem's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I451_chain_golem with IK2_Count 179 with IK2_Link I453_power_of_the_chains with IK17_Count 16 with IK17_Link I455_jumping_bomb_s_natural_ with IK18_Count 5 with IK18_Link I455_jumping_bomb_s_natural_ with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I453_power_of_the_chains "" class K21_power with short_name "power of the chains" with p38_power_level 2 with p39_command_text SC_149 with p157_granting I451_chain_golem with vector 0 with list_together 0 has mark_as_thing with IK2_Count 180 with IK2_Link I454_jumping_bomb with IK21_Count 4 with IK21_Link I456_power_of_the_bomb with KD_Count 21 with name 'power' 'of' 'the' 'chains' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I454_jumping_bomb "" class K19_monster with short_name "jumping bomb" with description SC_150 with initial text_routine_32 with p14_health 18 with p18_melee -1 with p19_defence 8 with p31_level 2 with p33_perception 4 with p34_dexterity 6 with p35_willpower 6 with p149_emotionless true with p162_eyeless true with vector 0 with list_together 0 has mark_as_thing with component_child I455_jumping_bomb_s_natural_ with IK2_Count 181 with IK2_Link I455_jumping_bomb_s_natural_ with IK8_Count 6 with IK8_Link I457_reaper with IK19_Count 5 with IK19_Link I457_reaper with KD_Count 19 with name 'jumping' 'bomb' 'ball' 'flesh' 'meat' 'creature' with parse_name Parse_Name_GV163 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I455_jumping_bomb_s_natural_ "" class K18_natural_weapon with short_name "jumping bomb's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I454_jumping_bomb with IK2_Count 182 with IK2_Link I456_power_of_the_bomb with IK17_Count 17 with IK17_Link I458_reaper_s_natural_weapon with IK18_Count 6 with IK18_Link I458_reaper_s_natural_weapon with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I456_power_of_the_bomb "" class K21_power with short_name "power of the bomb" with p38_power_level 2 with p39_command_text SC_151 with p157_granting I454_jumping_bomb with vector 0 with list_together 0 has mark_as_thing with IK2_Count 183 with IK2_Link I457_reaper with IK21_Count 5 with IK21_Link I462_power_of_the_reaper with KD_Count 21 with name 'power' 'of' 'the' 'bomb' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I457_reaper "" class K19_monster with short_name "Reaper" with description SC_152 with initial text_routine_33 with p14_health 24 with p18_melee 1 with p19_defence 8 with p31_level 2 with p48_follower_percentile_chan 5 has ~female has ~neuter with p152_weapon_user true with vector 0 with list_together 0 has mark_as_thing with component_child I458_reaper_s_natural_weapon with IK2_Count 184 with IK2_Link I458_reaper_s_natural_weapon with IK8_Count 7 with IK8_Link I463_mindslug with IK19_Count 6 with IK19_Link I463_mindslug with KD_Count 19 with name 'reaper' 'pale' 'man' 'dark' 'robes' 'serial' 'killer' 'him' 'creature' with parse_name Parse_Name_GV164 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I458_reaper_s_natural_weapon "" class K18_natural_weapon with short_name "Reaper's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I457_reaper with IK2_Count 185 with IK2_Link I459_scythe_of_flaming with IK17_Count 18 with IK17_Link I459_scythe_of_flaming with IK18_Count 7 with IK18_Link I464_mindslug_s_natural_weap with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I459_scythe_of_flaming "" class K43_scythe with short_name "scythe of flaming" with description SC_153 with p52_internal_heat 3 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 186 with IK2_Link I460_scythe_of_slaying with IK17_Count 19 with IK17_Link I460_scythe_of_slaying with IK43_Count 0 with IK43_Link I460_scythe_of_slaying with KD_Count 43 with name 'scythe' 'of' 'flaming' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I460_scythe_of_slaying "" class K43_scythe with short_name "scythe of slaying" with description SC_154 with p37_special_weapon_info text_routine_34 with p180_material I167_silver with vector 0 with list_together 0 has mark_as_thing with IK2_Count 187 with IK2_Link I461_scythe_of_oxidation with IK17_Count 20 with IK17_Link I461_scythe_of_oxidation with IK43_Count 1 with IK43_Link I461_scythe_of_oxidation with KD_Count 43 with name 'scythe' 'of' 'slaying' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I461_scythe_of_oxidation "" class K43_scythe with short_name "scythe of oxidation" with description SC_155 with p37_special_weapon_info text_routine_35 with p180_material I166_iron with p189_rusted true with vector 0 with list_together 0 has mark_as_thing with IK2_Count 188 with IK2_Link I462_power_of_the_reaper with IK17_Count 21 with IK17_Link I464_mindslug_s_natural_weap with IK43_Count 2 with IK43_Link nothing with KD_Count 43 with name 'scythe' 'of' 'oxidation' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I462_power_of_the_reaper "" class K21_power with short_name "power of the Reaper" with p38_power_level 2 with p39_command_text SC_156 with p157_granting I457_reaper with vector 0 with list_together 0 has mark_as_thing with IK2_Count 189 with IK2_Link I463_mindslug with IK21_Count 6 with IK21_Link I472_power_of_the_mindslug with KD_Count 21 with name 'power' 'of' 'the' 'reaper' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I463_mindslug "" class K19_monster with short_name "mindslug" with description SC_157 with initial SC_158 with p14_health 27 with p18_melee 2 with p19_defence 7 with p31_level 3 with p33_perception 7 with p34_dexterity 3 with p35_willpower 11 with vector 0 with list_together 0 has mark_as_thing with component_child I464_mindslug_s_natural_weap with IK2_Count 190 with IK2_Link I464_mindslug_s_natural_weap with IK8_Count 8 with IK8_Link I466_fafhrd with IK19_Count 7 with IK19_Link I473_giant_tentacle with KD_Count 19 with name 'mindslug' 'slug' 'master' 'ooze' 'creature' with parse_name Parse_Name_GV166 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I464_mindslug_s_natural_weap "" class K18_natural_weapon with short_name "mindslug's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I463_mindslug with IK2_Count 191 with IK2_Link I466_fafhrd with IK17_Count 22 with IK17_Link I468_fafhrd_s_sword with IK18_Count 8 with IK18_Link I467_fafhrd_s_natural_weapon with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I466_fafhrd "" class K10_man with short_name "Fafhrd" with description SC_159 with p14_health 13 with p18_melee 1 with p48_follower_percentile_chan 75 has proper with p111_faction I465_enslaved with p152_weapon_user true with vector 0 with list_together 0 with cap_short_name "Fafhrd" has mark_as_thing with component_child I467_fafhrd_s_natural_weapon with IK2_Count 192 with IK2_Link I468_fafhrd_s_sword with IK8_Count 9 with IK8_Link I469_mouser with IK10_Count 0 with IK10_Link I469_mouser with KD_Count 10 with name 'fafhrd' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I468_fafhrd_s_sword "" class K39_sword with short_name "Fafhrd's sword" with description SC_160 has proper with vector 0 with list_together 0 with cap_short_name "Fafhrd's sword" has mark_as_thing with IK2_Count 194 with IK2_Link I467_fafhrd_s_natural_weapon with IK17_Count 24 with IK17_Link I467_fafhrd_s_natural_weapon with IK39_Count 1 with IK39_Link I471_mouser_s_sword with KD_Count 39 with name 'fafhrd^s' 'sword' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I467_fafhrd_s_natural_weapon "" class K18_natural_weapon with short_name "Fafhrd's natural weapon" has proper with vector 0 with list_together 0 with cap_short_name "Fafhrd's natural weapon" has mark_as_thing with component_parent I466_fafhrd with IK2_Count 193 with IK2_Link I469_mouser with IK17_Count 23 with IK17_Link I471_mouser_s_sword with IK18_Count 9 with IK18_Link I470_mouser_s_natural_weapon with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I469_mouser "" class K10_man with short_name "Mouser" with description SC_161 with p14_health 8 with p19_defence 9 with p48_follower_percentile_chan 85 has proper with p111_faction I465_enslaved with p152_weapon_user true with vector 0 with list_together 0 with cap_short_name "Mouser" has mark_as_thing with component_child I470_mouser_s_natural_weapon with IK2_Count 195 with IK2_Link I471_mouser_s_sword with IK8_Count 10 with IK8_Link I473_giant_tentacle with IK10_Count 1 with IK10_Link nothing with KD_Count 10 with name 'mouser' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I471_mouser_s_sword "" class K39_sword with short_name "Mouser's sword" with description SC_162 has proper with vector 0 with list_together 0 with cap_short_name "Mouser's sword" has mark_as_thing with IK2_Count 197 with IK2_Link I470_mouser_s_natural_weapon with IK17_Count 26 with IK17_Link I470_mouser_s_natural_weapon with IK39_Count 2 with IK39_Link I480_healer_s_sword with KD_Count 39 with name 'mouser^s' 'sword' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I470_mouser_s_natural_weapon "" class K18_natural_weapon with short_name "Mouser's natural weapon" has proper with vector 0 with list_together 0 with cap_short_name "Mouser's natural weapon" has mark_as_thing with component_parent I469_mouser with IK2_Count 196 with IK2_Link I472_power_of_the_mindslug with IK17_Count 25 with IK17_Link I474_giant_tentacle_s_natura with IK18_Count 10 with IK18_Link I474_giant_tentacle_s_natura with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I472_power_of_the_mindslug "" class K21_power with short_name "power of the mindslug" with p38_power_level 3 with p39_command_text SC_163 with p157_granting I463_mindslug with vector 0 with list_together 0 has mark_as_thing with IK2_Count 198 with IK2_Link I473_giant_tentacle with IK21_Count 7 with IK21_Link I475_power_of_the_tentacle with KD_Count 21 with name 'power' 'of' 'the' 'mindslug' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I473_giant_tentacle "" class K19_monster with short_name "giant tentacle" with description SC_164 with initial SC_165 with p14_health 35 with p18_melee 4 with p19_defence 10 with p31_level 3 with p33_perception 6 with p34_dexterity 10 with p35_willpower 6 with p162_eyeless true with vector 0 with list_together 0 has mark_as_thing with component_child I474_giant_tentacle_s_natura with IK2_Count 199 with IK2_Link I474_giant_tentacle_s_natura with IK8_Count 11 with IK8_Link I476_fanatics_of_aite_packag with IK19_Count 8 with IK19_Link I476_fanatics_of_aite_packag with KD_Count 19 with name 'giant' 'tentacle' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I474_giant_tentacle_s_natura "" class K18_natural_weapon with short_name "giant tentacle's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I473_giant_tentacle with IK2_Count 200 with IK2_Link I475_power_of_the_tentacle with IK17_Count 27 with IK17_Link I477_fanatics_of_aite_packag with IK18_Count 11 with IK18_Link I477_fanatics_of_aite_packag with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I475_power_of_the_tentacle "" class K21_power with short_name "power of the tentacle" with p38_power_level 3 with p39_command_text SC_166 with p157_granting I473_giant_tentacle with vector 0 with list_together 0 has mark_as_thing with IK2_Count 201 with IK2_Link I476_fanatics_of_aite_packag with IK21_Count 8 with IK21_Link I487_power_of_the_fanatics_o with KD_Count 21 with name 'power' 'of' 'the' 'tentacle' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I476_fanatics_of_aite_packag "" class K19_monster with short_name "fanatics-of-Aite-package" with p31_level 4 with vector 0 with list_together 0 has mark_as_thing with component_child I477_fanatics_of_aite_packag with IK2_Count 202 with IK2_Link I477_fanatics_of_aite_packag with IK8_Count 12 with IK8_Link I478_healer_of_aite with IK19_Count 9 with IK19_Link I478_healer_of_aite with KD_Count 19 with name 'fanatics-of-aite-package' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I477_fanatics_of_aite_packag "" class K18_natural_weapon with short_name "fanatics-of-Aite-package's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I476_fanatics_of_aite_packag with IK2_Count 203 with IK2_Link I478_healer_of_aite with IK17_Count 28 with IK17_Link I480_healer_s_sword with IK18_Count 12 with IK18_Link I479_healer_of_aite_s_natura with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I478_healer_of_aite "" class K19_monster with short_name "healer of Aite" with description SC_167 with initial SC_168 with p14_health 20 with p18_melee 1 with p19_defence 8 with p32_group_level 4 with p40_heal_power 5 has ~female has ~neuter with p152_weapon_user true with p183_aite_loved true with vector 0 with list_together 0 has mark_as_thing with component_child I479_healer_of_aite_s_natura with IK2_Count 204 with IK2_Link I480_healer_s_sword with IK8_Count 13 with IK8_Link I481_tormentor_of_aite with IK19_Count 10 with IK19_Link I481_tormentor_of_aite with KD_Count 19 with name 'healer' 'of' 'aite' 'white-robed' 'creature' with parse_name Parse_Name_GV170 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I480_healer_s_sword "" class K39_sword with short_name "healer's sword" with description SC_169 has p116_readied with vector 0 with list_together 0 has mark_as_thing with IK2_Count 206 with IK2_Link I479_healer_of_aite_s_natura with IK17_Count 30 with IK17_Link I479_healer_of_aite_s_natura with IK39_Count 3 with IK39_Link I486_defender_s_sword with KD_Count 39 with name 'healer^s' 'sword' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I479_healer_of_aite_s_natura "" class K18_natural_weapon with short_name "healer of Aite's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I478_healer_of_aite with IK2_Count 205 with IK2_Link I481_tormentor_of_aite with IK17_Count 29 with IK17_Link I483_tormentor_s_staff with IK18_Count 13 with IK18_Link I482_tormentor_of_aite_s_nat with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I481_tormentor_of_aite "" class K19_monster with short_name "tormentor of Aite" with description SC_170 with initial SC_171 with p14_health 16 with p18_melee 3 with p19_defence 9 with p32_group_level 4 has female has ~neuter with p152_weapon_user true with p183_aite_loved true with vector 0 with list_together 0 has mark_as_thing with component_child I482_tormentor_of_aite_s_nat with IK2_Count 207 with IK2_Link I483_tormentor_s_staff with IK8_Count 14 with IK8_Link I484_defender_of_aite with IK19_Count 11 with IK19_Link I484_defender_of_aite with KD_Count 19 with name 'tormentor' 'of' 'aite' 'black-robed' 'mage' 'creature' with parse_name Parse_Name_GV171 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I483_tormentor_s_staff "" class K44_staff_of_pain with short_name "tormentor's staff" with description SC_172 has p116_readied with vector 0 with list_together 0 has mark_as_thing with IK2_Count 209 with IK2_Link I482_tormentor_of_aite_s_nat with IK17_Count 32 with IK17_Link I482_tormentor_of_aite_s_nat with IK44_Count 0 with IK44_Link nothing with KD_Count 44 with name 'tormentor^s' 'staff' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I482_tormentor_of_aite_s_nat "" class K18_natural_weapon with short_name "tormentor of Aite's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I481_tormentor_of_aite with IK2_Count 208 with IK2_Link I484_defender_of_aite with IK17_Count 31 with IK17_Link I486_defender_s_sword with IK18_Count 14 with IK18_Link I485_defender_of_aite_s_natu with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I484_defender_of_aite "" class K19_monster with short_name "defender of Aite" with description SC_173 with initial SC_174 with p14_health 23 with p18_melee 1 with p19_defence 12 with p32_group_level 4 has ~female has ~neuter with p152_weapon_user true with p183_aite_loved true with vector 0 with list_together 0 has mark_as_thing with component_child I485_defender_of_aite_s_natu with IK2_Count 210 with IK2_Link I486_defender_s_sword with IK8_Count 15 with IK8_Link I488_bodmall with IK19_Count 12 with IK19_Link I488_bodmall with KD_Count 19 with name 'defender' 'of' 'aite' 'armoured' 'man' 'creature' with parse_name Parse_Name_GV172 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I486_defender_s_sword "" class K39_sword with short_name "defender's sword" with description SC_169 has p116_readied with vector 0 with list_together 0 has mark_as_thing with IK2_Count 212 with IK2_Link I485_defender_of_aite_s_natu with IK17_Count 34 with IK17_Link I485_defender_of_aite_s_natu with IK39_Count 4 with IK39_Link I498_demon_blade with KD_Count 39 with name 'defender^s' 'sword' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I485_defender_of_aite_s_natu "" class K18_natural_weapon with short_name "defender of Aite's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I484_defender_of_aite with IK2_Count 211 with IK2_Link I487_power_of_the_fanatics_o with IK17_Count 33 with IK17_Link I489_bodmall_s_natural_weapo with IK18_Count 15 with IK18_Link I489_bodmall_s_natural_weapo with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I487_power_of_the_fanatics_o "" class K21_power with short_name "power of the Fanatics of Aite" with p38_power_level 4 with p39_command_text SC_175 with p157_granting I476_fanatics_of_aite_packag with vector 0 with list_together 0 has mark_as_thing with IK2_Count 213 with IK2_Link I488_bodmall with IK21_Count 9 with IK21_Link I492_power_of_bodmall with KD_Count 21 with name 'power' 'of' 'the' 'fanatics' 'of' 'aite' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I488_bodmall "" class K19_monster with short_name "Bodmall" with description SC_176 with initial SC_177 with p14_health 35 with p18_melee 5 with p19_defence 12 with p31_level 4 with p33_perception 8 with p34_dexterity 8 with p35_willpower 9 has proper has female has ~neuter with vector 0 with list_together 0 with cap_short_name "Bodmall" has mark_as_thing with component_child I489_bodmall_s_natural_weapo with IK2_Count 214 with IK2_Link I489_bodmall_s_natural_weapo with IK8_Count 16 with IK8_Link I493_malygris with IK19_Count 13 with IK19_Link I493_malygris with KD_Count 19 with name 'bodmall' 'druid' 'druidess' 'witch' 'creature' with parse_name Parse_Name_GV173 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I489_bodmall_s_natural_weapo "" class K18_natural_weapon with short_name "Bodmall's natural weapon" has proper with vector 0 with list_together 0 with cap_short_name "Bodmall's natural weapon" has mark_as_thing with component_parent I488_bodmall with component_sibling I490_barkskin with IK2_Count 215 with IK2_Link I490_barkskin with IK17_Count 35 with IK17_Link I495_dagger_of_draining with IK18_Count 16 with IK18_Link I494_malygris_s_natural_weap with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I490_barkskin "" class K2_thing with short_name "Barkskin" with description text_routine_36 has proper with vector 0 with list_together 0 with cap_short_name "Barkskin" has mark_as_thing with component_parent I488_bodmall with IK2_Count 216 with IK2_Link I491_thorny_bushes with KD_Count 2 with name 'barkskin' 'skin' 'bark' with parse_name Parse_Name_GV174 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I491_thorny_bushes "" class K2_thing with short_name "thorny bushes" with description SC_178 with initial SC_179 has pluralname has static with vector 0 with list_together 0 has mark_as_thing with IK2_Count 217 with IK2_Link I492_power_of_bodmall with KD_Count 2 with name 'thorny' 'bushes' 'bush' 'thorn' 'thorns' 'huge' with parse_name Parse_Name_GV175 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I492_power_of_bodmall "" class K21_power with short_name "power of Bodmall" with p38_power_level 4 with p39_command_text SC_180 with p157_granting I488_bodmall with vector 0 with list_together 0 has mark_as_thing with IK2_Count 218 with IK2_Link I493_malygris with IK21_Count 10 with IK21_Link nothing with KD_Count 21 with name 'power' 'of' 'bodmall' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I493_malygris "" class K19_monster with short_name "Malygris" with description text_routine_37 with initial SC_181 with p14_health 55 with p18_melee 7 with p19_defence 16 with p31_level 5 with p33_perception 9 with p34_dexterity 9 with p35_willpower 12 with p43_teleport_amount 2 with p44_teleport_eagerness 8 with p45_disintegrate_power 10 has proper has ~female has ~neuter with p152_weapon_user true with vector 0 with list_together 0 with cap_short_name "Malygris" has mark_as_thing with component_child I494_malygris_s_natural_weap with IK2_Count 219 with IK2_Link I495_dagger_of_draining with IK8_Count 17 with IK8_Link I496_demonic_assassin with IK19_Count 14 with IK19_Link I496_demonic_assassin with KD_Count 19 with name 'malygris' 'sorcerer' 'mage' 'wizard' 'him' 'creature' with parse_name Parse_Name_GV179 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I495_dagger_of_draining "" class K41_dagger with short_name "dagger of draining" with description SC_182 with p20_damage_die 8 with p37_special_weapon_info text_routine_38 with vector 0 with list_together 0 has mark_as_thing with IK2_Count 221 with IK2_Link I494_malygris_s_natural_weap with IK17_Count 37 with IK17_Link I494_malygris_s_natural_weap with IK41_Count 2 with IK41_Link nothing with KD_Count 41 with name 'dagger' 'of' 'draining' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I494_malygris_s_natural_weap "" class K18_natural_weapon with short_name "Malygris's natural weapon" has proper with vector 0 with list_together 0 with cap_short_name "Malygris's natural weapon" has mark_as_thing with component_parent I493_malygris with IK2_Count 220 with IK2_Link I496_demonic_assassin with IK17_Count 36 with IK17_Link I498_demon_blade with IK18_Count 17 with IK18_Link I497_demonic_assassin_s_natu with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I496_demonic_assassin "" class K19_monster with short_name "demonic assassin" with description SC_183 with initial SC_184 with p14_health 25 with p18_melee 4 with p19_defence 12 with p31_level 0 with p33_perception 8 with p34_dexterity 8 with p35_willpower 8 with p48_follower_percentile_chan 100 with p111_faction I160_demonic with p152_weapon_user true with p170_follower true with p206_unnaturally_aware true with vector 0 with list_together 0 has mark_as_thing with component_child I497_demonic_assassin_s_natu with IK2_Count 222 with IK2_Link I498_demon_blade with IK8_Count 18 with IK8_Link I499_nameless_horror with IK19_Count 15 with IK19_Link I499_nameless_horror with KD_Count 19 with name 'demonic' 'assassin' 'horned' 'figure' 'creature' with parse_name Parse_Name_GV180 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object -> I498_demon_blade "" class K39_sword with short_name "demon blade" with description SC_185 with p52_internal_heat 4 with p222_cursed true with vector 0 with list_together 0 has mark_as_thing with IK2_Count 224 with IK2_Link I497_demonic_assassin_s_natu with IK17_Count 39 with IK17_Link I497_demonic_assassin_s_natu with IK39_Count 5 with IK39_Link nothing with KD_Count 39 with name 'demon' 'blade' 'blade' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I497_demonic_assassin_s_natu "" class K18_natural_weapon with short_name "demonic assassin's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I496_demonic_assassin with IK2_Count 223 with IK2_Link I499_nameless_horror with IK17_Count 38 with IK17_Link I500_nameless_horror_s_natur with IK18_Count 18 with IK18_Link I500_nameless_horror_s_natur with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I499_nameless_horror "" class K19_monster with short_name "Nameless Horror" with article SC_11 with description SC_186 with initial SC_187 with p14_health 1000 with p18_melee 50 with p31_level 10 with p48_follower_percentile_chan 60 with p111_faction I159_horrific with p149_emotionless true with p162_eyeless true with p206_unnaturally_aware true with vector 0 with list_together 0 has mark_as_thing with component_child I500_nameless_horror_s_natur with IK2_Count 225 with IK2_Link I500_nameless_horror_s_natur with IK8_Count 19 with IK8_Link I501_rotting_corpse with IK19_Count 16 with IK19_Link I501_rotting_corpse with KD_Count 19 with name 'nameless' 'horror' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I500_nameless_horror_s_natur "" class K18_natural_weapon with short_name "Nameless Horror's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I499_nameless_horror with IK2_Count 226 with IK2_Link I501_rotting_corpse with IK17_Count 40 with IK17_Link I502_rotting_corpse_s_natura with IK18_Count 19 with IK18_Link I502_rotting_corpse_s_natura with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I501_rotting_corpse "" class K19_monster with short_name "rotting corpse" with description text_routine_39 with initial SC_188 with p14_health 30 with p18_melee 3 with p19_defence 8 with p31_level 0 with p33_perception 6 with p34_dexterity 3 with p35_willpower 4 with p111_faction I158_undead with p149_emotionless true with p162_eyeless true with vector 0 with list_together 0 has mark_as_thing with component_child I502_rotting_corpse_s_natura with IK2_Count 227 with IK2_Link I502_rotting_corpse_s_natura with IK8_Count 20 with IK8_Link I513_aswang with IK19_Count 17 with IK19_Link I513_aswang with KD_Count 19 with name 'rotting' 'corpse' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I502_rotting_corpse_s_natura "" class K18_natural_weapon with short_name "rotting corpse's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I501_rotting_corpse with component_sibling I504_rotting_left_leg with IK2_Count 228 with IK2_Link I504_rotting_left_leg with IK17_Count 41 with IK17_Link I514_aswang_s_natural_weapon with IK18_Count 20 with IK18_Link I514_aswang_s_natural_weapon with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I504_rotting_left_leg "" class K53_rotting_limb with short_name "rotting left leg" with description text_routine_40 with vector 0 with list_together 0 has mark_as_thing with component_parent I501_rotting_corpse with component_sibling I505_rotting_right_leg with IK2_Count 229 with IK2_Link I505_rotting_right_leg with IK53_Count 0 with IK53_Link I505_rotting_right_leg with KD_Count 53 with name 'rotting' 'left' 'leg' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I505_rotting_right_leg "" class K53_rotting_limb with short_name "rotting right leg" with description text_routine_41 with vector 0 with list_together 0 has mark_as_thing with component_parent I501_rotting_corpse with component_sibling I506_rotting_left_arm with IK2_Count 230 with IK2_Link I506_rotting_left_arm with IK53_Count 1 with IK53_Link I506_rotting_left_arm with KD_Count 53 with name 'rotting' 'right' 'leg' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I506_rotting_left_arm "" class K53_rotting_limb with short_name "rotting left arm" with description text_routine_42 with vector 0 with list_together 0 has mark_as_thing with component_parent I501_rotting_corpse with component_sibling I507_rotting_right_arm with IK2_Count 231 with IK2_Link I507_rotting_right_arm with IK53_Count 2 with IK53_Link I507_rotting_right_arm with KD_Count 53 with name 'rotting' 'left' 'arm' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I507_rotting_right_arm "" class K53_rotting_limb with short_name "rotting right arm" with description text_routine_43 with vector 0 with list_together 0 has mark_as_thing with component_parent I501_rotting_corpse with component_sibling I508_rotting_head with IK2_Count 232 with IK2_Link I508_rotting_head with IK53_Count 3 with IK53_Link I508_rotting_head with KD_Count 53 with name 'rotting' 'right' 'arm' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I508_rotting_head "" class K53_rotting_limb with short_name "rotting head" with description text_routine_44 with vector 0 with list_together 0 has mark_as_thing with component_parent I501_rotting_corpse with IK2_Count 233 with IK2_Link I513_aswang with IK53_Count 4 with IK53_Link nothing with KD_Count 53 with name 'rotting' 'head' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I513_aswang "" class K19_monster with short_name "aswang" with description text_routine_45 with initial text_routine_46 with p14_health 22 with p18_melee 2 with p19_defence 9 with p31_level 0 with p33_perception 5 with p34_dexterity 6 with p35_willpower 7 with p111_faction I158_undead with p242_as_shape I510_as_witch with vector 0 with list_together 0 has mark_as_thing with component_child I514_aswang_s_natural_weapon with IK2_Count 234 with IK2_Link I514_aswang_s_natural_weapon with IK8_Count 21 with IK8_Link I515_abyss_of_the_soul with IK19_Count 18 with IK19_Link I515_abyss_of_the_soul with KD_Count 19 with name 'aswang' 'witch' 'dog' 'hound' 'bird' 'owl' 'woman' 'ugly' 'old' 'creature' with parse_name Parse_Name_GV181 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I514_aswang_s_natural_weapon "" class K18_natural_weapon with short_name "aswang's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I513_aswang with IK2_Count 235 with IK2_Link I515_abyss_of_the_soul with IK17_Count 42 with IK17_Link I516_abyss_of_the_soul_s_nat with IK18_Count 21 with IK18_Link I516_abyss_of_the_soul_s_nat with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I515_abyss_of_the_soul "" class K19_monster with short_name "abyss of the soul" with description text_routine_47 with initial text_routine_48 with p14_health 40 with p18_melee 0 with p19_defence 8 with p31_level 0 with p33_perception 5 with p34_dexterity 5 with p35_willpower 20 with p111_faction I158_undead with p149_emotionless true with p151_non_attacker true with p154_size I152_small with p158_flyer true with p162_eyeless true with vector 0 with list_together 0 has mark_as_thing with component_child I516_abyss_of_the_soul_s_nat with IK2_Count 236 with IK2_Link I516_abyss_of_the_soul_s_nat with IK8_Count 22 with IK8_Link I517_smoke_demon with IK19_Count 19 with IK19_Link I517_smoke_demon with KD_Count 19 with name 'abyss' 'of' 'the' 'soul' 'creature' with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I516_abyss_of_the_soul_s_nat "" class K18_natural_weapon with short_name "abyss of the soul's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I515_abyss_of_the_soul with IK2_Count 237 with IK2_Link I517_smoke_demon with IK17_Count 43 with IK17_Link I518_smoke_demon_s_natural_w with IK18_Count 22 with IK18_Link I518_smoke_demon_s_natural_w with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I517_smoke_demon "" class K19_monster with short_name "smoke demon" with description SC_189 with p14_health 10 with p18_melee 2 with p19_defence 5 with p31_level 0 with p33_perception 6 with p34_dexterity 6 with p35_willpower 8 with p111_faction I159_horrific with p149_emotionless true with p158_flyer true with p162_eyeless true with p210_smoke_attuned true with vector 0 with list_together 0 has mark_as_thing with component_child I518_smoke_demon_s_natural_w with IK2_Count 238 with IK2_Link I518_smoke_demon_s_natural_w with IK8_Count 23 with IK8_Link I519_imp with IK19_Count 20 with IK19_Link I519_imp with KD_Count 19 with name 'smoke' 'demon' 'tendrils' 'creature' with parse_name Parse_Name_GV182 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I518_smoke_demon_s_natural_w "" class K18_natural_weapon with short_name "smoke demon's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I517_smoke_demon with IK2_Count 239 with IK2_Link I519_imp with IK17_Count 44 with IK17_Link I520_imp_s_natural_weapon with IK18_Count 23 with IK18_Link I520_imp_s_natural_weapon with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I519_imp "" class K19_monster with short_name "imp" with description SC_190 with p14_health 10 with p18_melee -2 with p19_defence 9 with p31_level 0 with p33_perception 6 with p34_dexterity 9 with p35_willpower 4 with p111_faction I160_demonic with p158_flyer true with vector 0 with list_together 0 has mark_as_thing with component_child I520_imp_s_natural_weapon with IK2_Count 240 with IK2_Link I520_imp_s_natural_weapon with IK8_Count 24 with IK8_Link nothing with IK19_Count 21 with IK19_Link nothing with KD_Count 19 with name 'imp' 'claws' 'creature' with parse_name Parse_Name_GV183 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I520_imp_s_natural_weapon "" class K18_natural_weapon with short_name "imp's natural weapon" with vector 0 with list_together 0 has mark_as_thing with component_parent I519_imp with IK2_Count 241 with IK2_Link I523_portal_to_kerkerkruip with IK17_Count 45 with IK17_Link nothing with IK18_Count 24 with IK18_Link nothing with KD_Count 18 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I521_elemental_plane_of_smok "" class K1_room with short_name "Elemental Plane of Smoke" with description SC_191 has proper has ~p127_connectable has ~p129_connection_inviting has ~p131_placeable with p133_habitable false with p135_treasurable false with p137_extra_accepting false with p141_vertical_placement I109_vp_agnostic with p142_mood I120_elemental with p166_teleportable false with vector 0 with room_index -1 with list_together 0 with cap_short_name "Elemental Plane of Smoke" has mark_as_room with IK1_Count 50 with IK1_Link I522_elemental_plane_of_smok with KD_Count 1 with name 'elemental' 'plane' 'of' 'smoke' ; Object -> I523_portal_to_kerkerkruip "" class K2_thing with short_name "portal to Kerkerkruip" with description SC_192 has static with p180_material I174_stone with vector 0 with list_together 0 has mark_as_thing with IK2_Count 242 with IK2_Link nothing with KD_Count 2 with name 'portal' 'to' 'kerkerkruip' 'exit' with parse_name Parse_Name_GV184 with action_bitmap 0 0 0 0 0 0 0 0 0 0 ; Object I522_elemental_plane_of_smok "" class K1_room with short_name "Elemental Plane of Smoke Storage" has proper has ~p131_placeable with vector 0 with room_index -1 with list_together 0 with cap_short_name "Elemental Plane of Smoke Storage" has mark_as_room with IK1_Count 51 with IK1_Link I524_null_room with KD_Count 1 with name 'elemental' 'plane' 'of' 'smoke' 'storage' ; Object I524_null_room "" class K1_room with short_name "Null-Room" with description SC_193 has proper has ~p131_placeable with vector 0 with room_index -1 with list_together 0 with cap_short_name "Null-Room" has mark_as_room with IK1_Count 52 with IK1_Link nothing with KD_Count 1 with name 'null-room' ; Constant I65_figure_of_cover = 1; Constant I66_entire_game = 1; Constant I68_didn_t_understand_error = 1; Constant I69_only_understood_as_far_a = 2; Constant I70_didn_t_understand_that_n = 3; Constant I71_can_only_do_that_to_some = 4; Constant I72_can_t_see_any_such_thing = 5; Constant I73_said_too_little_error = 6; Constant I74_aren_t_holding_that_erro = 7; Constant I75_can_t_use_multiple_objec = 8; Constant I76_can_only_use_multiple_ob = 9; Constant I77_not_sure_what_it_refers_ = 10; Constant I78_excepted_something_not_i = 11; Constant I79_not_a_verb_i_recognise_e = 12; Constant I80_not_something_you_need_t = 13; Constant I81_can_t_see_it_at_the_mome = 14; Constant I82_didn_t_understand_the_wa = 15; Constant I83_not_enough_of_those_avai = 16; Constant I84_nothing_to_do_error = 17; Constant I85_noun_did_not_make_sense_ = 18; Constant I86_referred_to_a_determinat = 19; Constant I87_i_beg_your_pardon_error = 20; Constant I89_file_of_save_data = 1; Constant I91_friendly = 1; Constant I92_passive = 2; Constant I93_hostile = 3; Constant I95_at_inactive = 1; Constant I96_at_act = 2; Constant I97_at_react = 3; Constant I99_peace = 1; Constant I100_combat = 2; Constant I101_player_choosing = 3; Constant I102_reactions = 4; Constant I103_concluding = 5; Constant I109_vp_agnostic = 1; Constant I110_vp_underground = 2; Constant I111_vp_likely_underground = 3; Constant I112_vp_above_ground = 4; Constant I113_vp_high = 5; Constant I114_vp_likely_high = 6; Constant I116_civilised = 1; Constant I117_religious = 2; Constant I118_barren = 3; Constant I119_deathly = 4; Constant I120_elemental = 5; Constant I121_magical = 6; Constant I122_alchemical = 7; Constant I123_non_mood = 8; Constant I151_tiny = 1; Constant I152_small = 2; Constant I153_medium = 3; Constant I154_large = 4; Constant I155_huge = 5; Constant I156_gargantuan = 6; Constant I158_undead = 4; Constant I159_horrific = 5; Constant I160_demonic = 6; Constant I163_burner = 1; Constant I164_melter = 2; Constant I165_other_material = 1; Constant I166_iron = 2; Constant I167_silver = 3; Constant I168_paper = 4; Constant I169_cloth = 5; Constant I170_wood = 6; Constant I171_leather = 7; Constant I172_flesh = 8; Constant I173_glass = 9; Constant I174_stone = 10; Constant I175_dragon_skin = 11; Constant I176_radiance = 12; Constant I177_adamant = 13; Constant I178_vapour = 14; Constant I181_human_form = 1; Constant I182_ghoul = 2; Constant I183_vampire = 3; Constant I184_vampire_bat = 4; Constant I188_minor = 1; Constant I189_major = 2; Constant I190_epic = 3; Constant I191_unique = 4; Constant I192_special = 5; Constant I193_non_treasure = 6; Constant I212_scroll_teleportation = 1; Constant I213_scroll_identify = 2; Constant I214_scroll_remove_curse = 3; Constant I215_scroll_ghoulification = 4; Constant I216_scroll_shadows = 5; Constant I217_scroll_summoning = 6; Constant I218_scroll_fireworks = 7; Constant I219_scroll_blade = 8; Constant I220_scroll_protection = 9; Constant I221_scroll_ethereal = 10; Constant I222_scroll_skill = 11; Constant I223_scroll_death = 12; Constant I224_no_effect = 13; Constant I226_none_parse = 1; Constant I227_mort_eilysh_parse = 2; Constant I228_naar_od_erae_parse = 3; Constant I229_dolp_zeez_parse = 4; Constant I230_chetnak_parse = 5; Constant I231_cistrob_jirsgev_parse = 6; Constant I232_twan_metier_parse = 7; Constant I233_hermei_le_schim_parse = 8; Constant I234_lonsifira_parse = 9; Constant I235_kripmeteel_parse = 10; Constant I236_souspenot_parse = 11; Constant I237_shalm_sawesas_parse = 12; Constant I238_zyxyz_parse = 13; Constant I465_enslaved = 7; Constant I510_as_witch = 1; Constant I511_as_bird = 2; Constant I512_as_dog = 3; Constant I525_file_of_victories = 2; Constant I526_figure_opening_figure = 2; Constant I527_file_of_achievements = 3; Constant I529_assistant_dungeoneer = 1; Constant I530_adventurer = 2; Constant I531_hunter = 3; Constant I532_destroyer = 4; Constant I533_mageslayer = 5; Constant I534_deathblow = 6; Constant I535_i_return_to_serve = 7; Constant I536_from_the_shadows_i_come = 8; Constant I537_stunning_performance = 9; Constant I538_detox = 10; Constant I539_injury_to_insult = 11; Constant I540_unmoved = 12; Constant I541_nature_s_fragile_vessel = 13; Constant I542_durin_s_bane = 14; Array Global_Vars --> (false) ! 7 (SC_194) ! 24 (SC_3) ! 29 (SC_2) ! 30 (SC_195) ! 31 (EMPTY_TEXT_VALUE) ! 32 (2) ! 33 (0) ! 34 (0) ! 43 (0) ! 51 (0) ! 52 (SC_196) ! 53 (T2_sample_options) ! 54 (1) ! 55 (T8_ordinary_status) ! 56 (14) ! 57 (0) ! 58 (0) ! 59 (EMPTY_TEXT_VALUE) ! 60 (SC_197) ! 61 (0) ! 62 (0) ! 63 (0) ! 64 (1) ! 65 (1) ! 66 (SC_194) ! 67 (SC_198) ! 68 (SC_199) ! 69 (1) ! 73 (I99_peace) ! 74 (selfobj) ! 75 (##Wait) ! 76 (false) ! 77 (0) ! 78 (0) ! 79 (0) ! 80 (selfobj) ! 81 (selfobj) ! 82 (false) ! 83 (selfobj) ! 84 (1) ! 85 (selfobj) ! 86 (selfobj) ! 87 (I106_your_natural_weapon) ! 88 (I106_your_natural_weapon) ! 89 (0) ! 90 (0) ! 91 (I106_your_natural_weapon) ! 92 (0) ! 93 (0) ! 94 (X125) ! 95 (X125) ! 96 (0) ! 97 (0) ! 98 (0) ! 99 (0) ! 100 (X125) ! 101 (X125) ! 102 (0) ! 103 (0) ! 104 (0) ! 105 (I436_swarm_of_daggers) ! 106 (0) ! 107 (selfobj) ! 108 (selfobj) ! 109 (X125) ! 110 (0) ! 111 (X125) ! 112 (X125) ! 113 (selfobj) ! 114 (selfobj) ! 115 (selfobj) ! 116 (selfobj) ! 117 (selfobj) ! 118 (selfobj) ! 119 (X125) ! 120 (X125) ! 121 (0) ! 122 (false) ! 123 (selfobj) ! 124 (X125) ! 125 (nothing) ! 126 (0) ! 127 (0) ! 128 (0) ! 129 (0) ! 130 (0) ! 131 (0) ! 132 (selfobj) ! 133 (0) ! 134 (0) ! 135 (0) ! 136 (0) ! 137 (0) ! 138 (I165_other_material) ! 139 (I165_other_material) ! 140 (0) ! 141 (0) ! 142 (0) ! 143 (0) ! 144 (0) ! 145 (0) ! 146 (0) ! 147 (0) ! 148 (0) ! 149 (0) ! 150 (0) ! 151 (0) ! 152 (0) ! 153 (selfobj) ! 154 (0) ! 155 (false) ! 156 (0) ! 157 (false) ! 158 (0) ! 159 (I429_broken_pipe) ! 160 (false) ! 161 (false) ! 162 (0) ! 163 (0) ! 164 (0) ! 165 (0) ! 166 (0) ! 167 (0) ! 168 (I510_as_witch) ! 169 (2) ! 170 (I375_entrance_hall) ! 171 (I524_null_room) ! 172 (0) ! 173 (0) ! 174 (0) ! 175 (0) ! 176 (0) ! 177 (0) ! 178 (1) ! 179 (0) ! 180 ; Array V2V_Bitmap_67 --> 0 0 7 ! Number of left instances 7 ! Number of right instances T59 ! To print left instances T59 ! To print right instances true ! Cache broken flag V2V_Route_Cache_67 ! Cache array (if any) $4004 $0000 $0000 $0000 ; Constant V2V_Route_Cache_67 = 0; Array V2V_Bitmap_71 --> IK8_Count IK8_Count 25 ! Number of left instances 25 ! Number of right instances PrintShortName ! To print left instances PrintShortName ! To print right instances true ! Cache broken flag V2V_Route_Cache_71 ! Cache array (if any) $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 ; Constant V2V_Route_Cache_71 = 0; Array V2V_Bitmap_73 --> IK1_Count IK1_Count 53 ! Number of left instances 53 ! Number of right instances PrintShortName ! To print left instances PrintShortName ! To print right instances true ! Cache broken flag V2V_Route_Cache_73 ! Cache array (if any) $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 ; Constant V2V_Route_Cache_73 = 0; Array V2V_Bitmap_83 --> IK8_Count IK8_Count 25 ! Number of left instances 25 ! Number of right instances PrintShortName ! To print left instances PrintShortName ! To print right instances true ! Cache broken flag V2V_Route_Cache_83 ! Cache array (if any) $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 $0000 ; Constant V2V_Route_Cache_83 = 0; Array T0_final_question_options table tab_0_0 tab_0_1 tab_0_2 tab_0_3 tab_0_4; Array tab_0_0 table $0064 0 (SC_200) (SC_201) (SC_202) (SC_203) (SC_204) ; Array tab_0_1 table $0465 1 (0) (0) (1) (0) (0) ; Array tab_0_2 table $2066 2 (Consult_Grammar_221) (Consult_Grammar_222) (Consult_Grammar_223) (Consult_Grammar_224) (Consult_Grammar_225) ; Array tab_0_3 table $0067 3 (IMMEDIATELY_RESTART_VM_R) (IMMEDIATELY_RESTORE_SAVED_R) TABLE_NOVALUE (IMMEDIATELY_QUIT_R) (IMMEDIATELY_UNDO_R) ; Array tab_0_4 table $0068 4 TABLE_NOVALUE TABLE_NOVALUE (V26_amusing_a_victorious_pla) TABLE_NOVALUE TABLE_NOVALUE; Array T1_locale_priorities table tab_1_0 tab_1_1; Array tab_1_0 table $0869 NULL TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_1_1 table $446a 5 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T2_sample_options table tab_2_0 tab_2_1 tab_2_2 tab_2_3; Array tab_2_0 table $006b 36 (SC_205) ; Array tab_2_1 table $006c 37 TABLE_NOVALUE; Array tab_2_2 table $006d 38 (SC_206) ; Array tab_2_3 table $006e 39 TABLE_NOVALUE; Array T3_menu_commands table tab_3_0 tab_3_1; Array tab_3_0 table $446f 40 (78) (110) (80) (112) (81) (113) (13) (32) (130) (129) (27) (-8) (-6) (-5) (-4) ; Array tab_3_1 table $0070 42 (R_741) (R_741) (R_742) (R_742) (R_740) (R_740) (R_743) (R_743) (R_741) (R_742) (R_740) (R_740) (R_743) (R_741) (R_742) ; Array T4_shallow_menu_status table tab_4_0 tab_4_1 tab_4_2; Array tab_4_0 table $0071 44 (EMPTY_TEXT_VALUE) ; Array tab_4_1 table $0072 45 (text_routine_49) ; Array tab_4_2 table $0073 46 (EMPTY_TEXT_VALUE) ; Array T5_deep_menu_status table tab_5_0 tab_5_1 tab_5_2; Array tab_5_0 table $0071 47 (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (SC_207) (SC_208) ; Array tab_5_1 table $0072 48 (text_routine_50) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) (EMPTY_TEXT_VALUE) ; Array tab_5_2 table $0073 49 (EMPTY_TEXT_VALUE) (SC_209) (text_routine_51) (SC_210) ; Array T6_sample_hints table tab_6_0 tab_6_1; Array tab_6_0 table $0074 50 (SC_211) ; Array tab_6_1 table $4475 51 TABLE_NOVALUE; Array T8_ordinary_status table tab_8_0 tab_8_1 tab_8_2; Array tab_8_0 table $0071 52 (text_routine_52) ; Array tab_8_1 table $0072 53 (EMPTY_TEXT_VALUE) ; Array tab_8_2 table $0073 54 (text_routine_53) ; Array T9_delayed_actions table tab_9_0 tab_9_1; Array tab_9_0 table $4476 55 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_9_1 table $0677 62 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T10_ai_target_options table tab_10_0 tab_10_1; Array tab_10_0 table $0878 NULL TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_10_1 table $4479 69 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T11_ai_action_options table tab_11_0 tab_11_1; Array tab_11_0 table $067a 76 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_11_1 table $447b 83 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T12_ai_weapon_options table tab_12_0 tab_12_1; Array tab_12_0 table $087c NULL TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_12_1 table $447d 90 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T13_suitable_rooms table tab_13_0 tab_13_1; Array tab_13_0 table $087e NULL TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_13_1 table $447f 97 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T14_monster_rooms table tab_14_0 tab_14_1 tab_14_2; Array tab_14_0 table $0880 NULL TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_14_1 table $4481 123 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_14_2 table $4482 126 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T15_suitable_monsters table tab_15_0 tab_15_1; Array tab_15_0 table $0883 NULL TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_15_1 table $4484 129 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T16_materials table tab_16_0 tab_16_1 tab_16_2 tab_16_3 tab_16_4; Array tab_16_0 table $5c85 NULL (I165_other_material) (I166_iron) (I167_silver) (I168_paper) (I169_cloth) (I170_wood) (I171_leather) (I172_flesh) (I173_glass) (I174_stone) (I175_dragon_skin) (I176_radiance) (I177_adamant) (I178_vapour) ; Array tab_16_1 table $1086 142 (SC_212) (SC_213) (SC_214) (SC_215) (SC_216) (SC_217) (SC_218) (SC_219) (SC_220) (SC_221) (SC_222) (SC_223) (SC_224) (SC_225) ; Array tab_16_2 table $5487 144 (5) (10) (7) (1) (1) (3) (3) (2) (6) (15) (20) (99) (999) (999) ; Array tab_16_3 table $5c88 NULL (I163_burner) (I164_melter) (I164_melter) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I163_burner) (I164_melter) (I164_melter) (I163_burner) (I164_melter) (I164_melter) (I163_burner) ; Array tab_16_4 table $5489 146 (950) (995) (985) (950) (950) (970) (980) (900) (999) (998) (999) (1000) (1000) (1000) ; Array T17_scroll_effects --> 1 tab_17_0; Array tab_17_0 table $5c8a NULL (I212_scroll_teleportation) (I213_scroll_identify) (I214_scroll_remove_curse) (I215_scroll_ghoulification) (I216_scroll_shadows) (I217_scroll_summoning) (I218_scroll_fireworks) (I219_scroll_blade) (I220_scroll_protection) (I221_scroll_ethereal) (I222_scroll_skill) (I223_scroll_death) (I224_no_effect) ; Array T18_magic_scrolls table tab_18_0 tab_18_1 tab_18_2 tab_18_3 tab_18_4; Array tab_18_0 table $088b NULL (I239_scroll_of_teleportation) (I240_scroll_of_identify) (I241_scroll_of_remove_curse) (I242_scroll_of_ghoulificatio) (I243_scroll_of_shadows) (I244_scroll_of_summoning) (I245_scroll_of_fireworks) (I246_scroll_of_the_blade) (I247_scroll_of_protection) (I248_scroll_of_etherealness) (I249_scroll_of_skill) (I250_scroll_of_death) (I251_scroll_labelled_mort_ei) (I252_scroll_labelled_naar_od) (I253_scroll_labelled_dolp_ze) (I254_scroll_labelled_chetnak) (I255_scroll_labelled_cistrob) (I256_scroll_labelled_twan_me) (I257_scroll_labelled_hermei_) (I258_scroll_labelled_lonsifi) (I259_scroll_labelled_kripmet) (I260_scroll_labelled_souspen) (I261_scroll_labelled_shalm_s) (I262_scroll_labelled_zyxyz) ; Array tab_18_1 table $4c8c NULL (I212_scroll_teleportation) (I213_scroll_identify) (I214_scroll_remove_curse) (I215_scroll_ghoulification) (I216_scroll_shadows) (I217_scroll_summoning) (I218_scroll_fireworks) (I219_scroll_blade) (I220_scroll_protection) (I221_scroll_ethereal) (I222_scroll_skill) (I223_scroll_death) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) (I224_no_effect) ; Array tab_18_2 table $048d 148 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) (0) ; Array tab_18_3 table $008e 151 (SC_14) (SC_17) (SC_20) (SC_23) (SC_26) (SC_29) (SC_32) (SC_35) (SC_38) (SC_41) (SC_44) (SC_47) (SC_48) (SC_49) (SC_50) (SC_51) (SC_52) (SC_53) (SC_54) (SC_55) (SC_56) (SC_57) (SC_58) (SC_59) ; Array tab_18_4 table $4c8f NULL (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I226_none_parse) (I227_mort_eilysh_parse) (I228_naar_od_erae_parse) (I229_dolp_zeez_parse) (I230_chetnak_parse) (I231_cistrob_jirsgev_parse) (I232_twan_metier_parse) (I233_hermei_le_schim_parse) (I234_lonsifira_parse) (I235_kripmeteel_parse) (I236_souspenot_parse) (I237_shalm_sawesas_parse) (I238_zyxyz_parse) ; Array T19_tome_possibilities table tab_19_0 tab_19_1; Array tab_19_0 table $4c90 NULL (I170_wood) (I170_wood) (I170_wood) (I166_iron) (I166_iron) (I166_iron) (I166_iron) (I167_silver) (I167_silver) (I167_silver) ; Array tab_19_1 table $4c91 NULL (I166_iron) (I167_silver) (I177_adamant) (I170_wood) (I167_silver) (I177_adamant) (I173_glass) (I166_iron) (I170_wood) (I177_adamant) ; Array T20_fancy_status table tab_20_0 tab_20_1 tab_20_2; Array tab_20_0 table $0071 154 (text_routine_54) (text_routine_55) ; Array tab_20_1 table $0072 155 (text_routine_56) TABLE_NOVALUE; Array tab_20_2 table $0073 156 (text_routine_57) TABLE_NOVALUE; Array T21_victories table tab_21_0 tab_21_1 tab_21_2; Array tab_21_0 table $4492 157 (0) ; Array tab_21_1 table $4493 158 (0) ; Array tab_21_2 table $4494 159 (0) ; Array T22_kerkerkruip_help table tab_22_0 tab_22_1 tab_22_2 tab_22_3; Array tab_22_0 table $006b 160 (SC_226) (SC_227) (SC_228) (SC_229) (SC_230) (SC_231) ; Array tab_22_1 table $006c 161 (T23_new_player_help) (T24_advanced_help) (T27_achievement_menu) TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_22_2 table $006d 162 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE (text_routine_58) (text_routine_59) (text_routine_60) ; Array tab_22_3 table $006e 163 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T23_new_player_help table tab_23_0 tab_23_1 tab_23_2 tab_23_3; Array tab_23_0 table $006b 164 (SC_232) (SC_233) (SC_234) (SC_235) (SC_236) (SC_237) (SC_238) (SC_239) (SC_240) (SC_241) (SC_242) ; Array tab_23_1 table $006c 166 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_23_2 table $006d 168 (text_routine_61) (text_routine_62) (text_routine_63) (text_routine_64) (text_routine_65) (text_routine_66) (text_routine_67) (text_routine_68) (text_routine_69) (SC_243) (text_routine_70) ; Array tab_23_3 table $006e 170 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T24_advanced_help table tab_24_0 tab_24_1 tab_24_2 tab_24_3; Array tab_24_0 table $006b 172 (SC_244) (SC_245) (SC_246) (SC_247) (SC_248) (SC_249) ; Array tab_24_1 table $006c 173 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_24_2 table $006d 174 (SC_250) (text_routine_71) (text_routine_72) (text_routine_73) (text_routine_74) (text_routine_75) ; Array tab_24_3 table $006e 175 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T25_achievements --> 1 tab_25_0; Array tab_25_0 table $5c95 NULL (I529_assistant_dungeoneer) (I530_adventurer) (I531_hunter) (I532_destroyer) (I533_mageslayer) (I534_deathblow) (I535_i_return_to_serve) (I536_from_the_shadows_i_come) (I537_stunning_performance) (I538_detox) (I539_injury_to_insult) (I540_unmoved) (I541_nature_s_fragile_vessel) (I542_durin_s_bane) ; Array T26_held_achievements table tab_26_0 tab_26_1; Array tab_26_0 table $4c96 NULL TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_26_1 table $4497 176 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T27_achievement_menu table tab_27_0 tab_27_1 tab_27_2 tab_27_3; Array tab_27_0 table $006b 178 (text_routine_76) (text_routine_77) (text_routine_78) (text_routine_79) (text_routine_80) (text_routine_81) (text_routine_82) (text_routine_83) (text_routine_84) (text_routine_85) (text_routine_86) (text_routine_87) (text_routine_88) (text_routine_89) ; Array tab_27_1 table $006c 180 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_27_2 table $006d 182 (SC_251) (SC_252) (SC_253) (SC_254) (SC_255) (SC_256) (SC_257) (SC_258) (SC_259) (SC_260) (SC_261) (SC_262) (SC_263) (SC_264) ; Array tab_27_3 table $006e 184 TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array TB_Blanks -> ! For table T0_final_question_options $00 ! Column 0 $00 ! Column 1 $00 ! Column 2 $04 ! Column 3 $1b ! Column 4 ! For table T1_locale_priorities $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $0f ! Column 1 ! For table T2_sample_options $00 ! Column 0 $01 ! Column 1 $00 ! Column 2 $01 ! Column 3 ! For table T3_menu_commands $00 $00 ! Column 0 $00 $00 ! Column 1 ! For table T4_shallow_menu_status $00 ! Column 0 $00 ! Column 1 $00 ! Column 2 ! For table T5_deep_menu_status $00 ! Column 0 $00 ! Column 1 $00 ! Column 2 ! For table T6_sample_hints $00 ! Column 0 $01 ! Column 1 ! For table T8_ordinary_status $00 ! Column 0 $00 ! Column 1 $00 ! Column 2 ! For table T9_delayed_actions $ff $ff $ff $ff $ff $ff $07 ! Column 0 $ff $ff $ff $ff $ff $ff $07 ! Column 1 ! For table T10_ai_target_options $ff $ff $ff $ff $ff $ff $07 ! Column 1 ! For table T11_ai_action_options $ff $ff $ff $ff $ff $ff $07 ! Column 0 $ff $ff $ff $ff $ff $ff $07 ! Column 1 ! For table T12_ai_weapon_options $ff $ff $ff $ff $ff $ff $07 ! Column 1 ! For table T13_suitable_rooms $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $01 ! Column 1 ! For table T14_monster_rooms $ff $ff $1f ! Column 1 $ff $ff $1f ! Column 2 ! For table T15_suitable_monsters $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $ff $1f ! Column 1 ! For table T16_materials $00 $00 ! Column 1 $00 $00 ! Column 2 $00 $00 ! Column 4 ! For table T17_scroll_effects ! For table T18_magic_scrolls $00 $00 $00 ! Column 2 $00 $00 $00 ! Column 3 ! For table T19_tome_possibilities ! For table T20_fancy_status $00 ! Column 0 $02 ! Column 1 $02 ! Column 2 ! For table T21_victories $00 ! Column 0 $00 ! Column 1 $00 ! Column 2 ! For table T22_kerkerkruip_help $00 ! Column 0 $38 ! Column 1 $07 ! Column 2 $3f ! Column 3 ! For table T23_new_player_help $00 $00 ! Column 0 $ff $07 ! Column 1 $00 $00 ! Column 2 $ff $07 ! Column 3 ! For table T24_advanced_help $00 ! Column 0 $3f ! Column 1 $00 ! Column 2 $3f ! Column 3 ! For table T25_achievements ! For table T26_held_achievements $ff $7f ! Column 1 ! For table T27_achievement_menu $00 $00 ! Column 0 $ff $3f ! Column 1 $00 $00 ! Column 2 $ff $3f ! Column 3 ! End of table NULL NULL; [ TC_KOV tc; switch (tc) { 100: return TEXT_TY; ! final question wording: text 101: return TRUTH_STATE_TY; ! only if victorious: truth state 102: return UNDERSTANDING_TY; ! topic: topic 103: return KD1_values_based_rule_producin; ! final response rule: values based rule producing values 104: return KD2_activity; ! final response activity: activity 105: return OBJECT_TY; ! notable-object: object 106: return NUMBER_TY; ! locale description priority: number 107: return TEXT_TY; ! title: text 108: return TABLE_TY; ! subtable: table name 109: return TEXT_TY; ! description: text 110: return KD3_rule; ! toggle: rule 111: return NUMBER_TY; ! number: number 112: return KD1_values_based_rule_producin; ! effect: values based rule producing values 113: return TEXT_TY; ! left: text 114: return TEXT_TY; ! central: text 115: return TEXT_TY; ! right: text 116: return TEXT_TY; ! hint: text 117: return NUMBER_TY; ! used: number 118: return NUMBER_TY; ! action speed: number 119: return STORED_ACTION_TY; ! action: stored action 120: return OBJECT_TY; ! person: object 121: return NUMBER_TY; ! target weight: number 122: return STORED_ACTION_TY; ! option: stored action 123: return NUMBER_TY; ! action weight: number 124: return OBJECT_TY; ! weapon: object 125: return NUMBER_TY; ! weapon weight: number 126: return OBJECT_TY; ! candidate: object 127: return NUMBER_TY; ! room score: number 128: return OBJECT_TY; ! locale: object 129: return NUMBER_TY; ! distance: number 130: return NUMBER_TY; ! level: number 131: return OBJECT_TY; ! applicant: object 132: return NUMBER_TY; ! monster score: number 133: return 50; ! material: material 134: return TEXT_TY; ! material-adjective: text 135: return NUMBER_TY; ! destroying heat: number 136: return 51; ! heat-behaviour: heat-behaviour 137: return NUMBER_TY; ! corrosion resistance: number 138: return 54; ! scroll-effect-value: scroll-effect-value 139: return 9; ! scroll: scroll 140: return 54; ! scroll-effect: scroll-effect-value 141: return TRUTH_STATE_TY; ! true-name: truth state 142: return TEXT_TY; ! plural-name: text 143: return 55; ! scroll-parsable: scroll-parsable 144: return 50; ! first-material: material 145: return 50; ! second-material: material 146: return NUMBER_TY; ! victories: number 147: return NUMBER_TY; ! streak: number 148: return NUMBER_TY; ! best-streak: number 149: return 57; ! achievement: achievement 150: return 57; ! held achievement: achievement 151: return NUMBER_TY; ! held difficulty: number } return UNKNOWN_TY; ]; Array TableOfTables --> TheEmptyTable T0_final_question_options T1_locale_priorities T2_sample_options T3_menu_commands T4_shallow_menu_status T5_deep_menu_status T6_sample_hints T8_ordinary_status T9_delayed_actions T10_ai_target_options T11_ai_action_options T12_ai_weapon_options T13_suitable_rooms T14_monster_rooms T15_suitable_monsters T16_materials T17_scroll_effects T18_magic_scrolls T19_tome_possibilities T20_fancy_status T21_victories T22_kerkerkruip_help T23_new_player_help T24_advanced_help T25_achievements T26_held_achievements T27_achievement_menu 0 0; [ NAP_0; if ((action ==##Examine) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Inv)) rtrue; if ((action ==##Smell)) rtrue; if ((action ==##Smell) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Look)) rtrue; if ((action ==##LookUnder) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Listen)) rtrue; if ((action ==##Listen) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Think)) rtrue; rfalse; ]; [ NAP_1; if ((action ==##Take)) rtrue; if ((action ==##Remove) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Drop)) rtrue; if ((action ==##PutOn) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Insert) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Eat)) rtrue; if ((action ==##Search)) rtrue; if ((action ==##Consult) && ((noun ofclass K2_thing))) rtrue; if ((action ==##SwitchOn)) rtrue; if ((action ==##SwitchOff)) rtrue; if ((action ==##Open)) rtrue; if ((action ==##Close)) rtrue; if ((action ==##Wear)) rtrue; if ((action ==##Disrobe)) rtrue; if ((action ==##Give) && ((noun ofclass K2_thing))) rtrue; if ((action ==##ThrowAt) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Kiss)) rtrue; if ((action ==##Touch)) rtrue; if ((action ==##Pull)) rtrue; if ((action ==##Push)) rtrue; if ((action ==##Turn)) rtrue; if ((action ==##PushDir) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Squeeze)) rtrue; if ((action ==##Burn)) rtrue; if ((action ==##Taste)) rtrue; if ((action ==##Cut)) rtrue; if ((action ==##Tie) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Drink)) rtrue; if ((action ==##Swing)) rtrue; if ((action ==##Rub)) rtrue; if ((action ==##A87_readying)) rtrue; if ((action ==##A99_throwing)) rtrue; if ((action ==##A100_applying_it_to) && ((noun ofclass K2_thing))) rtrue; if ((action ==##A101_spraying)) rtrue; if ((action ==##A103_snorting)) rtrue; if ((action ==##A107_stunning)) rtrue; rfalse; ]; [ NAP_2; if ((action ==##Lock) && ((noun ofclass K2_thing))) rtrue; if ((action ==##Unlock) && ((noun ofclass K2_thing))) rtrue; rfalse; ]; Array ActionData table ##Inv $$00000000 OBJECT_TY OBJECT_TY 0 20000 ##Take $$00001001 OBJECT_TY OBJECT_TY 0 20001 ##Remove $$00011011 OBJECT_TY OBJECT_TY 0 20002 ##Drop $$00001001 OBJECT_TY OBJECT_TY 0 20003 ##PutOn $$00011011 OBJECT_TY OBJECT_TY 0 20004 ##Insert $$00011011 OBJECT_TY OBJECT_TY 0 20005 ##Eat $$01001001 OBJECT_TY OBJECT_TY 0 20006 ##Go $$00001000 OBJECT_TY OBJECT_TY ANSTVC_7 20007 ##Enter $$00001001 OBJECT_TY OBJECT_TY 0 20008 ##Exit $$00000000 OBJECT_TY OBJECT_TY ANSTVC_9 20009 ##GetOff $$00001001 OBJECT_TY OBJECT_TY 0 20010 ##Look $$00000000 OBJECT_TY OBJECT_TY ANSTVC_11 20011 ##Examine $$00001100 OBJECT_TY OBJECT_TY ANSTVC_12 20012 ##LookUnder $$00001100 OBJECT_TY OBJECT_TY 0 20013 ##Search $$00001101 OBJECT_TY OBJECT_TY 0 20014 ##Consult $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20015 ##Lock $$10011011 OBJECT_TY OBJECT_TY 0 20016 ##Unlock $$10011011 OBJECT_TY OBJECT_TY 0 20017 ##SwitchOn $$00001001 OBJECT_TY OBJECT_TY 0 20018 ##SwitchOff $$00001001 OBJECT_TY OBJECT_TY 0 20019 ##Open $$00001001 OBJECT_TY OBJECT_TY 0 20020 ##Close $$00001001 OBJECT_TY OBJECT_TY 0 20021 ##Wear $$01001001 OBJECT_TY OBJECT_TY 0 20022 ##Disrobe $$01001001 OBJECT_TY OBJECT_TY 0 20023 ##Give $$01011011 OBJECT_TY OBJECT_TY 0 20024 ##Show $$01011001 OBJECT_TY OBJECT_TY 0 20025 ##WakeOther $$00001001 OBJECT_TY OBJECT_TY 0 20026 ##ThrowAt $$01011001 OBJECT_TY OBJECT_TY 0 20027 ##Attack $$00001001 OBJECT_TY OBJECT_TY 0 20028 ##Kiss $$00001001 OBJECT_TY OBJECT_TY 0 20029 ##Answer $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20030 ##Tell $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20031 ##Ask $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20032 ##AskFor $$00011011 OBJECT_TY OBJECT_TY 0 20033 ##Wait $$00000000 OBJECT_TY OBJECT_TY 0 20034 ##Touch $$00001001 OBJECT_TY OBJECT_TY 0 20035 ##Wave $$00001001 OBJECT_TY OBJECT_TY 0 20036 ##Pull $$00001001 OBJECT_TY OBJECT_TY 0 20037 ##Push $$00001001 OBJECT_TY OBJECT_TY 0 20038 ##Turn $$00001001 OBJECT_TY OBJECT_TY 0 20039 ##PushDir $$00011001 OBJECT_TY OBJECT_TY 0 20040 ##Squeeze $$00001001 OBJECT_TY OBJECT_TY 0 20041 ##Yes $$00000000 OBJECT_TY OBJECT_TY 0 20042 ##No $$00000000 OBJECT_TY OBJECT_TY 0 20043 ##Burn $$00001001 OBJECT_TY OBJECT_TY 0 20044 ##Wake $$00000000 OBJECT_TY OBJECT_TY 0 20045 ##Think $$00000000 OBJECT_TY OBJECT_TY 0 20046 ##Smell $$00001001 OBJECT_TY OBJECT_TY 0 20047 ##Listen $$00001001 OBJECT_TY OBJECT_TY 0 20048 ##Taste $$00001001 OBJECT_TY OBJECT_TY 0 20049 ##Cut $$00001001 OBJECT_TY OBJECT_TY 0 20050 ##Jump $$00000000 OBJECT_TY OBJECT_TY 0 20051 ##Tie $$00011011 OBJECT_TY OBJECT_TY 0 20052 ##Drink $$00001001 OBJECT_TY OBJECT_TY 0 20053 ##Sorry $$00000000 OBJECT_TY OBJECT_TY 0 20054 ##Strong $$00000000 OBJECT_TY OBJECT_TY 0 20055 ##Mild $$00000000 OBJECT_TY OBJECT_TY 0 20056 ##Swing $$00001001 OBJECT_TY OBJECT_TY 0 20057 ##Rub $$00001001 OBJECT_TY OBJECT_TY 0 20058 ##SetTo $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20059 ##WaveHands $$00000000 OBJECT_TY OBJECT_TY 0 20060 ##Buy $$00001001 OBJECT_TY OBJECT_TY 0 20061 ##Sing $$00000000 OBJECT_TY OBJECT_TY 0 20062 ##Climb $$00001001 OBJECT_TY OBJECT_TY 0 20063 ##Sleep $$00000000 OBJECT_TY OBJECT_TY 0 20064 ##Quit $$00100000 OBJECT_TY OBJECT_TY 0 20065 ##Save $$00100000 OBJECT_TY OBJECT_TY 0 20066 ##Restore $$00100000 OBJECT_TY OBJECT_TY 0 20067 ##Restart $$00100000 OBJECT_TY OBJECT_TY 0 20068 ##Verify $$00100000 OBJECT_TY OBJECT_TY 0 20069 ##ScriptOn $$00100000 OBJECT_TY OBJECT_TY 0 20070 ##ScriptOff $$00100000 OBJECT_TY OBJECT_TY 0 20071 ##Version $$00100000 OBJECT_TY OBJECT_TY 0 20072 ##Score $$00100000 OBJECT_TY OBJECT_TY 0 20073 ##LMode3 $$00100000 OBJECT_TY OBJECT_TY 0 20074 ##LMode2 $$00100000 OBJECT_TY OBJECT_TY 0 20075 ##LMode1 $$00100000 OBJECT_TY OBJECT_TY 0 20076 ##NotifyOn $$00100000 OBJECT_TY OBJECT_TY 0 20077 ##NotifyOff $$00100000 OBJECT_TY OBJECT_TY 0 20078 ##Pronouns $$00100000 OBJECT_TY OBJECT_TY 0 20079 ##A80_requesting_epistemic_sta $$00101000 OBJECT_TY OBJECT_TY 0 20080 ##A81_switching_weightings_on $$00100000 OBJECT_TY OBJECT_TY 0 20081 ##A82_switching_weightings_off $$00100000 OBJECT_TY OBJECT_TY 0 20082 ##A83_checking_the_numbers_boo $$00100000 OBJECT_TY OBJECT_TY 0 20083 ##A84_switching_the_numbers_of $$00100000 OBJECT_TY OBJECT_TY 0 20084 ##A85_switching_the_numbers_on $$00100000 OBJECT_TY OBJECT_TY 0 20085 ##A86_hitting $$00001000 OBJECT_TY OBJECT_TY 0 20086 ##A87_readying $$00001000 OBJECT_TY OBJECT_TY 0 20087 ##A88_concentrating $$00000000 OBJECT_TY OBJECT_TY 0 20088 ##A89_parrying $$00000000 OBJECT_TY OBJECT_TY 0 20089 ##A90_dodging $$00000000 OBJECT_TY OBJECT_TY 0 20090 ##A91_digging $$00001000 OBJECT_TY OBJECT_TY 0 20091 ##A92_collapsing $$00001000 OBJECT_TY OBJECT_TY 0 20092 ##A93_healing $$00000000 OBJECT_TY OBJECT_TY 0 20093 ##A94_teleporting $$00000000 OBJECT_TY OBJECT_TY 0 20094 ##A95_disintegrating $$00000000 OBJECT_TY OBJECT_TY 0 20095 ##A96_turning_bat $$00000000 OBJECT_TY OBJECT_TY 0 20096 ##A97_turning_vampire $$00000000 OBJECT_TY OBJECT_TY 0 20097 ##A98_inhaling $$01001001 OBJECT_TY OBJECT_TY 0 20098 ##A99_throwing $$01001001 OBJECT_TY OBJECT_TY 0 20099 ##A100_applying_it_to $$01011011 OBJECT_TY OBJECT_TY 0 20100 ##A101_spraying $$01001001 OBJECT_TY OBJECT_TY 0 20101 ##A102_reading $$01001001 OBJECT_TY OBJECT_TY 0 20102 ##A103_snorting $$01001001 OBJECT_TY OBJECT_TY 0 20103 ##A104_piercing $$00001000 OBJECT_TY OBJECT_TY 0 20104 ##A105_armadillo_eating $$00000000 OBJECT_TY OBJECT_TY 0 20105 ##A106_scaling $$00001000 NUMBER_TY OBJECT_TY 0 20106 ##A107_stunning $$00001001 OBJECT_TY OBJECT_TY 0 20107 ##A108_golem_disarming $$00001001 OBJECT_TY OBJECT_TY 0 20108 ##A109_lashing $$00000000 OBJECT_TY OBJECT_TY 0 20109 ##A110_reaping $$00001001 OBJECT_TY OBJECT_TY 0 20110 ##A111_mindblasting $$00001001 OBJECT_TY OBJECT_TY 0 20111 ##A112_dominating $$00001001 OBJECT_TY OBJECT_TY 0 20112 ##A113_tentacle_constricting $$00000000 OBJECT_TY OBJECT_TY 0 20113 ##A114_tentacle_shaking $$00000000 OBJECT_TY OBJECT_TY 0 20114 ##A115_confusing $$00000000 OBJECT_TY OBJECT_TY 0 20115 ##A116_bodmall_fogging $$00000000 OBJECT_TY OBJECT_TY 0 20116 ##A117_bodmall_transmuting $$00000000 OBJECT_TY OBJECT_TY 0 20117 ##A118_bodmall_barkskinning $$00000000 OBJECT_TY OBJECT_TY 0 20118 ##A119_bodmall_summoning $$00000000 OBJECT_TY OBJECT_TY 0 20119 ##A120_summoning_thorns $$00000000 OBJECT_TY OBJECT_TY 0 20120 ##A121_unghouling $$00000000 OBJECT_TY OBJECT_TY 0 20121 ##A122_aswang_shifting $$00000000 OBJECT_TY OBJECT_TY 0 20122 ##A123_aswang_hexing $$00000000 OBJECT_TY OBJECT_TY 0 20123 ##A124_aswang_fleeing $$00000000 OBJECT_TY OBJECT_TY 0 20124 ##A125_pulsating $$00000000 OBJECT_TY OBJECT_TY 0 20125 ##A126_imping $$00000000 OBJECT_TY OBJECT_TY 0 20126 ##A127_imp_grabbing $$00000000 OBJECT_TY OBJECT_TY 0 20127 ##A128_retreating $$00000000 OBJECT_TY OBJECT_TY 0 20128 ##A129_going_to $$00001000 OBJECT_TY OBJECT_TY 0 20129 ##A130_shorter_going_to $$00000000 OBJECT_TY OBJECT_TY 0 20130 ##A131_asking_status $$00100000 OBJECT_TY OBJECT_TY 0 20131 ##A132_remembering $$00100000 OBJECT_TY OBJECT_TY 0 20132 ##A133_sensing $$00000000 OBJECT_TY OBJECT_TY 0 20133 ##A134_trophylisting $$00100000 OBJECT_TY OBJECT_TY 0 20134 ##A135_showing_commands $$00100000 OBJECT_TY OBJECT_TY 0 20135 ##A136_praying $$00000000 OBJECT_TY OBJECT_TY 0 20136 ##A137_direction_jumping $$00001000 OBJECT_TY OBJECT_TY 0 20137 ##A138_equipping $$00001001 OBJECT_TY OBJECT_TY 0 20138 ##A139_talking_to $$00001001 OBJECT_TY OBJECT_TY 0 20139 ##A140_plunking $$00001001 OBJECT_TY OBJECT_TY 0 20140 ##A141_plonking $$00000000 OBJECT_TY OBJECT_TY 0 20141 ##A142_ramboing $$00000000 OBJECT_TY OBJECT_TY 0 20142 ##A143_meatboying $$00000000 OBJECT_TY OBJECT_TY 0 20143 ##A144_reducing $$00001001 OBJECT_TY OBJECT_TY 0 20144 ##A145_testreadying $$00000000 OBJECT_TY OBJECT_TY 0 20145 ##A146_asking_for_help $$00100000 OBJECT_TY OBJECT_TY 0 20146 ##A147_achievemenuing $$00100000 OBJECT_TY OBJECT_TY 0 20147 ; Constant AD_RECORDS = 148; [ ANSTVC_7 pos state; if (state == 1) { MStack-->pos = X125; pos++; MStack-->pos = nothing; pos++; MStack-->pos = nothing; pos++; MStack-->pos = nothing; pos++; MStack-->pos = nothing; pos++; } else { pos++; pos++; pos++; pos++; pos++; } return 5; ]; [ ANSTVC_9 pos state; if (state == 1) { MStack-->pos = nothing; pos++; } else { pos++; } return 1; ]; [ ANSTVC_11 pos state; if (state == 1) { MStack-->pos = ##Wait; pos++; MStack-->pos = false; pos++; MStack-->pos = 0; pos++; MStack-->pos = nothing; pos++; } else { pos++; pos++; pos++; pos++; } return 4; ]; [ ANSTVC_12 pos state; if (state == 1) { MStack-->pos = false; pos++; } else { pos++; } return 1; ]; [ DB_Action_Details act n s for_say; switch (act) { ##Inv: print "taking inventory"; ##Take: print "taking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Remove: print "removing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "from"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Drop: print "dropping"; if (for_say ~= 2) { print " "; DA_Name(n); } ##PutOn: print "putting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "on"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Insert: print "inserting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "into"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Eat: print "eating"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Go: print "going"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Enter: print "entering"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Exit: print "exiting"; ##GetOff: print "getting off"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Look: print "looking"; ##Examine: print "examining"; if (for_say ~= 2) { print " "; DA_Name(n); } ##LookUnder: print "looking under"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Search: print "searching"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Consult: print "consulting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "about"; if (for_say ~= 2) { print " "; DA_Topic(parsed_number); } ##Lock: print "locking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "with"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Unlock: print "unlocking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "with"; if (for_say ~= 2) { print " "; DA_Name(s); } ##SwitchOn: print "switching on"; if (for_say ~= 2) { print " "; DA_Name(n); } ##SwitchOff: print "switching off"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Open: print "opening"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Close: print "closing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Wear: print "wearing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Disrobe: print "taking off"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Give: print "giving"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Show: print "showing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##WakeOther: print "waking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##ThrowAt: print "throwing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "at"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Attack: print "attacking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Kiss: print "kissing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Answer: print "answering"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "that"; if (for_say ~= 2) { print " "; DA_Topic(parsed_number); } ##Tell: print "telling"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "about"; if (for_say ~= 2) { print " "; DA_Topic(parsed_number); } ##Ask: print "asking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "about"; if (for_say ~= 2) { print " "; DA_Topic(parsed_number); } ##AskFor: print "asking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "for"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Wait: print "waiting"; ##Touch: print "touching"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Wave: print "waving"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Pull: print "pulling"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Push: print "pushing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Turn: print "turning"; if (for_say ~= 2) { print " "; DA_Name(n); } ##PushDir: print "pushing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Squeeze: print "squeezing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Yes: print "saying yes"; ##No: print "saying no"; ##Burn: print "burning"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Wake: print "waking up"; ##Think: print "thinking"; ##Smell: print "smelling"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Listen: print "listening to"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Taste: print "tasting"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Cut: print "cutting"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Jump: print "jumping"; ##Tie: print "tying"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Drink: print "drinking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Sorry: print "saying sorry"; ##Strong: print "swearing obscenely"; ##Mild: print "swearing mildly"; ##Swing: print "swinging"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Rub: print "rubbing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##SetTo: print "setting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Topic(parsed_number); } ##WaveHands: print "waving hands"; ##Buy: print "buying"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Sing: print "singing"; ##Climb: print "climbing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Sleep: print "sleeping"; ##Quit: print "quitting the game"; ##Save: print "saving the game"; ##Restore: print "restoring the game"; ##Restart: print "restarting the game"; ##Verify: print "verifying the story file"; ##ScriptOn: print "switching the story transcript on"; ##ScriptOff: print "switching the story transcript off"; ##Version: print "requesting the story file version"; ##Score: print "requesting the score"; ##LMode3: print "preferring abbreviated room descriptions"; ##LMode2: print "preferring unabbreviated room descriptions"; ##LMode1: print "preferring sometimes abbreviated room descriptions"; ##NotifyOn: print "switching score notification on"; ##NotifyOff: print "switching score notification off"; ##Pronouns: print "requesting the pronoun meanings"; ##A80_requesting_epistemic_sta: print "requesting epistemic status of"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A81_switching_weightings_on: print "switching weightings on"; ##A82_switching_weightings_off: print "switching weightings off"; ##A83_checking_the_numbers_boo: print "checking the numbers boolean"; ##A84_switching_the_numbers_of: print "switching the numbers off"; ##A85_switching_the_numbers_on: print "switching the numbers on"; ##A86_hitting: print "hitting"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A87_readying: print "readying"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A88_concentrating: print "concentrating"; ##A89_parrying: print "parrying"; ##A90_dodging: print "dodging"; ##A91_digging: print "digging"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A92_collapsing: print "collapsing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A93_healing: print "healing"; ##A94_teleporting: print "teleporting"; ##A95_disintegrating: print "disintegrating"; ##A96_turning_bat: print "turning bat"; ##A97_turning_vampire: print "turning vampire"; ##A98_inhaling: print "inhaling"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A99_throwing: print "throwing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A100_applying_it_to: print "applying"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##A101_spraying: print "spraying"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A102_reading: print "reading"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A103_snorting: print "snorting"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A104_piercing: print "piercing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A105_armadillo_eating: print "armadillo-eating"; ##A106_scaling: print "scaling"; if (for_say ~= 2) { print " "; DA_Number(parsed_number); } ##A107_stunning: print "stunning"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A108_golem_disarming: print "golem-disarming"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A109_lashing: print "lashing"; ##A110_reaping: print "reaping"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A111_mindblasting: print "mindblasting"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A112_dominating: print "dominating"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A113_tentacle_constricting: print "tentacle-constricting"; ##A114_tentacle_shaking: print "tentacle-shaking"; ##A115_confusing: print "confusing"; ##A116_bodmall_fogging: print "bodmall-fogging"; ##A117_bodmall_transmuting: print "bodmall-transmuting"; ##A118_bodmall_barkskinning: print "bodmall-barkskinning"; ##A119_bodmall_summoning: print "bodmall-summoning"; ##A120_summoning_thorns: print "summoning thorns"; ##A121_unghouling: print "unghouling"; ##A122_aswang_shifting: print "aswang-shifting"; ##A123_aswang_hexing: print "aswang-hexing"; ##A124_aswang_fleeing: print "aswang-fleeing"; ##A125_pulsating: print "pulsating"; ##A126_imping: print "imping"; ##A127_imp_grabbing: print "imp-grabbing"; ##A128_retreating: print "retreating"; ##A129_going_to: print "going to"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A130_shorter_going_to: print "shorter going to"; ##A131_asking_status: print "asking status"; ##A132_remembering: print "remembering"; ##A133_sensing: print "sensing"; ##A134_trophylisting: print "trophylisting"; ##A135_showing_commands: print "showing commands"; ##A136_praying: print "praying"; ##A137_direction_jumping: print "direction-jumping"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A138_equipping: print "equipping"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A139_talking_to: print "talking to"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A140_plunking: print "plunking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A141_plonking: print "plonking"; ##A142_ramboing: print "ramboing"; ##A143_meatboying: print "meatboying"; ##A144_reducing: print "reducing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A145_testreadying: print "testreadying"; ##A146_asking_for_help: print "asking for help"; ##A147_achievemenuing: print "achievemenuing"; } ]; Array ActionCoding --> ##Inv ##Take ##Remove ##Drop ##PutOn ##Insert ##Eat ##Go ##Enter ##Exit ##GetOff ##Look ##Examine ##LookUnder ##Search ##Consult ##Lock ##Unlock ##SwitchOn ##SwitchOff ##Open ##Close ##Wear ##Disrobe ##Give ##Show ##WakeOther ##ThrowAt ##Attack ##Kiss ##Answer ##Tell ##Ask ##AskFor ##Wait ##Touch ##Wave ##Pull ##Push ##Turn ##PushDir ##Squeeze ##Yes ##No ##Burn ##Wake ##Think ##Smell ##Listen ##Taste ##Cut ##Jump ##Tie ##Drink ##Sorry ##Strong ##Mild ##Swing ##Rub ##SetTo ##WaveHands ##Buy ##Sing ##Climb ##Sleep ##Quit ##Save ##Restore ##Restart ##Verify ##ScriptOn ##ScriptOff ##Version ##Score ##LMode3 ##LMode2 ##LMode1 ##NotifyOn ##NotifyOff ##Pronouns ##A80_requesting_epistemic_sta ##A81_switching_weightings_on ##A82_switching_weightings_off ##A83_checking_the_numbers_boo ##A84_switching_the_numbers_of ##A85_switching_the_numbers_on ##A86_hitting ##A87_readying ##A88_concentrating ##A89_parrying ##A90_dodging ##A91_digging ##A92_collapsing ##A93_healing ##A94_teleporting ##A95_disintegrating ##A96_turning_bat ##A97_turning_vampire ##A98_inhaling ##A99_throwing ##A100_applying_it_to ##A101_spraying ##A102_reading ##A103_snorting ##A104_piercing ##A105_armadillo_eating ##A106_scaling ##A107_stunning ##A108_golem_disarming ##A109_lashing ##A110_reaping ##A111_mindblasting ##A112_dominating ##A113_tentacle_constricting ##A114_tentacle_shaking ##A115_confusing ##A116_bodmall_fogging ##A117_bodmall_transmuting ##A118_bodmall_barkskinning ##A119_bodmall_summoning ##A120_summoning_thorns ##A121_unghouling ##A122_aswang_shifting ##A123_aswang_hexing ##A124_aswang_fleeing ##A125_pulsating ##A126_imping ##A127_imp_grabbing ##A128_retreating ##A129_going_to ##A130_shorter_going_to ##A131_asking_status ##A132_remembering ##A133_sensing ##A134_trophylisting ##A135_showing_commands ##A136_praying ##A137_direction_jumping ##A138_equipping ##A139_talking_to ##A140_plunking ##A141_plonking ##A142_ramboing ##A143_meatboying ##A144_reducing ##A145_testreadying ##A146_asking_for_help ##A147_achievemenuing; Array ActionHappened --> 0 0 0 0 0 0 0 0 0 0; [ InvSub; return GenericVerbSub(125,126,127); ]; [ TakeSub; return GenericVerbSub(128,129,130); ]; [ RemoveSub; return GenericVerbSub(131,132,133); ]; [ DropSub; return GenericVerbSub(134,135,136); ]; [ PutOnSub; return GenericVerbSub(137,138,139); ]; [ InsertSub; return GenericVerbSub(140,141,142); ]; [ EatSub; return GenericVerbSub(143,144,145); ]; [ GoSub; return GenericVerbSub(146,147,148); ]; [ EnterSub; return GenericVerbSub(149,150,151); ]; [ ExitSub; return GenericVerbSub(152,153,154); ]; [ GetOffSub; return GenericVerbSub(155,156,157); ]; [ LookSub; return GenericVerbSub(158,159,160); ]; [ ExamineSub; return GenericVerbSub(161,162,163); ]; [ LookUnderSub; return GenericVerbSub(164,165,166); ]; [ SearchSub; return GenericVerbSub(167,168,169); ]; [ ConsultSub; return GenericVerbSub(170,171,172); ]; [ LockSub; return GenericVerbSub(173,174,175); ]; [ UnlockSub; return GenericVerbSub(176,177,178); ]; [ SwitchOnSub; return GenericVerbSub(179,180,181); ]; [ SwitchOffSub; return GenericVerbSub(182,183,184); ]; [ OpenSub; return GenericVerbSub(185,186,187); ]; [ CloseSub; return GenericVerbSub(188,189,190); ]; [ WearSub; return GenericVerbSub(191,192,193); ]; [ DisrobeSub; return GenericVerbSub(194,195,196); ]; [ GiveSub; return GenericVerbSub(197,198,199); ]; [ ShowSub; return GenericVerbSub(200,201,202); ]; [ WakeOtherSub; return GenericVerbSub(203,204,205); ]; [ ThrowAtSub; return GenericVerbSub(206,207,208); ]; [ AttackSub; return GenericVerbSub(209,210,211); ]; [ KissSub; return GenericVerbSub(212,213,214); ]; [ AnswerSub; return GenericVerbSub(215,216,217); ]; [ TellSub; return GenericVerbSub(218,219,220); ]; [ AskSub; return GenericVerbSub(221,222,223); ]; [ AskForSub; return GenericVerbSub(224,225,226); ]; [ WaitSub; return GenericVerbSub(227,228,229); ]; [ TouchSub; return GenericVerbSub(230,231,232); ]; [ WaveSub; return GenericVerbSub(233,234,235); ]; [ PullSub; return GenericVerbSub(236,237,238); ]; [ PushSub; return GenericVerbSub(239,240,241); ]; [ TurnSub; return GenericVerbSub(242,243,244); ]; [ PushDirSub; return GenericVerbSub(245,246,247); ]; [ SqueezeSub; return GenericVerbSub(248,249,250); ]; [ YesSub; return GenericVerbSub(251,252,253); ]; [ NoSub; return GenericVerbSub(254,255,256); ]; [ BurnSub; return GenericVerbSub(257,258,259); ]; [ WakeSub; return GenericVerbSub(260,261,262); ]; [ ThinkSub; return GenericVerbSub(263,264,265); ]; [ SmellSub; return GenericVerbSub(266,267,268); ]; [ ListenSub; return GenericVerbSub(269,270,271); ]; [ TasteSub; return GenericVerbSub(272,273,274); ]; [ CutSub; return GenericVerbSub(275,276,277); ]; [ JumpSub; return GenericVerbSub(278,279,280); ]; [ TieSub; return GenericVerbSub(281,282,283); ]; [ DrinkSub; return GenericVerbSub(284,285,286); ]; [ SorrySub; return GenericVerbSub(287,288,289); ]; [ StrongSub; return GenericVerbSub(290,291,292); ]; [ MildSub; return GenericVerbSub(293,294,295); ]; [ SwingSub; return GenericVerbSub(296,297,298); ]; [ RubSub; return GenericVerbSub(299,300,301); ]; [ SetToSub; return GenericVerbSub(302,303,304); ]; [ WaveHandsSub; return GenericVerbSub(305,306,307); ]; [ BuySub; return GenericVerbSub(308,309,310); ]; [ SingSub; return GenericVerbSub(311,312,313); ]; [ ClimbSub; return GenericVerbSub(314,315,316); ]; [ SleepSub; return GenericVerbSub(317,318,319); ]; [ QuitSub; return GenericVerbSub(320,321,322); ]; [ SaveSub; return GenericVerbSub(323,324,325); ]; [ RestoreSub; return GenericVerbSub(326,327,328); ]; [ RestartSub; return GenericVerbSub(329,330,331); ]; [ VerifySub; return GenericVerbSub(332,333,334); ]; [ ScriptOnSub; return GenericVerbSub(335,336,337); ]; [ ScriptOffSub; return GenericVerbSub(338,339,340); ]; [ VersionSub; return GenericVerbSub(341,342,343); ]; [ ScoreSub; return GenericVerbSub(344,345,346); ]; [ LMode3Sub; return GenericVerbSub(347,348,349); ]; [ LMode2Sub; return GenericVerbSub(350,351,352); ]; [ LMode1Sub; return GenericVerbSub(353,354,355); ]; [ NotifyOnSub; return GenericVerbSub(356,357,358); ]; [ NotifyOffSub; return GenericVerbSub(359,360,361); ]; [ PronounsSub; return GenericVerbSub(362,363,364); ]; [ A80_requesting_epistemic_staSub; return GenericVerbSub(368,369,370); ]; [ A81_switching_weightings_onSub; return GenericVerbSub(414,415,416); ]; [ A82_switching_weightings_offSub; return GenericVerbSub(417,418,419); ]; [ A83_checking_the_numbers_booSub; return GenericVerbSub(422,423,424); ]; [ A84_switching_the_numbers_ofSub; return GenericVerbSub(425,426,427); ]; [ A85_switching_the_numbers_onSub; return GenericVerbSub(428,429,430); ]; [ A86_hittingSub; return GenericVerbSub(432,433,434); ]; [ A87_readyingSub; return GenericVerbSub(440,441,442); ]; [ A88_concentratingSub; return GenericVerbSub(443,444,445); ]; [ A89_parryingSub; return GenericVerbSub(447,448,449); ]; [ A90_dodgingSub; return GenericVerbSub(450,451,452); ]; [ A91_diggingSub; return GenericVerbSub(479,480,481); ]; [ A92_collapsingSub; return GenericVerbSub(482,483,484); ]; [ A93_healingSub; return GenericVerbSub(490,491,492); ]; [ A94_teleportingSub; return GenericVerbSub(493,494,495); ]; [ A95_disintegratingSub; return GenericVerbSub(498,499,500); ]; [ A96_turning_batSub; return GenericVerbSub(510,511,512); ]; [ A97_turning_vampireSub; return GenericVerbSub(513,514,515); ]; [ A98_inhalingSub; return GenericVerbSub(519,520,521); ]; [ A99_throwingSub; return GenericVerbSub(522,523,524); ]; [ A100_applying_it_toSub; return GenericVerbSub(525,526,527); ]; [ A101_sprayingSub; return GenericVerbSub(528,529,530); ]; [ A102_readingSub; return GenericVerbSub(531,532,533); ]; [ A103_snortingSub; return GenericVerbSub(535,536,537); ]; [ A104_piercingSub; return GenericVerbSub(539,540,541); ]; [ A105_armadillo_eatingSub; return GenericVerbSub(542,543,544); ]; [ A106_scalingSub; return GenericVerbSub(545,546,547); ]; [ A107_stunningSub; return GenericVerbSub(548,549,550); ]; [ A108_golem_disarmingSub; return GenericVerbSub(551,552,553); ]; [ A109_lashingSub; return GenericVerbSub(554,555,556); ]; [ A110_reapingSub; return GenericVerbSub(557,558,559); ]; [ A111_mindblastingSub; return GenericVerbSub(560,561,562); ]; [ A112_dominatingSub; return GenericVerbSub(563,564,565); ]; [ A113_tentacle_constrictingSub; return GenericVerbSub(566,567,568); ]; [ A114_tentacle_shakingSub; return GenericVerbSub(569,570,571); ]; [ A115_confusingSub; return GenericVerbSub(572,573,574); ]; [ A116_bodmall_foggingSub; return GenericVerbSub(575,576,577); ]; [ A117_bodmall_transmutingSub; return GenericVerbSub(578,579,580); ]; [ A118_bodmall_barkskinningSub; return GenericVerbSub(581,582,583); ]; [ A119_bodmall_summoningSub; return GenericVerbSub(584,585,586); ]; [ A120_summoning_thornsSub; return GenericVerbSub(587,588,589); ]; [ A121_unghoulingSub; return GenericVerbSub(590,591,592); ]; [ A122_aswang_shiftingSub; return GenericVerbSub(593,594,595); ]; [ A123_aswang_hexingSub; return GenericVerbSub(596,597,598); ]; [ A124_aswang_fleeingSub; return GenericVerbSub(599,600,601); ]; [ A125_pulsatingSub; return GenericVerbSub(602,603,604); ]; [ A126_impingSub; return GenericVerbSub(605,606,607); ]; [ A127_imp_grabbingSub; return GenericVerbSub(608,609,610); ]; [ A128_retreatingSub; return GenericVerbSub(611,612,613); ]; [ A129_going_toSub; return GenericVerbSub(614,615,616); ]; [ A130_shorter_going_toSub; return GenericVerbSub(617,618,619); ]; [ A131_asking_statusSub; return GenericVerbSub(620,621,622); ]; [ A132_rememberingSub; return GenericVerbSub(625,626,627); ]; [ A133_sensingSub; return GenericVerbSub(628,629,630); ]; [ A134_trophylistingSub; return GenericVerbSub(631,632,633); ]; [ A135_showing_commandsSub; return GenericVerbSub(634,635,636); ]; [ A136_prayingSub; return GenericVerbSub(637,638,639); ]; [ A137_direction_jumpingSub; return GenericVerbSub(640,641,642); ]; [ A138_equippingSub; return GenericVerbSub(643,644,645); ]; [ A139_talking_toSub; return GenericVerbSub(646,647,648); ]; [ A140_plunkingSub; return GenericVerbSub(649,650,651); ]; [ A141_plonkingSub; return GenericVerbSub(652,653,654); ]; [ A142_ramboingSub; return GenericVerbSub(655,656,657); ]; [ A143_meatboyingSub; return GenericVerbSub(658,659,660); ]; [ A144_reducingSub; return GenericVerbSub(661,662,663); ]; [ A145_testreadyingSub; return GenericVerbSub(664,665,666); ]; [ A146_asking_for_helpSub; return GenericVerbSub(668,669,670); ]; [ A147_achievemenuingSub; return GenericVerbSub(671,672,673); ]; [ MistakeActionSub; switch(understand_as_mistake_number) { 417: ParserError(text_routine_90); 418: ParserError(text_routine_91); 515: ParserError(text_routine_92); default: "I didn't understand that sentence."; } say__p = 1; ]; ! Definitions of rule phrases ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Startup (B1_startup) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11: INITIALISE_MEMORY_R ! === which is equally specific with === ! Rule 2/11: VIRTUAL_MACHINE_STARTUP_R ! === which is equally specific with === ! Rule 3/11: SEED_RANDOM_NUMBER_GENERATOR_R ! === which is equally specific with === ! Rule 4/11: UPDATE_CHRONOLOGICAL_RECORDS_R ! === which is equally specific with === ! Rule 5/11: POSITION_PLAYER_IN_MODEL_R ! === which is equally specific with === ! Rule 6/11 ! This is the start in the correct scenes rule: ! --- now the mid-placed rules --- ! Rule 7/11 ! This is the when play begins stage rule: ! === which is equally specific with === ! Rule 8/11 ! This is the fix baseline scoring rule: ! === which is equally specific with === ! Rule 9/11 ! This is the display banner rule: ! === which is equally specific with === ! Rule 10/11 ! This is the initial room description rule: ! --- now the last-placed rules --- ! Rule 11/11 ! Last startup rule ( this is the looking at the beginning of the game is not acting fast rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! This is the start in the correct scenes rule: [ R_8 ; ! phrase 1 ! [1: consider the scene changing rules] ProcessRulebook(4); rfalse; ]; ! No specific request ! From the Standard Rules ! This is the when play begins stage rule: [ R_9 ; ! phrase 1 ! [1: follow the when play begins rulebook] FollowRulebook(5); rfalse; ]; ! No specific request ! From the Standard Rules ! This is the fix baseline scoring rule: [ R_10 ; ! phrase 1 ! [1: now the last notified score is the score] last_score = score; rfalse; ]; ! No specific request ! From the Standard Rules ! This is the display banner rule: [ R_11 ; ! phrase 1 ! [1: say ~[banner text]~] say__p=1;ParaContent(); Banner(); .L_Say0; .L_SayX0; rfalse; ]; ! No specific request ! From the Standard Rules ! This is the initial room description rule: [ R_12 ; ! phrase 1 ! [1: try looking] TryAction(0, player, ##Look, 0, 0);; rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Last startup rule ( this is the looking at the beginning of the game is not acting fast rule ): [ R_858 ; ! phrase 1 ! [1: now the take no time boolean is false] (Global_Vars-->34) = 0; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Turn sequence (B2_turn_sequence) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/10 ! This is the abide by the combat round rules rule: ! === which is equally specific with === ! Rule 2/10 ! A first turn sequence rule: ! === which is equally specific with === ! Rule 3/10 ! A first turn sequence rule ( this is the every turn stage rule ): ! --- now the mid-placed rules --- ! Rule 4/10: TIMED_EVENTS_R ! === which is equally specific with === ! Rule 5/10: ADVANCE_TIME_R ! <<< I - Number of aspects constrained <<< ! Rule 6/10 ! A turn sequence rule when the combat status is combat ( this is the inactive players don't increment the turn count rule ): ! >>> I - Number of aspects constrained >>> ! Rule 7/10: UPDATE_CHRONOLOGICAL_RECORDS_R ! --- now the last-placed rules --- ! Rule 8/10 ! A last turn sequence rule: ! === which is equally specific with === ! Rule 9/10: ADJUST_LIGHT_R ! === which is equally specific with === ! Rule 10/10: NOTE_OBJECT_ACQUISITIONS_R ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! This is the abide by the combat round rules rule: [ R_837 ; ! phrase 1 ! [1: abide by the combat round rules] if (ProcessRulebook(407)) rtrue; rfalse; ]; ! No specific request ! From the Standard Rules ! A first turn sequence rule: [ R_14 ; ! phrase 1 ! [1: consider the scene changing rules] ProcessRulebook(4); rfalse; ]; ! No specific request ! From the Standard Rules ! A first turn sequence rule ( this is the every turn stage rule ): [ R_13 ; ! phrase 1 ! [1: follow the every turn rules] FollowRulebook(9); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A turn sequence rule when the combat status is combat ( this is the inactive players don't increment the turn count rule ): [ R_838 ; if (((((((Global_Vars-->29) == I100_combat)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_838, 838); ! phrase 1 ! [1: if the player did something is true begin] if (((((Global_Vars-->32) && true) == (1 && true)))) { ! phrase 2 ! [2: now the player did something is false] (Global_Vars-->32) = 0; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: decrement the turn count] turns = turns - 1; ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_838, 838, true); rfalse; ]; ! No specific request ! From the Standard Rules ! A last turn sequence rule: [ R_15 ; ! phrase 1 ! [1: consider the scene changing rules] ProcessRulebook(4); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Shutdown (B3_shutdown) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! This is the when play ends stage rule: ! --- now the last-placed rules --- ! Rule 2/4: RESURRECT_PLAYER_IF_ASKED_R ! === which is equally specific with === ! Rule 3/4 ! This is the print player's obituary rule: ! === which is equally specific with === ! Rule 4/4: ASK_FINAL_QUESTION_R ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! This is the when play ends stage rule: [ R_17 ; ! phrase 1 ! [1: follow the when play ends rulebook] FollowRulebook(6); rfalse; ]; ! No specific request ! From the Standard Rules ! This is the print player's obituary rule: [ R_18 ; ! phrase 1 ! [1: carry out the printing the player's obituary activity] CarryOutActivity(V27_printing_the_player_s_ob); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: When play begins (B5_when_play_begins) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/45 ! First when play begins: ! === which is equally specific with === ! Rule 2/45 ! The first when play begins rule ( this is the title screen rule ): ! === which is equally specific with === ! Rule 3/45 ! First when play begins ( this is the Reaper carries a random scythe rule ): ! === which is equally specific with === ! Rule 4/45 ! First when play begins ( this is the set plural names for scrolls rule ): ! --- now the mid-placed rules --- ! Rule 5/45 ! When play begins when roguelike mode is true ( this is the restore when play begins rule ): ! >>> I - Number of aspects constrained >>> ! Rule 6/45 ! When play begins ( this is the change the yourself text rule ): ! === which is equally specific with === ! Rule 7/45 ! When play begins ( this is the set permanent health to initial health rule ): ! === which is equally specific with === ! Rule 8/45 ! When play begins ( this is the ready weapons for everyone rule ): ! === which is equally specific with === ! Rule 9/45 ! When play begins ( this is the set undead and horror factions rule ): ! === which is equally specific with === ! Rule 10/45 ! When play begins ( this is the set original material rule ): ! === which is equally specific with === ! Rule 11/45 ! When play begins ( this is the set incorruptibility based on material rule ): ! === which is equally specific with === ! Rule 12/45 ! When play begins ( this is the set tome of transmutation rule ): ! === which is equally specific with === ! Rule 13/45 ! When play begins ( this is the set scroll analyser count rule ): ! === which is equally specific with === ! Rule 14/45 ! When play begins: ! === which is equally specific with === ! Rule 15/45 ! When play begins: ! === which is equally specific with === ! Rule 16/45 ! When play begins: ! === which is equally specific with === ! Rule 17/45 ! When play begins: ! === which is equally specific with === ! Rule 18/45 ! When play begins: ! === which is equally specific with === ! Rule 19/45 ! When play begins: ! === which is equally specific with === ! Rule 20/45 ! When play begins: ! === which is equally specific with === ! Rule 21/45 ! When play begins: ! === which is equally specific with === ! Rule 22/45 ! When play begins: ! === which is equally specific with === ! Rule 23/45 ! When play begins: ! === which is equally specific with === ! Rule 24/45 ! When play begins: ! === which is equally specific with === ! Rule 25/45 ! When play begins: ! === which is equally specific with === ! Rule 26/45 ! When play begins: ! === which is equally specific with === ! Rule 27/45 ! When play begins: ! === which is equally specific with === ! Rule 28/45 ! When play begins: ! === which is equally specific with === ! Rule 29/45 ! When play begins: ! === which is equally specific with === ! Rule 30/45 ! When play begins: ! === which is equally specific with === ! Rule 31/45 ! When play begins: ! === which is equally specific with === ! Rule 32/45 ! When play begins: ! === which is equally specific with === ! Rule 33/45 ! When play begins: ! === which is equally specific with === ! Rule 34/45 ! When play begins: ! === which is equally specific with === ! Rule 35/45 ! When play begins: ! === which is equally specific with === ! Rule 36/45 ! When play begins: ! === which is equally specific with === ! Rule 37/45 ! When play begins: ! === which is equally specific with === ! Rule 38/45 ! When play begins: ! === which is equally specific with === ! Rule 39/45 ! When play begins: ! === which is equally specific with === ! Rule 40/45 ! When play begins: ! === which is equally specific with === ! Rule 41/45 ! When play begins: ! === which is equally specific with === ! Rule 42/45 ! When play begins: ! === which is equally specific with === ! Rule 43/45 ! When play begins: ! --- now the last-placed rules --- ! Rule 44/45 ! Last when play begins ( this is the introduction rule ): ! === which is equally specific with === ! Rule 45/45 ! Last when play begins: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! First when play begins: [ R_2134 ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: if file of victories exists begin] if (( (FileIO_Exists(I525_file_of_victories, false)) )) { ! phrase 2 ! [2: read file of victories into table of victories] FileIO_GetTable(I525_file_of_victories, T21_victories); ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: choose row 1 in the table of victories] ct_0 = T21_victories; ct_1 = 1; ! phrase 5 ! [5: now number-of-victories is the victories entry] (Global_Vars-->128) = TableLookUpEntry(ct_0,146,ct_1); ! phrase 6 ! [6: now winning-streak is the streak entry] (Global_Vars-->129) = TableLookUpEntry(ct_0,147,ct_1); ! phrase 7 ! [7: now best-winning-streak is the best-streak entry] (Global_Vars-->130) = TableLookUpEntry(ct_0,148,ct_1); ! phrase 8 ! [8: now difficulty is winning-streak + 1] (Global_Vars-->131) = ((Global_Vars-->129)+1) ; ! phrase 9 ! [9: if number-of-victories is 0 begin] if ((((Global_Vars-->128) == 0))) { ! phrase 10 ! [10: decrease difficulty by 1] (Global_Vars-->131) = (Global_Vars-->131) - 1; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: set up initial scores for the player] (PHR_2140_r3 ()); ! phrase 13 ! [13: apply the difficulty] (PHR_2138_r4 ()); ! phrase 14 ! [14: if file of achievements exists begin] if (( (FileIO_Exists(I527_file_of_achievements, false)) )) { ! phrase 15 ! [15: read file of achievements into table of held achievements] FileIO_GetTable(I527_file_of_achievements, T26_held_achievements); ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: update the achievements] (PHR_2159_r5 ()); ! phrase 18 ! [18: write out the file of victories without reset] (PHR_2136_r6 ()); rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! The first when play begins rule ( this is the title screen rule ): [ R_2152 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: while 1 is 1 begin] while (((1 == 1))) { ! phrase 2 ! [2: clear the screen] VM_ClearScreen(0); ! phrase 3 ! [3: redraw status line] DrawStatusLine(); ! phrase 4 ! [4: say paragraph break] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say1; .L_SayX1; ! phrase 5 ! [5: if glulx graphics is supported begin] if (( ( glk_gestalt(gestalt_Graphics, 0) ) )) { ! phrase 6 ! [6: display figure opening figure] DisplayFigure(ResourceIDsOfFigures-->I526_figure_opening_figure, 0); ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: say ~[bold type]Kerkerkruip[roman type] -- by Victor Gijsbers~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_266; .L_Say2; .L_SayX2; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: say paragraph break] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say3; .L_SayX3; ! phrase 11 ! [11: say fixed letter spacing] say__p=1;ParaContent(); font off; .L_Say4; .L_SayX4; ! phrase 12 ! [12: say ~ SCORES:[line break]~] say__p=1;ParaContent(); print (PrintText) SC_267; ParaContent(); new_line; .L_Say5; .L_SayX5; ! phrase 13 ! [13: say ~ Your total victories : [unless number-of-victories is greater than 9] [end if][unless number-of-victories is greater than 99] [end if] [number-of-victories][line break]~] say__p=1;ParaContent(); print (PrintText) SC_268; if (((((Global_Vars-->128) > 9)))) jump L_Say6; ParaContent(); print (PrintText) SC_209; .L_Say6; .L_SayX6; if (((((Global_Vars-->128) > 99)))) jump L_Say7; ParaContent(); print (PrintText) SC_209; .L_Say7; .L_SayX7; ParaContent(); print (PrintText) SC_269; ParaContent(); print (say__n=(Global_Vars-->128)); ParaContent(); new_line; .L_Say8; .L_SayX8; ! phrase 14 ! [14: say ~ Your current winning streak : [unless winning-streak is greater than 9] [end if][unless winning-streak is greater than 99] [end if] [winning-streak][line break]~] say__p=1;ParaContent(); print (PrintText) SC_270; if (((((Global_Vars-->129) > 9)))) jump L_Say9; ParaContent(); print (PrintText) SC_209; .L_Say9; .L_SayX9; if (((((Global_Vars-->129) > 99)))) jump L_Say10; ParaContent(); print (PrintText) SC_209; .L_Say10; .L_SayX10; ParaContent(); print (PrintText) SC_209; ParaContent(); print (say__n=(Global_Vars-->129)); ParaContent(); new_line; .L_Say11; .L_SayX11; ! phrase 15 ! [15: say ~ Your best winning streak : [unless best-winning-streak is greater than 9] [end if][unless best-winning-streak is greater than 99] [end if] [best-winning-streak][paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_271; if (((((Global_Vars-->130) > 9)))) jump L_Say12; ParaContent(); print (PrintText) SC_209; .L_Say12; .L_SayX12; if (((((Global_Vars-->130) > 99)))) jump L_Say13; ParaContent(); print (PrintText) SC_209; .L_Say13; .L_SayX13; ParaContent(); print (PrintText) SC_272; ParaContent(); print (say__n=(Global_Vars-->130)); ParaContent(); DivideParagraphPoint(); new_line; .L_Say14; .L_SayX14; ! phrase 16 ! [16: say ~ Current difficulty : [difficulty level difficulty] (level [difficulty])~] say__p=1;ParaContent(); print (PrintText) SC_273; ParaContent(); (PHR_2153_r7 ((Global_Vars-->131)));ParaContent(); print (PrintText) SC_274; ParaContent(); print (say__n=(Global_Vars-->131)); ParaContent(); print (PrintText) SC_275; .L_Say15; .L_SayX15; ! phrase 17 ! [17: say line break] say__p=1;ParaContent(); new_line; .L_Say16; .L_SayX16; ! phrase 18 ! [18: say paragraph break] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say17; .L_SayX17; ! phrase 19 ! [19: say ~ OPTIONS:[line break]~] say__p=1;ParaContent(); print (PrintText) SC_276; ParaContent(); new_line; .L_Say18; .L_SayX18; ! phrase 20 ! [20: say ~ [if the file of save data exists]Continue the game[otherwise]Start a new game [end if] : (SPACE)[line break]~] say__p=1;ParaContent(); print (PrintText) SC_272; if (~~((( (FileIO_Exists(I89_file_of_save_data, false)) )))) jump L_Say19; ParaContent(); print (PrintText) SC_277; jump L_SayX19; .L_Say19; ParaContent(); print (PrintText) SC_278; .L_Say20; .L_SayX19; ParaContent(); print (PrintText) SC_279; ParaContent(); new_line; .L_Say21; .L_SayX20; ! phrase 21 ! [21: if the file of save data exists begin] if (( (FileIO_Exists(I89_file_of_save_data, false)) )) { ! phrase 22 ! [22: say ~ Start a new game : S[line break]~] say__p=1;ParaContent(); print (PrintText) SC_280; ParaContent(); new_line; .L_Say22; .L_SayX21; ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: if difficulty is 0 begin] if ((((Global_Vars-->131) == 0))) { ! phrase 25 ! [25: say ~ Skip to Normal difficulty : N[line break]~] say__p=1;ParaContent(); print (PrintText) SC_281; ParaContent(); new_line; .L_Say23; .L_SayX22; ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: say ~ Display help menu : M[line break]~] say__p=1;ParaContent(); print (PrintText) SC_282; ParaContent(); new_line; .L_Say24; .L_SayX23; ! phrase 28 ! [28: say ~ Quit : Q[line break]~] say__p=1;ParaContent(); print (PrintText) SC_283; ParaContent(); new_line; .L_Say25; .L_SayX24; ! phrase 29 ! [29: say variable letter spacing] say__p=1;ParaContent(); font on; .L_Say26; .L_SayX25; ! phrase 30 ! [30: let redraw be 0] t_0 = 0; ! phrase 31 ! [31: while redraw is 0 begin] while (((t_0 == 0))) { ! phrase 32 ! [32: let k be the chosen letter] t_1 = GetKey() ; ! phrase 33 ! [33: if k is 32 or k is -6 begin] if ((((t_1 == 32))) || (((t_1 == -6)))) { ! phrase 34 ! [34: clear the screen] VM_ClearScreen(0); ! phrase 35 ! [35: make no decision] rfalse; ! phrase 36 ! [36: otherwise if k is 115 or k is 83] } else if ((((t_1 == 115))) || (((t_1 == 83)))) { ! phrase 37 ! [37: delete file of save data] FileIO_DeleteSavedGame(I89_file_of_save_data); ! phrase 38 ! [38: clear the screen] VM_ClearScreen(0); ! phrase 39 ! [39: make no decision] rfalse; ! phrase 40 ! [40: otherwise if ( k is 110 or k is 78 ) and difficulty is 0] } else if (((((t_1 == 110))) || (((t_1 == 78)))) && ((((Global_Vars-->131) == 0)))) { ! phrase 41 ! [41: now number-of-victories is 1] (Global_Vars-->128) = 1; ! phrase 42 ! [42: now difficulty is 1] (Global_Vars-->131) = 1; ! phrase 43 ! [43: write out the file of victories without reset] (PHR_2136_r6 ()); ! phrase 44 ! [44: set up initial scores for the player] (PHR_2140_r3 ()); ! phrase 45 ! [45: apply the difficulty] (PHR_2138_r4 ()); ! phrase 46 ! [46: delete file of save data] FileIO_DeleteSavedGame(I89_file_of_save_data); ! phrase 47 ! [47: clear the screen] VM_ClearScreen(0); ! phrase 48 ! [48: make no decision] rfalse; ! phrase 49 ! [49: otherwise if k is 113 or k is 81] } else if ((((t_1 == 113))) || (((t_1 == 81)))) { ! phrase 50 ! [50: stop game abruptly] quit; ! phrase 51 ! [51: otherwise if k is 109 or k is 77] } else if ((((t_1 == 109))) || (((t_1 == 77)))) { ! phrase 52 ! [52: now the current menu is table of kerkerkruip help] (Global_Vars-->12) = T22_kerkerkruip_help; ! phrase 53 ! [53: carry out the displaying activity] CarryOutActivity(V32_displaying); ! phrase 54 ! [54: now redraw is 1] t_0 = 1; ! phrase 55 ! [55: end if] } ! phrase 56 ! [56: end while] } ! phrase 57 ! [57: end while] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! First when play begins ( this is the Reaper carries a random scythe rule ): [ R_1816 t_0 ! Local variable e.g. 'm' = number ; ! phrase 1 ! [1: let m be a random number between 1 and 3] t_0 = R_DecimalNumber(1, 3) ; ! phrase 2 ! [2: if m is 1 begin] if (((t_0 == 1))) { ! phrase 3 ! [3: move the scythe of flaming to the reaper] MoveObject(I459_scythe_of_flaming, I457_reaper, 0, false); ! phrase 4 ! [4: now the scythe of flaming is readied] (Adj_103_t2_v9(I459_scythe_of_flaming)); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if m is 2 begin] if (((t_0 == 2))) { ! phrase 7 ! [7: move the scythe of slaying to the reaper] MoveObject(I460_scythe_of_slaying, I457_reaper, 0, false); ! phrase 8 ! [8: now the scythe of slaying is readied] (Adj_103_t2_v9(I460_scythe_of_slaying)); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: if m is 3 begin] if (((t_0 == 3))) { ! phrase 11 ! [11: move the scythe of oxidation to the reaper] MoveObject(I461_scythe_of_oxidation, I457_reaper, 0, false); ! phrase 12 ! [12: now the scythe of oxidation is readied] (Adj_103_t2_v9(I461_scythe_of_oxidation)); ! phrase 13 ! [13: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! First when play begins ( this is the set plural names for scrolls rule ): [ R_1385 t_0 ! Local variable e.g. '?-1,-1?' = scroll t_1 ! Local variable e.g. '?-1,-1?' = scroll ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat with item running through scrolls begin] for (t_0=Prop_0(0), t_1=Prop_0(t_0): t_0: t_0=t_1, t_1=Prop_0(t_1)) { ! phrase 2 ! [2: choose a row with scroll of item in table of magic scrolls] ct_0 = T18_magic_scrolls; ct_1 = TableRowCorr(ct_0, 139, t_0); ! phrase 3 ! [3: now printed plural name of item is plural-name entry] WriteGProperty(9, t_0,plural,TableLookUpEntry(ct_0,142,ct_1)); ! phrase 4 ! [4: now item is improper-named] (Adj_51_t2_v9(t_0)); ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! When play begins when roguelike mode is true ( this is the restore when play begins rule ): [ R_817 ; if ((((((((Global_Vars-->23) && true) == (1 && true))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_817, 817); ! phrase 1 ! [1: if the file of save data exists begin] if (( (FileIO_Exists(I89_file_of_save_data, false)) )) { ! phrase 2 ! [2: read file of save data into memory] FileIO_LoadSavedGame(I89_file_of_save_data); ! phrase 3 ! [3: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_817, 817, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! When play begins ( this is the change the yourself text rule ): [ R_826 ; ! phrase 1 ! [1: now the yourself text is ~you~] YOURSELF__TX = SC_284; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! When play begins ( this is the set permanent health to initial health rule ): [ R_957 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with the patient running through people begin] for (t_0=Prop_1(0), t_1=Prop_1(t_0): t_0: t_0=t_1, t_1=Prop_1(t_1)) { ! phrase 2 ! [2: now the permanent health of the patient is the health of the patient] WriteGProperty(9, t_0,p17_permanent_health,GProperty(9, t_0,p14_health)); ! phrase 3 ! [3: end repeat] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! When play begins ( this is the ready weapons for everyone rule ): [ R_967 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: repeat with x running through all alive persons begin] for (t_0=Prop_2(0), t_1=Prop_2(t_0): t_0: t_0=t_1, t_1=Prop_2(t_1)) { ! phrase 2 ! [2: if x encloses no readied weapon begin] if ((Prop_3(,t_0))) { ! phrase 3 ! [3: if x carries at least one weapon begin] if ((Prop_4(,t_0))) { ! phrase 4 ! [4: let item be a random weapon carried by x] t_2 = (Prop_5(,t_0)) ; ! phrase 5 ! [5: now item is readied] (Adj_103_t2_v9(t_2)); ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: let item be a random natural weapon part of x] t_2 = (Prop_6(,t_0)) ; ! phrase 8 ! [8: now item is readied] (Adj_103_t2_v9(t_2)); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! When play begins ( this is the set undead and horror factions rule ): [ R_1194 t_0 ! Local variable e.g. '?-1,-1?' = faction t_1 ! Local variable e.g. '?-1,-1?' = faction ; ! phrase 1 ! [1: repeat with x running through factions begin] for (t_0=1: t_0<=7: t_0++)if (((true))) { ! phrase 2 ! [2: now horrific hates x] (Relation_NowVtoV(I159_horrific,Rel_Record_67,t_0,false)); ! phrase 3 ! [3: now x hates horrific] (Relation_NowVtoV(t_0,Rel_Record_67,I159_horrific,false)); ! phrase 4 ! [4: unless x is undead begin] if (~~(((t_0 == I158_undead)))) { ! phrase 5 ! [5: now undead hates x] (Relation_NowVtoV(I158_undead,Rel_Record_67,t_0,false)); ! phrase 6 ! [6: now x hates undead] (Relation_NowVtoV(t_0,Rel_Record_67,I158_undead,false)); ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: unless x is demonic or x is hostile begin] if (~~((((t_0 == I160_demonic))) || (((t_0 == I93_hostile))))) { ! phrase 9 ! [9: now demonic hates x] (Relation_NowVtoV(I160_demonic,Rel_Record_67,t_0,false)); ! phrase 10 ! [10: now x hates demonic] (Relation_NowVtoV(t_0,Rel_Record_67,I160_demonic,false)); ! phrase 11 ! [11: end unless] } ! phrase 12 ! [12: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! When play begins ( this is the set original material rule ): [ R_1198 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through things begin] for (t_0=Prop_7(0), t_1=Prop_7(t_0): t_0: t_0=t_1, t_1=Prop_7(t_1)) { ! phrase 2 ! [2: now the original material of item is the material of item] WriteGProperty(9, t_0,p49_original_material,GProperty(9, t_0,p180_material)); ! phrase 3 ! [3: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! When play begins ( this is the set incorruptibility based on material rule ): [ R_1199 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through things begin] for (t_0=Prop_8(0), t_1=Prop_8(t_0): t_0: t_0=t_1, t_1=Prop_8(t_1)) { ! phrase 2 ! [2: if the material of item is adamant or the material of item is radiance begin] if ((((GProperty(9, t_0,p180_material) == I177_adamant))) || (((GProperty(9, t_0,p180_material) == I176_radiance)))) { ! phrase 3 ! [3: now item is incorruptible] (Adj_255_t2_v9(t_0)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! When play begins ( this is the set tome of transmutation rule ): [ R_1526 t_0 ! Local variable e.g. 'n' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let n be a random number between 1 and 10] t_0 = R_DecimalNumber(1, 10) ; ! phrase 2 ! [2: choose row n in table of tome possibilities] ct_0 = T19_tome_possibilities; ct_1 = t_0; ! phrase 3 ! [3: now first-trans-material is the first-material entry] (Global_Vars-->94) = TableLookUpEntry(ct_0,144,ct_1); ! phrase 4 ! [4: now second-trans-material is the second-material entry] (Global_Vars-->95) = TableLookUpEntry(ct_0,145,ct_1); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! When play begins ( this is the set scroll analyser count rule ): [ R_1633 ; ! phrase 1 ! [1: now scroll analyser count is 1] (Global_Vars-->112) = 1; ! phrase 2 ! [2: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 3 ! [3: increase scroll analyser count by 1] (Global_Vars-->112) = (Global_Vars-->112) + 1; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 6 ! [6: increase scroll analyser count by 1] (Global_Vars-->112) = (Global_Vars-->112) + 1; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if a random chance of 1 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 1) )) { ! phrase 9 ! [9: increase scroll analyser count by 1] (Global_Vars-->112) = (Global_Vars-->112) + 1; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if a random chance of 1 in 4 succeeds begin] if (( (GenerateRandomNumber(1, 4) <= 1) )) { ! phrase 12 ! [12: increase scroll analyser count by 1] (Global_Vars-->112) = (Global_Vars-->112) + 1; ! phrase 13 ! [13: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! When play begins: [ R_1074 ; ! phrase 1 ! [1: create the dungeon] (PHR_1075_r8 ()); ! phrase 2 ! [2: consider the further generation rules] ProcessRulebook(455); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! When play begins: [ R_1225 ; ! phrase 1 ! [1: follow the internal heat rule] FollowRulebook(R_1226); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! When play begins: [ R_1594 ; ! phrase 1 ! [1: now maximum prayers to sul is a random number between 1 and 3] (Global_Vars-->106) = R_DecimalNumber(1, 3) ; rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1683 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the swarm of daggers] t_0 = (Prop_9()) ; ! phrase 2 ! [2: now damage die of x is 4] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,4); ! phrase 3 ! [3: now dodgability of x is 3] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,3); ! phrase 4 ! [4: now passive parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,0); ! phrase 5 ! [5: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 6 ! [6: now the printed name of x is ~sharp points~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_285); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1701 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the blood ape] t_0 = (Prop_10()) ; ! phrase 2 ! [2: now damage die of x is 6] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,6); ! phrase 3 ! [3: now dodgability of x is 1] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,1); ! phrase 4 ! [4: now passive parry max of x is 3] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,3); ! phrase 5 ! [5: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 6 ! [6: now printed name of x is ~ape's [size of blood ape] fists~] WriteGProperty(OBJECT_TY, t_0,short_name,text_routine_93); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1719 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the ravenous armadillo] t_0 = (Prop_11()) ; ! phrase 2 ! [2: now damage die of x is 4] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,4); ! phrase 3 ! [3: now dodgability of x is 3] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,3); ! phrase 4 ! [4: now passive parry max of x is 1] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,1); ! phrase 5 ! [5: now active parry max of x is 3] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,3); ! phrase 6 ! [6: now the printed name of x is ~bony tail club~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_286); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1773 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the chain golem] t_0 = (Prop_12()) ; ! phrase 2 ! [2: now damage die of x is 2] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,2); ! phrase 3 ! [3: now dodgability of x is 2] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,2); ! phrase 4 ! [4: now passive parry max of x is 2] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,2); ! phrase 5 ! [5: now active parry max of x is 3] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,3); ! phrase 6 ! [6: now the printed name of x is ~lashing chains~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_287); ! phrase 7 ! [7: now x is ranged] (Adj_177_t2_v9(t_0)); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1794 ; ! phrase 1 ! [1: if difficulty is 0 begin] if ((((Global_Vars-->131) == 0))) { ! phrase 2 ! [2: decrease melee of the jumping bomb by 1] WriteGProperty(9, I454_jumping_bomb,p18_melee,GProperty(9, I454_jumping_bomb,p18_melee) - 1); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1795 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the jumping bomb] t_0 = (Prop_13()) ; ! phrase 2 ! [2: now dodgability of x is 3] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,3); ! phrase 3 ! [3: now passive parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,0); ! phrase 4 ! [4: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 5 ! [5: now printed name of x is ~bomb's detonating surface~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_288); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1813 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the reaper] t_0 = (Prop_14()) ; ! phrase 2 ! [2: now printed name of x is ~Reaper's knuckles~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_289); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1818 ; ! phrase 1 ! [1: if difficulty is 0 begin] if ((((Global_Vars-->131) == 0))) { ! phrase 2 ! [2: now follower percentile chance of the reaper is 0] WriteGProperty(9, I457_reaper,p48_follower_percentile_chan,0); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1837 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the mindslug] t_0 = (Prop_15()) ; ! phrase 2 ! [2: now dodgability of x is 3] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,3); ! phrase 3 ! [3: now passive parry max of x is 2] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,2); ! phrase 4 ! [4: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 5 ! [5: now printed name of x is ~slug's crushing body~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_290); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1838 ; ! phrase 1 ! [1: now enslaved hates friendly] (Relation_NowVtoV(I465_enslaved,Rel_Record_67,I91_friendly,false)); ! phrase 2 ! [2: now friendly hates enslaved] (Relation_NowVtoV(I91_friendly,Rel_Record_67,I465_enslaved,false)); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1848 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of fafhrd] t_0 = (Prop_16()) ; ! phrase 2 ! [2: now printed name of x is ~Fafhrd's fists~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_291); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1849 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of mouser] t_0 = (Prop_17()) ; ! phrase 2 ! [2: now printed name of x is ~Mouser's fists~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_292); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1850 ; ! phrase 1 ! [1: if mindslug is not off-stage begin] if (((~~(((~~Adj_9_t1_v9(I463_mindslug))))))) { ! phrase 2 ! [2: move fafhrd to the location of mindslug] MoveObject(I466_fafhrd, LocationOf(I463_mindslug) , 0, false); ! phrase 3 ! [3: move mouser to the location of mindslug] MoveObject(I469_mouser, LocationOf(I463_mindslug) , 0, false); ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1889 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of giant] t_0 = (Prop_18()) ; ! phrase 2 ! [2: now printed name of x is ~tentacle~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_293); ! phrase 3 ! [3: now the damage die of x is 0] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,0); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1927 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of healer of aite] t_0 = (Prop_19()) ; ! phrase 2 ! [2: now printed name of x is ~healer's fists~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_294); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1932 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of tormentor of aite] t_0 = (Prop_20()) ; ! phrase 2 ! [2: now printed name of x is ~tormentor's fists~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_295); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1937 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of defender of aite] t_0 = (Prop_21()) ; ! phrase 2 ! [2: now printed name of x is ~defender's fists~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_296); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1950 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of bodmall] t_0 = (Prop_22()) ; ! phrase 2 ! [2: now x is ranged] (Adj_177_t2_v9(t_0)); ! phrase 3 ! [3: now x is not armour-stoppable] (Adj_179_t3_v9(t_0)); ! phrase 4 ! [4: now damage die of x is 10] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,10); ! phrase 5 ! [5: now the passive parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,0); ! phrase 6 ! [6: now the active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 7 ! [7: now the dodgability of x is 3] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,3); ! phrase 8 ! [8: now printed name of x is ~lightning bolt~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_297); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1979 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of malygris] t_0 = (Prop_23()) ; ! phrase 2 ! [2: now printed name of x is ~Malygris's innate magical powers~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_298); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1986 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the demonic assassin] t_0 = (Prop_24()) ; ! phrase 2 ! [2: now the printed name of x is ~claws~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_299); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_1991 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the nameless horror] t_0 = (Prop_25()) ; ! phrase 2 ! [2: now damage die of x is 50] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,50); ! phrase 3 ! [3: now dodgability of x is 2] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,2); ! phrase 4 ! [4: now passive parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,0); ! phrase 5 ! [5: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 6 ! [6: now printed name of x is ~countless teeth and claws~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_300); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_2003 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the rotting corpse] t_0 = (Prop_26()) ; ! phrase 2 ! [2: now damage die of x is 7] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,7); ! phrase 3 ! [3: now dodgability of x is 3] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,3); ! phrase 4 ! [4: now passive parry max of x is 3] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,3); ! phrase 5 ! [5: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 6 ! [6: now the printed name of x is ~rotting appendages~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_301); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_2020 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the aswang] t_0 = (Prop_27()) ; ! phrase 2 ! [2: now damage die of x is 6] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,6); ! phrase 3 ! [3: now dodgability of x is 2] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,2); ! phrase 4 ! [4: now passive parry max of x is 2] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,2); ! phrase 5 ! [5: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 6 ! [6: now the printed name of x is ~[if as-shape of aswang is as-witch]razor-sharp fingernails[otherwise if as-shape of aswang is as-bird]beak[otherwise]teeth[end if]~] WriteGProperty(OBJECT_TY, t_0,short_name,text_routine_94); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_2047 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the smoke demon] t_0 = (Prop_28()) ; ! phrase 2 ! [2: now damage die of x is 5] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,5); ! phrase 3 ! [3: now dodgability of x is 2] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,2); ! phrase 4 ! [4: now passive parry max of x is 2] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,2); ! phrase 5 ! [5: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 6 ! [6: now the printed name of x is ~tendrils~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_302); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! When play begins: [ R_2059 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of the imp] t_0 = (Prop_29()) ; ! phrase 2 ! [2: now damage die of x is 3] WriteGProperty(OBJECT_TY, t_0,p20_damage_die,3); ! phrase 3 ! [3: now dodgability of x is 2] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,2); ! phrase 4 ! [4: now passive parry max of x is 2] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,2); ! phrase 5 ! [5: now active parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p24_active_parry_max,0); ! phrase 6 ! [6: now the printed name of x is ~claws~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_299); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! When play begins: [ R_2115 t_0 ! Local variable e.g. 'X' = object ; ! phrase 1 ! [1: let x be a random natural weapon part of yourself] t_0 = (Prop_30()) ; ! phrase 2 ! [2: now printed name of x is ~your fists~] WriteGProperty(OBJECT_TY, t_0,short_name,SC_303); rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! When play begins: [ R_2151 ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: choose row with a final response rule of immediately restore saved game rule in the table of final question options] ct_0 = T0_final_question_options; ct_1 = TableRowCorr(ct_0, 103, IMMEDIATELY_RESTORE_SAVED_R); ! phrase 2 ! [2: delete the final question wording entry] TableLookUpEntry(ct_0,100,ct_1,4); ! phrase 3 ! [3: choose row with a final response rule of immediately undo rule in the table of final question options] ct_0 = T0_final_question_options; ct_1 = TableRowCorr(ct_0, 103, IMMEDIATELY_UNDO_R); ! phrase 4 ! [4: delete the final question wording entry] TableLookUpEntry(ct_0,100,ct_1,4); rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Last when play begins ( this is the introduction rule ): [ R_2143 ; ! phrase 1 ! [1: say ~[paragraph break]When you claimed that you were tough enough to take on Malygris single-handedly, everyone knew you had been drinking much more than was good for you. And the prince is not one to let an opportunity pass. Before you could so much as protest, his court mage opened a portal and you were shoved through. Predictably, the portal immediately disappeared. You doubt they're going to open it up again -- but at least you can try to make good on your boast and kill Malygris, the Wizard of Kerkerkruip!~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_304; new_line; .L_Say27; .L_SayX26; ! phrase 2 ! [2: now started boolean is true] (Global_Vars-->132) = 1; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Last when play begins: [ R_1320 ; ! phrase 1 ! [1: consider the smoke rules] ProcessRulebook(517); ! phrase 2 ! [2: consider the smoke rules] ProcessRulebook(517); ! phrase 3 ! [3: consider the smoke rules] ProcessRulebook(517); ! phrase 4 ! [4: consider the smoke rules] ProcessRulebook(517); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: When scene begins (B7_when_scene_begins) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! When a scene ( called the event ) begins ( this is the scene description text rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! When a scene ( called the event ) begins ( this is the scene description text rule ): [ R_57 t_0 ! Local variable e.g. 'event' = scene ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (true))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_57, 57); ! phrase 1 ! [1: if the description of the event is not ~~ , say ~[the description of the event][paragraph break]~] if (((~~((GProperty(SCENE_TY, t_0,description) == EMPTY_TEXT_VALUE))))) { say__p=1;ParaContent(); @push self; print (PrintText) GProperty(SCENE_TY, self=t_0,description); @pull self; ParaContent(); DivideParagraphPoint(); new_line; .L_Say28; .L_SayX27; } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_57, 57, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Every turn (B9_every_turn) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/60 ! First every turn rule ( this is the Nomos bonus is false rule ): ! --- now the mid-placed rules --- ! Rule 2/60 ! Every turn when at least one rust-releasing container is not off-stage ( this is the rust the contents of rust-releasing containers rule ): ! >>> II - When/while requirement >>> ! Rule 3/60 ! Every turn when at least one placed room is rust-spored ( this is the spread rust spores rule ): ! === which is equally specific with === ! Rule 4/60 ! Every turn when at least one alive person is hexed ( this is the remove hexes when aswang is dead rule ): ! >>> II - When/while requirement >>> ! Rule 5/60 ! Every turn when the huge forge contains at least one thing ( this is the huge forge rule ): ! === which is equally specific with === ! Rule 6/60 ! Every turn when at least one thing is in the armadillo stomach: ! >>> II - When/while requirement >>> ! Rule 7/60 ! Every turn when the Reaper is in the location and the Reaper is not follower ( this is the Reaper starts following rule ): ! >>> II - When/while requirement >>> ! Rule 8/60 ! Every turn when the player is not in moving through solid rock ( this is the destroy solid rock coordinates rule ): ! === which is equally specific with === ! Rule 9/60 ! Every turn when the adamantine blade is not off-stage ( this is the adamantine blade countdown rule ): ! === which is equally specific with === ! Rule 10/60 ! Every turn when the armadillo is not off-stage ( this is the armadillo eats when the player is not around rule ): ! === which is equally specific with === ! Rule 11/60 ! Every turn when the armadillo is not off-stage ( this is the armadillo moves when the player is not around rule ): ! === which is equally specific with === ! Rule 12/60 ! Every turn when Nameless Horror is not follower ( this is the wake the Nameless Horror rule ): ! === which is equally specific with === ! Rule 13/60 ! Every turn when a rotting limb is enclosed by the location ( this is the rotting limbs decay rule ): ! === which is equally specific with === ! Rule 14/60 ! Every turn when Malygris-summon-countdown is not 0: ! >>> II - When/while requirement >>> ! Rule 15/60 ! Every turn when the player is undead ( this is the undead follow undead rule ): ! === which is equally specific with === ! Rule 16/60 ! Every turn when the player form of the player is vampire bat ( this is the unready readied weapons when bat rule ): ! === which is equally specific with === ! Rule 17/60 ! Every turn when the player is in moving through solid rock ( this is the player dies in solid rock if not ethereal rule ): ! === which is equally specific with === ! Rule 18/60 ! Every turn when the player is the main actor ( this is the decrease player skill bonus timer rule ): ! === which is equally specific with === ! Rule 19/60 ! Every turn when the player wears the cloak of shadows ( this is the blend into shadows rule ): ! === which is equally specific with === ! Rule 20/60 ! Every turn when the main actor is the player ( this is the decrease ape power damage over time rule ): ! === which is equally specific with === ! Rule 21/60 ! Every turn when Nameless Horror is follower ( this is the increase hunger of Nameless Horror rule ): ! === which is equally specific with === ! Rule 22/60 ! Every turn when follower percentile chance of Nameless Horror is greater than 100 ( this is the speed up Nameless Horror rule ): ! === which is equally specific with === ! Rule 23/60 ! Every turn when the imp is on-stage ( this is the imp not absent AI rule ): ! === which is equally specific with === ! Rule 24/60 ! Every turn when acting fast ( this is the set last-seen-location rule ): ! === which is equally specific with === ! Rule 25/60 ! Every turn when the main actor wears the dragon armour: ! === which is equally specific with === ! Rule 26/60 ! Every turn when the main actor is the player: ! === which is equally specific with === ! Rule 27/60 ! Every turn when the main actor is the player: ! === which is equally specific with === ! Rule 28/60 ! Every turn when in phantasmagoria: ! === which is equally specific with === ! Rule 29/60 ! Every turn when the location of the statue of shards is the location of the player: ! >>> I - Number of aspects constrained >>> ! Rule 30/60 ! Every turn ( this is the mark items as seen every turn rule ): ! === which is equally specific with === ! Rule 31/60 ! Every turn ( this is the standard increase or reset the tension rule ): ! === which is equally specific with === ! Rule 32/60 ! Every turn ( this is the remove all killed monsters from play rule ): ! === which is equally specific with === ! Rule 33/60 ! Every turn ( this is the reduce heal cooldown of the main actor rule ): ! === which is equally specific with === ! Rule 34/60 ! Every turn ( this is the spontaneous teleport rule ): ! === which is equally specific with === ! Rule 35/60 ! Every turn ( this is the teleport impossible awareness expires rule ): ! === which is equally specific with === ! Rule 36/60 ! Every turn ( this is the reduce disintegrate cooldown of the main actor rule ): ! === which is equally specific with === ! Rule 37/60 ! Every turn ( this is the have followers follow rule ): ! === which is equally specific with === ! Rule 38/60 ! Every turn ( this is the flaming items burn away rule ): ! === which is equally specific with === ! Rule 39/60 ! Every turn ( this is the heat destroys items rule ): ! === which is equally specific with === ! Rule 40/60 ! Every turn ( this is the rust spores rust iron rule ): ! === which is equally specific with === ! Rule 41/60 ! Every turn ( this is the remove forced action rule ): ! === which is equally specific with === ! Rule 42/60 ! Every turn ( this is the possibly detected rule ): ! === which is equally specific with === ! Rule 43/60 ! Every turn ( this is the reduce smoke timer rule ): ! === which is equally specific with === ! Rule 44/60 ! Every turn ( this is the decrease etherealness rule ): ! === which is equally specific with === ! Rule 45/60 ! Every turn ( this is the decrease the Nomos counter rule ): ! === which is equally specific with === ! Rule 46/60 ! Every turn ( this is the decrease the Nomos wrath counter rule ): ! === which is equally specific with === ! Rule 47/60 ! Every turn ( this is the decrease the Aite counter rule ): ! === which is equally specific with === ! Rule 48/60 ! Every turn ( this is the decrease the Isatzo time-out each turn rule ): ! === which is equally specific with === ! Rule 49/60 ! Every turn ( this is the stun wears off rule ): ! === which is equally specific with === ! Rule 50/60 ! Every turn ( this is the free slaves of the mindslug when it is killed rule ): ! === which is equally specific with === ! Rule 51/60 ! Every turn ( this is the reset grappling after going rule ): ! === which is equally specific with === ! Rule 52/60 ! Every turn ( this is the grant fanatics of power boolean rule ): ! === which is equally specific with === ! Rule 53/60 ! Every turn ( this is the Nameless Horror kills all rule ): ! === which is equally specific with === ! Rule 54/60 ! Every turn ( this is the aswang in bird-shape regenerates rule ): ! === which is equally specific with === ! Rule 55/60 ! Every turn ( this is the smoke demon appears and disappears rule ): ! === which is equally specific with === ! Rule 56/60 ! Every turn ( this is the tweak smoke demon rule ): ! === which is equally specific with === ! Rule 57/60 ! Every turn ( this is the victory rule ): ! === which is equally specific with === ! Rule 58/60 ! Every turn ( this is the player death rule ): ! --- now the last-placed rules --- ! Rule 59/60 ! Last every turn ( this is the internal heat rule ): ! === which is equally specific with === ! Rule 60/60 ! Last every turn ( this is the cooling rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! First every turn rule ( this is the Nomos bonus is false rule ): [ R_1573 ; ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: now nomos bonus is false] (Global_Vars-->103) = 0; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn when at least one rust-releasing container is not off-stage ( this is the rust the contents of rust-releasing containers rule ): [ R_1248 t_0 ! Local variable e.g. '?-1,-1?' = container t_1 ! Local variable e.g. '?-1,-1?' = container t_2 ! Local variable e.g. '?-1,-1?' = thing t_3 ! Local variable e.g. '?-1,-1?' = thing ; if (((((Prop_31()))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1248, 1248); ! phrase 1 ! [1: repeat with item running through rust-releasing not off-stage containers begin] for (t_0=Prop_32(0), t_1=Prop_32(t_0): t_0: t_0=t_1, t_1=Prop_32(t_1)) { ! phrase 2 ! [2: if item contains at least one thing begin] if ((Prop_33(,t_0))) { ! phrase 3 ! [3: repeat with item2 running through things contained by item begin] for (t_2=Prop_34(,t_0,0), t_3=Prop_34(,t_0,t_2): t_2: t_2=t_3, t_3=Prop_34(,t_0,t_3)) { ! phrase 4 ! [4: if item2 can rust begin] if (((PHR_1243_r9 (t_2)))) { ! phrase 5 ! [5: now item2 is rusted] (Adj_205_t2_v9(t_2)); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1248, 1248, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn when at least one placed room is rust-spored ( this is the spread rust spores rule ): [ R_1246 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room ; if (((((Prop_35()))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1246, 1246); ! phrase 1 ! [1: repeat with place running through placed not rust-spored rooms begin] for (t_0=Prop_36(0), t_1=Prop_36(t_0): t_0: t_0=t_1, t_1=Prop_36(t_1)) { ! phrase 2 ! [2: if at least one rust-spored room is adjacent to place begin] if ((Prop_37(,t_0))) { ! phrase 3 ! [3: if a random chance of 1 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 4 ! [4: now place is rust-spored-candidate] (Adj_209_t2_v9(t_0)); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: repeat with place running through rust-spored-candidate rooms begin] for (t_0=Prop_38(0), t_1=Prop_38(t_0): t_0: t_0=t_1, t_1=Prop_38(t_1)) { ! phrase 9 ! [9: now place is rust-spored] (Adj_207_t2_v9(t_0)); ! phrase 10 ! [10: now place is not rust-spored-candidate] (Adj_209_t3_v9(t_0)); ! phrase 11 ! [11: if player is enclosed by place begin] if (((IndirectlyContains(t_0,player)))) { ! phrase 12 ! [12: say ~Clouds of [bold type]rust spores[roman type] drift into the room.~] say__p=1;ParaContent(); print (PrintText) SC_305; ParaContent(); style bold; ParaContent(); print (PrintText) SC_306; ParaContent(); style roman; ParaContent(); print (PrintText) SC_307; new_line; .L_Say29; .L_SayX28; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end repeat] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1246, 1246, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when at least one alive person is hexed ( this is the remove hexes when aswang is dead rule ): [ R_2031 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (((((Prop_39()))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2031, 2031); ! phrase 1 ! [1: if the aswang is dead begin] if ((((~~Adj_33_t1_v9(I513_aswang))))) { ! phrase 2 ! [2: repeat with guy running through alive hexed persons begin] for (t_0=Prop_40(0), t_1=Prop_40(t_0): t_0: t_0=t_1, t_1=Prop_40(t_1)) { ! phrase 3 ! [3: now guy is not hexed] (Adj_278_t3_v9(t_0)); ! phrase 4 ! [4: if guy is player begin] if (((t_0 == player))) { ! phrase 5 ! [5: say ~You are [bold type]no longer hexed[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_309; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say30; .L_SayX29; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2031, 2031, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Every turn when the huge forge contains at least one thing ( this is the huge forge rule ): [ R_1607 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; if (((((Prop_41()))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1607, 1607); ! phrase 1 ! [1: repeat with item running through things enclosed by huge forge begin] for (t_0=Prop_42(0), t_1=Prop_42(t_0): t_0: t_0=t_1, t_1=Prop_42(t_1)) { ! phrase 2 ! [2: now heat strength of item is 9] WriteGProperty(9, t_0,p50_heat_strength,9); ! phrase 3 ! [3: end repeat] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1607, 1607, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when at least one thing is in the armadillo stomach: [ R_1731 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; if (((((Prop_43()))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1731, 1731); ! phrase 1 ! [1: repeat with item running through things in the armadillo stomach begin] for (t_0=Prop_44(0), t_1=Prop_44(t_0): t_0: t_0=t_1, t_1=Prop_44(t_1)) { ! phrase 2 ! [2: corrode item] (PHR_1251_r10 (t_0)); ! phrase 3 ! [3: end repeat] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1731, 1731, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when the Reaper is in the location and the Reaper is not follower ( this is the Reaper starts following rule ): [ R_1817 ; if (((((((real_location == ContainerOf(I457_reaper)))) && (((~~(((Adj_172_t1_v9(I457_reaper))))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1817, 1817); ! phrase 1 ! [1: if the player is not hidden begin] if (((~~(((Adj_221_t1_v9(player))))))) { ! phrase 2 ! [2: say ~'Do not be afraid, for I will end your suffering!' the Reaper exclaims.~] say__p=1;ParaContent(); print (PrintText) SC_311; new_line; .L_Say31; .L_SayX30; ! phrase 3 ! [3: now reaper is follower] (Adj_172_t2_v9(I457_reaper)); ! phrase 4 ! [4: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1817, 1817, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Every turn when the player is not in moving through solid rock ( this is the destroy solid rock coordinates rule ): [ R_1346 ; if ((((((~~((I186_moving_through_solid_ro == ContainerOf(player))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1346, 1346); ! phrase 1 ! [1: now x-coordinate of moving through solid rock is 1000] WriteGProperty(9, I186_moving_through_solid_ro,p28_x_coordinate,1000); ! phrase 2 ! [2: now y-coordinate of moving through solid rock is 1000] WriteGProperty(9, I186_moving_through_solid_ro,p29_y_coordinate,1000); ! phrase 3 ! [3: now z-coordinate of moving through solid rock is 1000] WriteGProperty(9, I186_moving_through_solid_ro,p30_z_coordinate,1000); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1346, 1346, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Every turn when the adamantine blade is not off-stage ( this is the adamantine blade countdown rule ): [ R_1461 ; if ((((((~~(((~~Adj_9_t1_v9(I332_adamantine_blade)))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1461, 1461); ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: now adamantine blade timer is adamantine blade timer minus 1] (Global_Vars-->91) = ((Global_Vars-->91)-1) ; ! phrase 3 ! [3: if the adamantine blade timer is less than 1 begin] if ((((Global_Vars-->91) < 1))) { ! phrase 4 ! [4: if the adamantine blade is enclosed by the player and the adamantine blade is readied begin] if ((((IndirectlyContains(player,I332_adamantine_blade)))) && ((((Adj_103_t1_v9(I332_adamantine_blade)))))) { ! phrase 5 ! [5: say ~The adamantine blade [bold type]vanishes[roman type] as suddenly as it appeared!~] say__p=1;ParaContent(); print (PrintText) SC_312; ParaContent(); style bold; ParaContent(); print (PrintText) SC_313; ParaContent(); style roman; ParaContent(); print (PrintText) SC_314; new_line; .L_Say32; .L_SayX31; ! phrase 6 ! [6: otherwise if the adamantine blade is visible] } else if ((((Adj_3_t1_v9(I332_adamantine_blade))))) { ! phrase 7 ! [7: say ~The adamantine blade suddenly vanishes.~] say__p=1;ParaContent(); print (PrintText) SC_315; new_line; .L_Say33; .L_SayX32; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: remove the adamantine blade from play] RemoveFromPlay(I332_adamantine_blade); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1461, 1461, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when the armadillo is not off-stage ( this is the armadillo eats when the player is not around rule ): [ R_1733 ; if ((((((~~(((~~Adj_9_t1_v9(I442_ravenous_armadillo)))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1733, 1733); ! phrase 1 ! [1: if the location of the player is not the location of the ravenous armadillo begin] if (((~~(( LocationOf(player) == LocationOf(I442_ravenous_armadillo) ))))) { ! phrase 2 ! [2: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 3 ! [3: try the ravenous armadillo armadillo-eating] TryAction(0, I442_ravenous_armadillo, ##A105_armadillo_eating, 0, 0);; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1733, 1733, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when the armadillo is not off-stage ( this is the armadillo moves when the player is not around rule ): [ R_1734 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = object t_2 ! Local variable e.g. '?-1,-1?' = object ; if ((((((~~(((~~Adj_9_t1_v9(I442_ravenous_armadillo)))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1734, 1734); ! phrase 1 ! [1: if the location of the player is not the location of the ravenous armadillo or there is no perceived threat for the ravenous armadillo begin] if ((((~~(( LocationOf(player) == LocationOf(I442_ravenous_armadillo) ))))) || (((PHR_1314_r11 (I442_ravenous_armadillo))))) { ! phrase 2 ! [2: if a random chance of 1 in 20 succeeds begin] if (( (GenerateRandomNumber(1, 20) <= 1) )) { ! phrase 3 ! [3: if at least one room is adjacent to the location of the ravenous armadillo begin] if ((Prop_45(, LocationOf(I442_ravenous_armadillo) ))) { ! phrase 4 ! [4: let place2 be the location of the ravenous armadillo] t_0 = LocationOf(I442_ravenous_armadillo) ; ! phrase 5 ! [5: let place be a random room which is adjacent to place2] t_1 = (Prop_46(,t_0)) ; ! phrase 6 ! [6: let way be the direction from the location of the ravenous armadillo to place] t_2 = (Resolver_0( LocationOf(I442_ravenous_armadillo) ,t_1,"source", 488)); ! phrase 7 ! [7: try the ravenous armadillo going way] TryAction(0, I442_ravenous_armadillo, ##Go, t_2, 0);; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1734, 1734, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when Nameless Horror is not follower ( this is the wake the Nameless Horror rule ): [ R_1992 t_0 ! Local variable e.g. 'way' = object ; if ((((((~~(((Adj_172_t1_v9(I499_nameless_horror)))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1992, 1992); ! phrase 1 ! [1: let the way be the best route from the location of nameless to the location of the player] t_0 = MapRouteTo( LocationOf(I499_nameless_horror) , LocationOf(player) ,0,0) ; ! phrase 2 ! [2: if way is a direction begin] if (((t_0 ofclass K3_direction))) { ! phrase 3 ! [3: say ~An overwhelming scream seems to rip the world apart. An [bold type]evil intelligence has awakened[roman type] so vast as to be beyond comprehension.~] say__p=1;ParaContent(); print (PrintText) SC_316; ParaContent(); style bold; ParaContent(); print (PrintText) SC_317; ParaContent(); style roman; ParaContent(); print (PrintText) SC_318; new_line; .L_Say34; .L_SayX33; ! phrase 4 ! [4: award achievement durin's bane] (PHR_2161_r13 (I542_durin_s_bane)); ! phrase 5 ! [5: wake the nameless horror] (PHR_1993_r14 ()); ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1992, 1992, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when a rotting limb is enclosed by the location ( this is the rotting limbs decay rule ): [ R_2010 t_0 ! Local variable e.g. '?-1,-1?' = rotting limb t_1 ! Local variable e.g. '?-1,-1?' = rotting limb ; if (((((Prop_47()))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2010, 2010); ! phrase 1 ! [1: repeat with item running through rotting limbs enclosed by the location begin] for (t_0=Prop_48(0), t_1=Prop_48(t_0): t_0: t_0=t_1, t_1=Prop_48(t_1)) { ! phrase 2 ! [2: unless item is part of the rotting corpse begin] if (~~(((I501_rotting_corpse == (t_0.component_parent))))) { ! phrase 3 ! [3: if a random chance of 1 in 7 succeeds begin] if (( (GenerateRandomNumber(1, 7) <= 1) )) { ! phrase 4 ! [4: if item is visible begin] if ((((Adj_3_t1_v9(t_0))))) { ! phrase 5 ! [5: say ~[The item] decays completely.~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_319; new_line; .L_Say35; .L_SayX34; ! phrase 6 ! [6: remove item from play] RemoveFromPlay(t_0); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end unless] } ! phrase 10 ! [10: end repeat] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2010, 2010, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when Malygris-summon-countdown is not 0: [ R_1983 ; if ((((((~~(((Global_Vars-->123) == 0)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1983, 1983); ! phrase 1 ! [1: if the location of malygris is the location of the player and the player is not hidden begin] if (((( LocationOf(I493_malygris) == LocationOf(player) ))) && (((~~(((Adj_221_t1_v9(player)))))))) { ! phrase 2 ! [2: unless the player is hidden begin] if (~~((((Adj_221_t1_v9(player)))))) { ! phrase 3 ! [3: say ~Your arrival interrupts [if teleport amount of Malygris is 1]an intricate[otherwise]a hasty[end if] summoning ritual that Malygris was attempting to perform.~] say__p=1;ParaContent(); print (PrintText) SC_320; if (~~((((GProperty(9, I493_malygris,p43_teleport_amount) == 1))))) jump L_Say36; ParaContent(); print (PrintText) SC_321; jump L_SayX35; .L_Say36; ParaContent(); print (PrintText) SC_322; .L_Say37; .L_SayX35; ParaContent(); print (PrintText) SC_323; new_line; .L_Say38; .L_SayX36; ! phrase 4 ! [4: now malygris-summon-countdown is 0] (Global_Vars-->123) = 0; ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: decrease malygris-summon-countdown by 1] (Global_Vars-->123) = (Global_Vars-->123) - 1; ! phrase 8 ! [8: if malygris-summon-countdown is 0 begin] if ((((Global_Vars-->123) == 0))) { ! phrase 9 ! [9: move demonic assassin to the location of malygris] MoveObject(I496_demonic_assassin, LocationOf(I493_malygris) , 0, false); ! phrase 10 ! [10: if the location of malygris is the location of the player begin] if ((( LocationOf(I493_malygris) == LocationOf(player) ))) { ! phrase 11 ! [11: say ~A [bold type]demonic being[roman type] suddenly appears!~] say__p=1;ParaContent(); print (PrintText) SC_324; ParaContent(); style bold; ParaContent(); print (PrintText) SC_325; ParaContent(); style roman; ParaContent(); print (PrintText) SC_326; new_line; .L_Say39; .L_SayX37; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: if the location of malygris is the location of the player begin] if ((( LocationOf(I493_malygris) == LocationOf(player) ))) { ! phrase 15 ! [15: say ~Malygris speaks the words of a long and complicated spell.~] say__p=1;ParaContent(); print (PrintText) SC_327; new_line; .L_Say40; .L_SayX38; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1983, 1983, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn when the player is undead ( this is the undead follow undead rule ): [ R_1197 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if ((((((player.p111_faction == I158_undead)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1197, 1197); ! phrase 1 ! [1: repeat with guy running through undead not follower persons in the location begin] for (t_0=Prop_49(0), t_1=Prop_49(t_0): t_0: t_0=t_1, t_1=Prop_49(t_1)) { ! phrase 2 ! [2: now guy is follower] (Adj_172_t2_v9(t_0)); ! phrase 3 ! [3: if follower percentile chance of guy is less than 50 begin] if (((GProperty(9, t_0,p48_follower_percentile_chan) < 50))) { ! phrase 4 ! [4: now follower percentile chance of guy is 50] WriteGProperty(9, t_0,p48_follower_percentile_chan,50); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end repeat] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1197, 1197, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn when the player form of the player is vampire bat ( this is the unready readied weapons when bat rule ): [ R_1295 t_0 ! Local variable e.g. '?-1,-1?' = weapon t_1 ! Local variable e.g. '?-1,-1?' = weapon ; if ((((((GProperty(9, player,p201_player_form) == I184_vampire_bat)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1295, 1295); ! phrase 1 ! [1: if the player encloses at least one readied weapon begin] if ((Prop_50())) { ! phrase 2 ! [2: repeat with x running through readied weapons enclosed by the player begin] for (t_0=Prop_51(0), t_1=Prop_51(t_0): t_0: t_0=t_1, t_1=Prop_51(t_1)) { ! phrase 3 ! [3: unless x is a natural weapon begin] if (~~(((t_0 ofclass K18_natural_weapon)))) { ! phrase 4 ! [4: say ~Your claws cannot effectively wield [the X].~] say__p=1;ParaContent(); print (PrintText) SC_328; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say41; .L_SayX39; ! phrase 5 ! [5: now x is not readied] (Adj_103_t3_v9(t_0)); ! phrase 6 ! [6: end unless] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1295, 1295, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Every turn when the player is in moving through solid rock ( this is the player dies in solid rock if not ethereal rule ): [ R_1347 ; if ((((((I186_moving_through_solid_ro == ContainerOf(player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1347, 1347); ! phrase 1 ! [1: if the player is not ethereal begin] if (((~~(((Adj_231_t1_v9(player))))))) { ! phrase 2 ! [2: say ~Your body, having regained its material solidity, cannot coexist in one place with solid rock.~] say__p=1;ParaContent(); print (PrintText) SC_329; new_line; .L_Say42; .L_SayX40; ! phrase 3 ! [3: end the game saying ~Rock is stronger than flesh.~] deadflag=SC_330; story_complete=false; ! phrase 4 ! [4: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1347, 1347, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Every turn when the player is the main actor ( this is the decrease player skill bonus timer rule ): [ R_1470 ; if ((((((player == (Global_Vars-->30))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1470, 1470); ! phrase 1 ! [1: if player skill bonus timer is greater than 0 begin] if ((((Global_Vars-->92) > 0))) { ! phrase 2 ! [2: decrease player skill bonus timer by 1] (Global_Vars-->92) = (Global_Vars-->92) - 1; ! phrase 3 ! [3: if player skill bonus timer is 0 begin] if ((((Global_Vars-->92) == 0))) { ! phrase 4 ! [4: say ~You suddenly feel [bold type]unskilled[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_331; ParaContent(); style bold; ParaContent(); print (PrintText) SC_332; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say43; .L_SayX41; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1470, 1470, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Every turn when the player wears the cloak of shadows ( this is the blend into shadows rule ): [ R_1504 ; if ((((((player == WearerOf(I353_cloak_of_shadows))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1504, 1504); ! phrase 1 ! [1: if the player is not hidden and the player is alive and the player is the main actor begin] if ((((~~(((Adj_221_t1_v9(player))))))) && (((((Adj_33_t1_v9(player))))) && (((player == (Global_Vars-->30)))))) { ! phrase 2 ! [2: hide] (PHR_1315_r15 ()); ! phrase 3 ! [3: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1504, 1504, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when the main actor is the player ( this is the decrease ape power damage over time rule ): [ R_1713 ; if (((((((Global_Vars-->30) == player)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1713, 1713); ! phrase 1 ! [1: if the ape power damage is greater than 0 begin] if ((((Global_Vars-->119) > 0))) { ! phrase 2 ! [2: if a random chance of 1 in 3 succeeds or a random chance of ape power damage in 10 succeeds begin] if ((( (GenerateRandomNumber(1, 3) <= 1) )) || (( (GenerateRandomNumber(1, 10) <= (Global_Vars-->119)) ))) { ! phrase 3 ! [3: decrease ape power damage by 1] (Global_Vars-->119) = (Global_Vars-->119) - 1; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1713, 1713, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when Nameless Horror is follower ( this is the increase hunger of Nameless Horror rule ): [ R_1996 ; if (((((((Adj_172_t1_v9(I499_nameless_horror)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1996, 1996); ! phrase 1 ! [1: increase follower percentile chance of nameless horror by 1] WriteGProperty(9, I499_nameless_horror,p48_follower_percentile_chan,GProperty(9, I499_nameless_horror,p48_follower_percentile_chan) + 1); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1996, 1996, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when follower percentile chance of Nameless Horror is greater than 100 ( this is the speed up Nameless Horror rule ): [ R_1997 t_0 ! Local variable e.g. 'way' = object ; if ((((((GProperty(9, I499_nameless_horror,p48_follower_percentile_chan) > 100)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1997, 1997); ! phrase 1 ! [1: let the way be the best route from the location of nameless horror to the location of the player] t_0 = MapRouteTo( LocationOf(I499_nameless_horror) , LocationOf(player) ,0,0) ; ! phrase 2 ! [2: if way is a direction begin] if (((t_0 ofclass K3_direction))) { ! phrase 3 ! [3: try nameless horror going the way] TryAction(0, I499_nameless_horror, ##Go, t_0, 0);; ! phrase 4 ! [4: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1997, 1997, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn when the imp is on-stage ( this is the imp not absent AI rule ): [ R_2064 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD4_list_of_things); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_0(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_0 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = list of things t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = thing ; if (((((((Adj_9_t1_v9(I519_imp)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2064, 2064); ! phrase 1 ! [1: if main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: if location of the imp is not location of the player begin] if (((~~(( LocationOf(I519_imp) == LocationOf(player) ))))) { ! phrase 3 ! [3: if location of the imp is not lair of the imp begin] if (((~~(( LocationOf(I519_imp) == I427_lair_of_the_imp))))) { ! phrase 4 ! [4: try the imp teleporting] TryAction(0, I519_imp, ##A94_teleporting, 0, 0);; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: repeat with item running through things carried by the imp begin] for (t_0=Prop_52(0), t_1=Prop_52(t_0): t_0: t_0=t_1, t_1=Prop_52(t_1)) { ! phrase 7 ! [7: move item to location of the imp] MoveObject(t_0, LocationOf(I519_imp) , 0, false); ! phrase 8 ! [8: end repeat] } ! phrase 9 ! [9: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 10 ! [10: let lijst be a list of things] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 11 ! [11: repeat with item running through things carried by the player begin] for (t_1=Prop_53(0), t_2=Prop_53(t_1): t_1: t_1=t_2, t_2=Prop_53(t_2)) { ! phrase 12 ! [12: if item is not readied and item is not worn begin] if ((((~~(((Adj_103_t1_v9(t_1))))))) && (((~~(((Adj_0_t1_v9(t_1)))))))) { ! phrase 13 ! [13: add item to lijst] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: repeat with item running through things in the location begin] for (t_1=Prop_54(0), t_2=Prop_54(t_1): t_1: t_1=t_2, t_2=Prop_54(t_2)) { ! phrase 17 ! [17: if item is not a person and item is not fixed in place and item is not scenery and item is not readied and item is not worn begin] if ((((~~((t_1 ofclass K8_person))))) && ((((~~(((Adj_62_t1_v9(t_1))))))) && ((((~~(((Adj_64_t1_v9(t_1))))))) && ((((~~(((Adj_103_t1_v9(t_1))))))) && (((~~(((Adj_0_t1_v9(t_1))))))))))) { ! phrase 18 ! [18: add item to lijst] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: end repeat] } ! phrase 21 ! [21: unless lijst is empty begin] if (~~((((Adj_16_t1_v30(t_0)))))) { ! phrase 22 ! [22: try the imp teleporting] TryAction(0, I519_imp, ##A94_teleporting, 0, 0);; ! phrase 23 ! [23: end unless] } ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2064, 2064, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Every turn when acting fast ( this is the set last-seen-location rule ): [ R_2103 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (((((NAP_0()) && (actor==player))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2103, 2103); ! phrase 1 ! [1: repeat with guy running through alive persons in the location begin] for (t_0=Prop_55(0), t_1=Prop_55(t_0): t_0: t_0=t_1, t_1=Prop_55(t_1)) { ! phrase 2 ! [2: now last-seen-location of guy is the location] WriteGProperty(9, t_0,p62_last_seen_location,real_location); if (~~(GProperty(9, t_0,p62_last_seen_location) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, GProperty(9, t_0,p62_last_seen_location), "now last-seen-location of guy is the location", "room");; ! phrase 3 ! [3: end repeat] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2103, 2103, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Every turn when the main actor wears the dragon armour: [ R_1523 ; if (((((((Global_Vars-->30) == WearerOf(I358_suit_of_dragon_armour))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1523, 1523); ! phrase 1 ! [1: if the health of the main actor is greater than 0 begin] if (((GProperty(9, (Global_Vars-->30),p14_health) > 0))) { ! phrase 2 ! [2: if the main actor is not undead or a random chance of 1 in 3 succeeds begin] if ((((~~(((Global_Vars-->30).p111_faction == I158_undead))))) || (( (GenerateRandomNumber(1, 3) <= 1) ))) { ! phrase 3 ! [3: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 4 ! [4: decrease the health of the main actor by 1] WriteGProperty(9, (Global_Vars-->30),p14_health,GProperty(9, (Global_Vars-->30),p14_health) - 1); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if the health of the main actor is less than 1 begin] if (((GProperty(9, (Global_Vars-->30),p14_health) < 1))) { ! phrase 8 ! [8: end the game saying ~The dragon armour has claimed your life.~] deadflag=SC_333; story_complete=false; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1523, 1523, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Every turn when the main actor is the player: [ R_1529 ; if (((((((Global_Vars-->30) == player)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1529, 1529); ! phrase 1 ! [1: if the ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 2 ! [2: decrease the ment timer by 1] (Global_Vars-->97) = (Global_Vars-->97) - 1; ! phrase 3 ! [3: if the ment timer is 0 begin] if ((((Global_Vars-->97) == 0))) { ! phrase 4 ! [4: say ~As suddenly as it began, the rush given by the [bold type]ment[roman type] falls away. You are left feeling empty and only half alive.~] say__p=1;ParaContent(); print (PrintText) SC_334; ParaContent(); style bold; ParaContent(); print (PrintText) SC_335; ParaContent(); style roman; ParaContent(); print (PrintText) SC_336; new_line; .L_Say44; .L_SayX42; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1529, 1529, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Every turn when the main actor is the player: [ R_1530 ; if (((((((Global_Vars-->30) == player)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1530, 1530); ! phrase 1 ! [1: if the od timer is greater than 0 begin] if ((((Global_Vars-->98) > 0))) { ! phrase 2 ! [2: decrease the od timer by 1] (Global_Vars-->98) = (Global_Vars-->98) - 1; ! phrase 3 ! [3: if the od timer is 7 begin] if ((((Global_Vars-->98) == 7))) { ! phrase 4 ! [4: say ~Your breathing is becoming heavy and irregular.~] say__p=1;ParaContent(); print (PrintText) SC_337; new_line; .L_Say45; .L_SayX43; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the od timer is 3 begin] if ((((Global_Vars-->98) == 3))) { ! phrase 7 ! [7: say ~Respiration becomes more difficult by the second. Your heartbeat feels very irregular.~] say__p=1;ParaContent(); print (PrintText) SC_338; new_line; .L_Say46; .L_SayX44; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if the od timer is 0 begin] if ((((Global_Vars-->98) == 0))) { ! phrase 10 ! [10: end the game saying ~You OD'ed.~] deadflag=SC_339; story_complete=false; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1530, 1530, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Every turn when in phantasmagoria: [ R_1554 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_1(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_1 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = list of people t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ; if ((((( (WhetherIn(I381_phantasmagoria)) ))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1554, 1554); ! phrase 1 ! [1: if hate is present begin] if (((PHR_833_r16 ()))) { ! phrase 2 ! [2: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 3 ! [3: let lijst be a list of persons] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 4 ! [4: repeat with guy running through alive persons enclosed by the location begin] for (t_1=Prop_56(0), t_2=Prop_56(t_1): t_1: t_1=t_2, t_2=Prop_56(t_2)) { ! phrase 5 ! [5: unless guy is blind begin] if (~~(((PHR_1169_r17 (t_1))))) { ! phrase 6 ! [6: if concentration of guy is greater than 0 begin] if (((GProperty(9, t_1,p26_concentration) > 0))) { ! phrase 7 ! [7: if a random number between 1 and 5 is greater than the concentration of guy begin] if ((( R_DecimalNumber(1, 5) > GProperty(9, t_1,p26_concentration)))) { ! phrase 8 ! [8: add guy to lijst] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 9 ! [9: now concentration of guy is 0] WriteGProperty(9, t_1,p26_concentration,0); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end unless] } ! phrase 13 ! [13: end repeat] } ! phrase 14 ! [14: say ~Suddenly, [one of]a disintegrating skeletal warrior[or]a blast of dragon's fire[or]a naked male slave screaming in fear[or]a naked female slave fleeing in tears[or]a huge fountain of fire[or]a crashing ballista bolt[or]a drowning knight, crying for his god,[or]a ghost devouring the flesh of a still living man[or]a frenzied bull elephant[or]a shrieking princess in the claws of a demon[or]an obese king carried by seven blind eunuchs[at random] appears. [unless lijst is empty]While only an image that flickers and then disappears, it startles [lijst with definite articles][otherwise]The illusions do not affect anyone[end if].~] say__p=1;ParaContent(); print (PrintText) SC_340; ParaContent(); I7_ST_say_one_of-->0 = i7_soo_ran(I7_ST_say_one_of-->0, 11); switch((I7_ST_say_one_of-->0)%(11+1)-1) { 0: ParaContent(); print (PrintText) SC_341; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_342; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_343; ParaContent(); @nop; 3: ParaContent(); print (PrintText) SC_344; ParaContent(); @nop; 4: ParaContent(); print (PrintText) SC_345; ParaContent(); @nop; 5: ParaContent(); print (PrintText) SC_346; ParaContent(); @nop; 6: ParaContent(); print (PrintText) SC_347; ParaContent(); @nop; 7: ParaContent(); print (PrintText) SC_348; ParaContent(); @nop; 8: ParaContent(); print (PrintText) SC_349; ParaContent(); @nop; 9: ParaContent(); print (PrintText) SC_350; ParaContent(); @nop; 10: ParaContent(); print (PrintText) SC_351; ParaContent(); } ParaContent(); print (PrintText) SC_352; if (((((Adj_16_t1_v30(t_0)))))) jump L_Say47; ParaContent(); print (PrintText) SC_353; ParaContent(); LIST_OF_TY_Say(t_0, 2); jump L_SayX45; .L_Say47; ParaContent(); print (PrintText) SC_354; .L_Say48; .L_SayX45; ParaContent(); print (PrintText) SC_310; new_line; .L_Say49; .L_SayX46; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1554, 1554, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Every turn when the location of the statue of shards is the location of the player: [ R_1676 ; if (((((( LocationOf(I431_statue_of_shards) == LocationOf(player) )))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1676, 1676); ! phrase 1 ! [1: if statue-of-shards-unstable is true begin] if (((((Global_Vars-->117) && true) == (1 && true)))) { ! phrase 2 ! [2: if a random chance of 1 in 25 succeeds begin] if (( (GenerateRandomNumber(1, 25) <= 1) )) { ! phrase 3 ! [3: say ~With a mighty bang, the statue of shards [bold type]explodes[roman type], dealing [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_355; ParaContent(); style bold; ParaContent(); print (PrintText) SC_356; ParaContent(); style roman; ParaContent(); print (PrintText) SC_357; ParaContent(); RunParagraphOn(); .L_Say50; .L_SayX47; ! phrase 4 ! [4: have a fragmentation event in location with statue of shards by player] (Resolver_1(real_location,I431_statue_of_shards,player,"source", 153)); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1676, 1676, true); rfalse; ]; ! No specific request ! Every turn ( this is the mark items as seen every turn rule ): [ R_811 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through things that are enclosed by the location begin] for (t_0=Prop_57(0), t_1=Prop_57(t_0): t_0: t_0=t_1, t_1=Prop_57(t_1)) { if (debug_rules>1) print " [repetition with item set to ", (PrintShortName) t_0, "]^"; ! phrase 2 ! [2: if the item is not enclosed by an opaque closed container , now the item is seen] if ((~~Prop_58(,t_0))) { (Adj_91_t2_v9(t_0)); } ! phrase 3 ! [3: end repeat] } if (debug_rules>1) print " [3: end repeat]^"; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Every turn ( this is the standard increase or reset the tension rule ): [ R_1068 ; ! phrase 1 ! [1: if the combat status is peace begin] if ((((Global_Vars-->29) == I99_peace))) { ! phrase 2 ! [2: now the tension is 0] (Global_Vars-->48) = 0; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: increase the tension by 1] (Global_Vars-->48) = (Global_Vars-->48) + 1; ! phrase 5 ! [5: if the tension is greater than 20 begin] if ((((Global_Vars-->48) > 20))) { ! phrase 6 ! [6: now the tension is 20] (Global_Vars-->48) = 20; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the remove all killed monsters from play rule ): [ R_1158 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with guy running through dead not off-stage persons begin] for (t_0=Prop_59(0), t_1=Prop_59(t_0): t_0: t_0=t_1, t_1=Prop_59(t_1)) { ! phrase 2 ! [2: unless guy is the player begin] if (~~(((t_0 == player)))) { ! phrase 3 ! [3: do the absorption with guy] (PHR_1159_r19 (t_0)); ! phrase 4 ! [4: end unless] } ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the reduce heal cooldown of the main actor rule ): [ R_1178 ; ! phrase 1 ! [1: if the current heal cooldown of the main actor is greater than 0 begin] if (((GProperty(9, (Global_Vars-->30),p42_current_heal_cooldown) > 0))) { ! phrase 2 ! [2: decrease the current heal cooldown of the main actor by 1] WriteGProperty(9, (Global_Vars-->30),p42_current_heal_cooldown,GProperty(9, (Global_Vars-->30),p42_current_heal_cooldown) - 1); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the spontaneous teleport rule ): [ R_1182 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: repeat with guy running through spontaneous teleporter not off-stage persons begin] for (t_0=Prop_60(0), t_1=Prop_60(t_0): t_0: t_0=t_1, t_1=Prop_60(t_1)) { ! phrase 2 ! [2: if teleport amount of guy is not 0 begin] if (((~~((GProperty(9, t_0,p43_teleport_amount) == 0))))) { ! phrase 3 ! [3: let n be the teleport eagerness of guy] t_2 = GProperty(9, t_0,p44_teleport_eagerness); ! phrase 4 ! [4: if a random chance of n in 100 succeeds begin] if (( (GenerateRandomNumber(1, 100) <= t_2) )) { ! phrase 5 ! [5: try guy teleporting] TryAction(0, t_0, ##A94_teleporting, 0, 0);; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the teleport impossible awareness expires rule ): [ R_1187 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with guy running through teleport impossible aware persons begin] for (t_0=Prop_61(0), t_1=Prop_61(t_0): t_0: t_0=t_1, t_1=Prop_61(t_1)) { ! phrase 2 ! [2: unless teleportation is impossible for guy begin] if (~~(((PHR_1179_r20 (t_0))))) { ! phrase 3 ! [3: now guy is not teleport impossible aware] (Adj_170_t3_v9(t_0)); ! phrase 4 ! [4: end unless] } ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the reduce disintegrate cooldown of the main actor rule ): [ R_1190 ; ! phrase 1 ! [1: if the current disintegrate cooldown of the main actor is greater than 0 begin] if (((GProperty(9, (Global_Vars-->30),p47_current_disintegrate_coo) > 0))) { ! phrase 2 ! [2: decrease the current disintegrate cooldown of the main actor by 1] WriteGProperty(9, (Global_Vars-->30),p47_current_disintegrate_coo,GProperty(9, (Global_Vars-->30),p47_current_disintegrate_coo) - 1); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the have followers follow rule ): [ R_1191 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: repeat with guy running through alive not off-stage follower persons begin] for (t_0=Prop_62(0), t_1=Prop_62(t_0): t_0: t_0=t_1, t_1=Prop_62(t_1)) { ! phrase 3 ! [3: if the location of guy is not the location of the player begin] if (((~~(( LocationOf(t_0) == LocationOf(player) ))))) { ! phrase 4 ! [4: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 5 ! [5: consider the followers rules] ProcessRulebook(501); ! phrase 6 ! [6: unless rule failed begin] if (~~(( (RulebookFailed()) ))) { ! phrase 7 ! [7: let the way be the best route from the location of guy to the location of the player] t_2 = MapRouteTo( LocationOf(t_0) , LocationOf(player) ,0,0) ; ! phrase 8 ! [8: if way is a direction , try guy going the way] if (((t_2 ofclass K3_direction))) { TryAction(0, t_0, ##Go, t_2, 0);; } ! phrase 9 ! [9: end unless] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end repeat] } ! phrase 12 ! [12: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the flaming items burn away rule ): [ R_1216 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through flaming not off-stage corruptible things begin] for (t_0=Prop_63(0), t_1=Prop_63(t_0): t_0: t_0=t_1, t_1=Prop_63(t_1)) { ! phrase 2 ! [2: if a random chance of 1 in 4 succeeds or destroying heat of material of item + 2 is not greater than heat strength of item begin] if ((( (GenerateRandomNumber(1, 4) <= 1) )) || (((~~(( (GProperty(50, GProperty(9, t_0,p180_material),p177_destroying_heat)+2) > GProperty(9, t_0,p50_heat_strength))))))) { ! phrase 3 ! [3: now heat strength of item is 0] WriteGProperty(9, t_0,p50_heat_strength,0); ! phrase 4 ! [4: now item is not flaming] (Adj_201_t3_v9(t_0)); ! phrase 5 ! [5: turn off mentioning hotness] (PHR_1208_r21 ()); ! phrase 6 ! [6: if item is visible , say ~[The item] [if material of item is melter]melts[otherwise if material of item is not flesh]burns[otherwise]chars[end if] away.~] if ((((Adj_3_t1_v9(t_0))))) { say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_209; if (~~((((GProperty(50, GProperty(9, t_0,p180_material), p178_heat_behaviour) == 2))))) jump L_Say51; ParaContent(); print (PrintText) SC_358; ParaContent(); jump L_SayX48; .L_Say51; if (~~((((~~((GProperty(9, t_0,p180_material) == I172_flesh))))))) jump L_Say52; ParaContent(); print (PrintText) SC_359; jump L_SayX48; .L_Say52; ParaContent(); print (PrintText) SC_360; .L_Say53; .L_SayX48; ParaContent(); print (PrintText) SC_361; new_line; .L_Say54; .L_SayX49; } ! phrase 7 ! [7: turn on mentioning hotness] (PHR_1209_r22 ()); ! phrase 8 ! [8: remove the item from play] RemoveFromPlay(t_0); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the heat destroys items rule ): [ R_1218 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: repeat with item running through hot not flaming not off-stage corruptible things begin] for (t_0=Prop_64(0), t_1=Prop_64(t_0): t_0: t_0=t_1, t_1=Prop_64(t_1)) { ! phrase 2 ! [2: let n be heat strength of item] t_2 = GProperty(9, t_0,p50_heat_strength); ! phrase 3 ! [3: let m be destroying heat of the material of item] t_3 = GProperty(50, GProperty(9, t_0,p180_material),p177_destroying_heat); ! phrase 4 ! [4: if m is not greater than n begin] if (((~~((t_3 > t_2))))) { ! phrase 5 ! [5: if material of item is burner and m + 2 is greater than n begin] if ((((GProperty(50, GProperty(9, t_0,p180_material), p178_heat_behaviour) == 1))) && ((( (t_3+2) > t_2)))) { ! phrase 6 ! [6: now item is flaming] (Adj_201_t2_v9(t_0)); ! phrase 7 ! [7: turn off mentioning hotness] (PHR_1208_r21 ()); ! phrase 8 ! [8: if item is visible , say ~[The item] catches fire!~] if ((((Adj_3_t1_v9(t_0))))) { say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_362; new_line; .L_Say55; .L_SayX50; } ! phrase 9 ! [9: turn on mentioning hotness] (PHR_1209_r22 ()); ! phrase 10 ! [10: otherwise] } else { ! phrase 11 ! [11: turn off mentioning hotness] (PHR_1208_r21 ()); ! phrase 12 ! [12: if item is visible , say ~[The item] [if material of item is melter]melts[otherwise if material of item is not flesh]burns[otherwise]chars[end if] away.~] if ((((Adj_3_t1_v9(t_0))))) { say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_209; if (~~((((GProperty(50, GProperty(9, t_0,p180_material), p178_heat_behaviour) == 2))))) jump L_Say56; ParaContent(); print (PrintText) SC_358; ParaContent(); jump L_SayX51; .L_Say56; if (~~((((~~((GProperty(9, t_0,p180_material) == I172_flesh))))))) jump L_Say57; ParaContent(); print (PrintText) SC_359; jump L_SayX51; .L_Say57; ParaContent(); print (PrintText) SC_360; .L_Say58; .L_SayX51; ParaContent(); print (PrintText) SC_361; new_line; .L_Say59; .L_SayX52; } ! phrase 13 ! [13: turn on mentioning hotness] (PHR_1209_r22 ()); ! phrase 14 ! [14: remove the item from play] RemoveFromPlay(t_0); ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the rust spores rust iron rule ): [ R_1242 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room t_2 ! Local variable e.g. '?-1,-1?' = thing t_3 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with place running through rust-spored rooms begin] for (t_0=Prop_65(0), t_1=Prop_65(t_0): t_0: t_0=t_1, t_1=Prop_65(t_1)) { ! phrase 2 ! [2: repeat with item running through iron not rusted corruptible things enclosed by place begin] for (t_2=Prop_66(,t_0,0), t_3=Prop_66(,t_0,t_2): t_2: t_2=t_3, t_3=Prop_66(,t_0,t_3)) { ! phrase 3 ! [3: unless item is enclosed by a closed container begin] if (~~((Prop_67(,t_2)))) { ! phrase 4 ! [4: if item can rust begin] if (((PHR_1243_r9 (t_2)))) { ! phrase 5 ! [5: if a random chance of 1 in 6 succeeds begin] if (( (GenerateRandomNumber(1, 6) <= 1) )) { ! phrase 6 ! [6: now item is rusted] (Adj_205_t2_v9(t_2)); ! phrase 7 ! [7: if player can see item begin] if (((TestVisibility(player,t_2)))) { ! phrase 8 ! [8: turn off mentioning rust] (PHR_1228_r23 ()); ! phrase 9 ! [9: say ~As rust spores whirl around the room, [the item] rust[unless item is plural-named][s][end if].~] say__p=1;ParaContent(); print (PrintText) SC_363; ParaContent(); print (the) t_2; ParaContent(); print (PrintText) SC_364; if (((((Adj_48_t1_v9(t_2)))))) jump L_Say60; ParaContent(); STextSubstitution(); .L_Say60; .L_SayX53; ParaContent(); print (PrintText) SC_310; new_line; .L_Say61; .L_SayX54; ! phrase 10 ! [10: turn on mentioning rust] (PHR_1229_r24 ()); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end unless] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Every turn ( this is the remove forced action rule ): [ R_1259 ; ! phrase 1 ! [1: now forced-action is false] (Global_Vars-->86) = 0; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Every turn ( this is the possibly detected rule ): [ R_1301 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: if the player is hidden and hate is present begin] if (((((Adj_221_t1_v9(player))))) && (((PHR_833_r16 ())))) { ! phrase 2 ! [2: if the main actor is the player or the faction of the main actor hates the faction of the player begin] if (((((Global_Vars-->30) == player))) || ((((Relation_TestVtoV(GProperty(9, (Global_Vars-->30),p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false)))))) { ! phrase 3 ! [3: consider the detection rules] ProcessRulebook(516); ! phrase 4 ! [4: let n be a random number between 1 and 100] t_0 = R_DecimalNumber(1, 100) ; ! phrase 5 ! [5: if the detection probability is greater than n begin] if ((((Global_Vars-->89) > t_0))) { ! phrase 6 ! [6: now the player is not hidden] (Adj_221_t3_v9(player)); ! phrase 7 ! [7: if the main actor is not the player begin] if (((~~(((Global_Vars-->30) == player))))) { ! phrase 8 ! [8: say ~[The main actor] [if main actor is plural-named]have[otherwise]has[end if] detected you!~] say__p=1;ParaContent(); print (The) (Global_Vars-->30); ParaContent(); print (PrintText) SC_209; if (~~(((((Adj_48_t1_v9((Global_Vars-->30)))))))) jump L_Say62; ParaContent(); print (PrintText) SC_365; jump L_SayX55; .L_Say62; ParaContent(); print (PrintText) SC_366; .L_Say63; .L_SayX55; ParaContent(); print (PrintText) SC_367; new_line; .L_Say64; .L_SayX56; ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: say ~You have been revealed!~] say__p=1;ParaContent(); print (PrintText) SC_368; new_line; .L_Say65; .L_SayX57; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: repeat with guy running through visible persons begin] for (t_1=Prop_68(0), t_2=Prop_68(t_1): t_1: t_1=t_2, t_2=Prop_68(t_2)) { ! phrase 13 ! [13: if the faction of guy hates the faction of the player begin] if ((((Relation_TestVtoV(GProperty(9, t_1,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))) { ! phrase 14 ! [14: now guy is on-the-lookout] (Adj_223_t2_v9(t_1)); ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end repeat] } ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: now detection probability is 0] (Global_Vars-->89) = 0; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Every turn ( this is the reduce smoke timer rule ): [ R_1317 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: repeat with place running through rooms begin] for (t_0=Prop_69(0), t_1=Prop_69(t_0): t_0: t_0=t_1, t_1=Prop_69(t_1)) { ! phrase 3 ! [3: now test room is place] (Global_Vars-->80) = t_0; ! phrase 4 ! [4: now temporary smoke timer is smoke timer of place] (Global_Vars-->90) = GProperty(9, t_0,p54_smoke_timer); ! phrase 5 ! [5: consider the smoke rules] ProcessRulebook(517); ! phrase 6 ! [6: let n be smoke penalty of place] t_2 = (PHR_1316_r25 (t_0)); ! phrase 7 ! [7: now smoke timer of place is temporary smoke timer] WriteGProperty(9, t_0,p54_smoke_timer,(Global_Vars-->90)); ! phrase 8 ! [8: let m be smoke penalty of place] t_3 = (PHR_1316_r25 (t_0)); ! phrase 9 ! [9: if place is the location begin] if (((t_0 == real_location))) { ! phrase 10 ! [10: if m is not n begin] if (((~~((t_3 == t_2))))) { ! phrase 11 ! [11: if m is greater than n begin] if (((t_3 > t_2))) { ! phrase 12 ! [12: if n is 0 begin] if (((t_2 == 0))) { ! phrase 13 ! [13: say ~The room fills with [bold type]smoke[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_369; ParaContent(); style bold; ParaContent(); print (PrintText) SC_370; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say66; .L_SayX58; ! phrase 14 ! [14: otherwise] } else { ! phrase 15 ! [15: say ~The [bold type]smoke[roman type] becomes thicker.~] say__p=1;ParaContent(); print (PrintText) SC_371; ParaContent(); style bold; ParaContent(); print (PrintText) SC_370; ParaContent(); style roman; ParaContent(); print (PrintText) SC_372; new_line; .L_Say67; .L_SayX59; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: otherwise] } else { ! phrase 18 ! [18: if m is 0 begin] if (((t_3 == 0))) { ! phrase 19 ! [19: say ~The [bold type]smoke[roman type] disappears completely.~] say__p=1;ParaContent(); print (PrintText) SC_371; ParaContent(); style bold; ParaContent(); print (PrintText) SC_370; ParaContent(); style roman; ParaContent(); print (PrintText) SC_373; new_line; .L_Say68; .L_SayX60; ! phrase 20 ! [20: otherwise] } else { ! phrase 21 ! [21: say ~The [bold type]smoke[roman type] becomes less thick.~] say__p=1;ParaContent(); print (PrintText) SC_371; ParaContent(); style bold; ParaContent(); print (PrintText) SC_370; ParaContent(); style roman; ParaContent(); print (PrintText) SC_374; new_line; .L_Say69; .L_SayX61; ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end repeat] } ! phrase 27 ! [27: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Every turn ( this is the decrease etherealness rule ): [ R_1336 ; ! phrase 1 ! [1: if the ethereal timer of the main actor is greater than 0 begin] if (((GProperty(9, (Global_Vars-->30),p55_ethereal_timer) > 0))) { ! phrase 2 ! [2: decrease ethereal timer of the main actor by 1] WriteGProperty(9, (Global_Vars-->30),p55_ethereal_timer,GProperty(9, (Global_Vars-->30),p55_ethereal_timer) - 1); ! phrase 3 ! [3: if main actor is the player and ethereal timer of the main actor is 5 begin] if (((((Global_Vars-->30) == player))) && (((GProperty(9, (Global_Vars-->30),p55_ethereal_timer) == 5)))) { ! phrase 4 ! [4: say ~Your [bold type]etherealness[roman type] will wear off in five turns.~] say__p=1;ParaContent(); print (PrintText) SC_375; ParaContent(); style bold; ParaContent(); print (PrintText) SC_376; ParaContent(); style roman; ParaContent(); print (PrintText) SC_377; new_line; .L_Say70; .L_SayX62; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if main actor is the player and ethereal timer of the main actor is 1 begin] if (((((Global_Vars-->30) == player))) && (((GProperty(9, (Global_Vars-->30),p55_ethereal_timer) == 1)))) { ! phrase 7 ! [7: say ~Your [bold type]etherealness[roman type] will wear off next turn.~] say__p=1;ParaContent(); print (PrintText) SC_375; ParaContent(); style bold; ParaContent(); print (PrintText) SC_376; ParaContent(); style roman; ParaContent(); print (PrintText) SC_378; new_line; .L_Say71; .L_SayX63; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if ethereal timer of the main actor is 0 begin] if (((GProperty(9, (Global_Vars-->30),p55_ethereal_timer) == 0))) { ! phrase 10 ! [10: now main actor is not ethereal] (Adj_231_t3_v9((Global_Vars-->30))); ! phrase 11 ! [11: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 12 ! [12: say ~You become [bold type]solid[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_379; ParaContent(); style bold; ParaContent(); print (PrintText) SC_380; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say72; .L_SayX64; ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: say ~[The main actor] becomes [bold type]solid[roman type].~] say__p=1;ParaContent(); print (The) (Global_Vars-->30); ParaContent(); print (PrintText) SC_381; ParaContent(); style bold; ParaContent(); print (PrintText) SC_380; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say73; .L_SayX65; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Every turn ( this is the decrease the Nomos counter rule ): [ R_1569 ; ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: if nomos counter is greater than 0 begin] if ((((Global_Vars-->101) > 0))) { ! phrase 3 ! [3: decrease nomos counter by 1] (Global_Vars-->101) = (Global_Vars-->101) - 1; ! phrase 4 ! [4: if nomos counter is 0 begin] if ((((Global_Vars-->101) == 0))) { ! phrase 5 ! [5: now nomos bonus is true] (Global_Vars-->103) = 1; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Every turn ( this is the decrease the Nomos wrath counter rule ): [ R_1570 ; ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: if nomos wrath counter is greater than 0 begin] if ((((Global_Vars-->102) > 0))) { ! phrase 3 ! [3: decrease nomos wrath counter by 1] (Global_Vars-->102) = (Global_Vars-->102) - 1; ! phrase 4 ! [4: if the nomos wrath counter is 0 begin] if ((((Global_Vars-->102) == 0))) { ! phrase 5 ! [5: say ~From the beginning of time, all the Universe's constituent particles have traced their preordained paths, to arrive at their present constellation -- a rare constellation in which all the thermal energy of your body is suddenly transferred to the air and dissipates. Your blood freezes, and you die.~] say__p=1;ParaContent(); print (PrintText) SC_382; new_line; .L_Say74; .L_SayX66; ! phrase 6 ! [6: end the game saying ~The last thing you hear is booming but mirthless laughter.~] deadflag=SC_383; story_complete=false; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Every turn ( this is the decrease the Aite counter rule ): [ R_1586 ; ! phrase 1 ! [1: if aite counter is greater than 0 begin] if ((((Global_Vars-->105) > 0))) { ! phrase 2 ! [2: decrease aite counter by 1] (Global_Vars-->105) = (Global_Vars-->105) - 1; ! phrase 3 ! [3: if aite counter is 0 begin] if ((((Global_Vars-->105) == 0))) { ! phrase 4 ! [4: have aite intervene] (PHR_1587_r26 ()); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Every turn ( this is the decrease the Isatzo time-out each turn rule ): [ R_1599 ; ! phrase 1 ! [1: if the main actor is the player and the isatzo time-out is greater than 0 begin] if (((((Global_Vars-->30) == player))) && ((((Global_Vars-->107) > 0)))) { ! phrase 2 ! [2: decrease isatzo time-out by 1] (Global_Vars-->107) = (Global_Vars-->107) - 1; ! phrase 3 ! [3: if isatzo time-out is 0 and player is in temple of isatzo begin] if (((((Global_Vars-->107) == 0))) && (((I394_temple_of_isatzo == ContainerOf(player))))) { ! phrase 4 ! [4: say ~Isatzo is available for prayer again.~] say__p=1;ParaContent(); print (PrintText) SC_384; new_line; .L_Say75; .L_SayX67; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the stun wears off rule ): [ R_1763 ; ! phrase 1 ! [1: if the main actor is stunned begin] if ((((Adj_43_t1_v9((Global_Vars-->30)))))) { ! phrase 2 ! [2: decrease stun count of main actor by 1] WriteGProperty(9, (Global_Vars-->30),p60_stun_count,GProperty(9, (Global_Vars-->30),p60_stun_count) - 1); ! phrase 3 ! [3: if stun count of main actor is 0 begin] if (((GProperty(9, (Global_Vars-->30),p60_stun_count) == 0))) { ! phrase 4 ! [4: if main actor is player begin] if ((((Global_Vars-->30) == player))) { ! phrase 5 ! [5: say ~You are [bold type]no longer stunned[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_385; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say76; .L_SayX68; ! phrase 6 ! [6: otherwise if main actor is visible] } else if ((((Adj_3_t1_v9((Global_Vars-->30)))))) { ! phrase 7 ! [7: say ~[The main actor] [if the main actor is plural-named]are[otherwise]is[end if] [bold type]no longer stunned[roman type].~] say__p=1;ParaContent(); print (The) (Global_Vars-->30); ParaContent(); print (PrintText) SC_209; if (~~(((((Adj_48_t1_v9((Global_Vars-->30)))))))) jump L_Say77; ParaContent(); print (PrintText) SC_386; jump L_SayX69; .L_Say77; ParaContent(); print (PrintText) SC_387; .L_Say78; .L_SayX69; ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_385; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say79; .L_SayX70; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the free slaves of the mindslug when it is killed rule ): [ R_1855 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: if the number of enslaved alive persons in the location is greater than 0 and the mindslug is dead begin] if (((( (Prop_70()) > 0))) && ((((~~Adj_33_t1_v9(I463_mindslug)))))) { ! phrase 2 ! [2: repeat with guy running through enslaved alive persons in the location begin] for (t_0=Prop_71(0), t_1=Prop_71(t_0): t_0: t_0=t_1, t_1=Prop_71(t_1)) { ! phrase 3 ! [3: now guy is friendly] t_0.p111_faction = I91_friendly; ! phrase 4 ! [4: if player is not undead begin] if (((~~((player.p111_faction == I158_undead))))) { ! phrase 5 ! [5: if guy is fafhrd begin] if (((t_0 == I466_fafhrd))) { ! phrase 6 ! [6: say ~'Thanks, man,' says Fafhrd. 'I guess you have earned yourself some help.'[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_388; ParaContent(); DivideParagraphPoint(); new_line; .L_Say80; .L_SayX71; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if guy is mouser begin] if (((t_0 == I469_mouser))) { ! phrase 9 ! [9: say ~'I knew we shouldn't have trusted Ningauble,' Mouser states. 'Let's get out of here as quickly as possible.'[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_389; ParaContent(); DivideParagraphPoint(); new_line; .L_Say81; .L_SayX72; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if guy is not fafhrd and guy is not mouser begin] if ((((~~((t_0 == I466_fafhrd))))) && (((~~((t_0 == I469_mouser)))))) { ! phrase 12 ! [12: say ~[The guy] is freed from the mindslug's influence.[paragraph break]~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_390; ParaContent(); DivideParagraphPoint(); new_line; .L_Say82; .L_SayX73; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the reset grappling after going rule ): [ R_1902 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if the location of the player is not the location of the giant tentacle begin] if (((~~(( LocationOf(player) == LocationOf(I473_giant_tentacle) ))))) { ! phrase 2 ! [2: now constriction level is 0] (Global_Vars-->121) = 0; ! phrase 3 ! [3: if the giant tentacle grapples someone begin] if ((Prop_72())) { ! phrase 4 ! [4: let x be a random person grappled by the giant tentacle] t_0 = (Prop_73()) ; ! phrase 5 ! [5: now giant tentacle does not grapple x] Relation_NowSN1to1(t_0,p238_grappling,I473_giant_tentacle); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the grant fanatics of power boolean rule ): [ R_1943 ; ! phrase 1 ! [1: if healer of aite is dead and tormentor of aite is dead and defender of aite is dead begin] if (((((~~Adj_33_t1_v9(I478_healer_of_aite))))) && (((((~~Adj_33_t1_v9(I481_tormentor_of_aite))))) && ((((~~Adj_33_t1_v9(I484_defender_of_aite))))))) { ! phrase 2 ! [2: if fanatics power boolean is false begin] if (((((Global_Vars-->122) && true) == (0 && true)))) { ! phrase 3 ! [3: now fanatics power boolean is true] (Global_Vars-->122) = 1; ! phrase 4 ! [4: say ~Impressed with your prowess in combat, Aite grants you her favour! ([bold type]Power of the fanatics of Aite[roman type]: +4 attack, +4 defence, +20 health, +2 willpower, pray to Aite anywhere.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_391; ParaContent(); style bold; ParaContent(); print (PrintText) SC_392; ParaContent(); style roman; ParaContent(); print (PrintText) SC_393; ParaContent(); DivideParagraphPoint(); new_line; .L_Say83; .L_SayX74; ! phrase 5 ! [5: gain the power of the fanatics of aite] (PHR_1944_r27 ()); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the Nameless Horror kills all rule ): [ R_1995 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if the nameless horror is follower and the location of the nameless horror is not the location of the player begin] if (((((Adj_172_t1_v9(I499_nameless_horror))))) && (((~~(( LocationOf(I499_nameless_horror) == LocationOf(player) )))))) { ! phrase 2 ! [2: if the location of the nameless horror encloses more than one alive person begin] if ((Prop_74(, LocationOf(I499_nameless_horror) ))) { ! phrase 3 ! [3: let guy be nameless horror] t_0 = I499_nameless_horror; ! phrase 4 ! [4: while guy is nameless horror begin] while (((t_0 == I499_nameless_horror))) { ! phrase 5 ! [5: let guy be a random alive person enclosed by the location of nameless horror] t_0 = (Prop_75(, LocationOf(I499_nameless_horror) )) ; ! phrase 6 ! [6: end while] } ! phrase 7 ! [7: decrease health of guy by 100] WriteGProperty(OBJECT_TY, t_0,p14_health,GProperty(OBJECT_TY, t_0,p14_health) - 100); ! phrase 8 ! [8: if guy is dead begin] if ((((~~Adj_33_t1_v9(t_0))))) { ! phrase 9 ! [9: remove guy from play] RemoveFromPlay(t_0); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the aswang in bird-shape regenerates rule ): [ R_2035 ; ! phrase 1 ! [1: if as-shape of aswang is as-bird begin] if (((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))) { ! phrase 2 ! [2: if the location of the aswang is not the location of the player begin] if (((~~(( LocationOf(I513_aswang) == LocationOf(player) ))))) { ! phrase 3 ! [3: heal the aswang for 1 health] (PHR_960_r28 (I513_aswang,1)); ! phrase 4 ! [4: if health of the aswang is greater than 15 begin] if (((GProperty(9, I513_aswang,p14_health) > 15))) { ! phrase 5 ! [5: now aswang is follower] (Adj_172_t2_v9(I513_aswang)); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the smoke demon appears and disappears rule ): [ R_2048 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = room ; ! phrase 1 ! [1: repeat with place running through smoke-demoned rooms begin] for (t_0=Prop_76(0), t_1=Prop_76(t_0): t_0: t_0=t_1, t_1=Prop_76(t_1)) { ! phrase 2 ! [2: if the smoke timer of place is 0 begin] if (((GProperty(9, t_0,p54_smoke_timer) == 0))) { ! phrase 3 ! [3: now place is not smoke-demoned] (Adj_280_t3_v9(t_0)); ! phrase 4 ! [4: if the smoke demon is enclosed by place begin] if (((IndirectlyContains(t_0,I517_smoke_demon)))) { ! phrase 5 ! [5: have the smoke demon disappear from place] (PHR_2050_r29 (t_0)); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end repeat] } ! phrase 9 ! [9: if the smoke timer of location is greater than 0 begin] if (((GProperty(OBJECT_TY, real_location,p54_smoke_timer) > 0))) { ! phrase 10 ! [10: unless the location is smoke-demoned begin] if (~~((((Adj_280_t1_v9(real_location)))))) { ! phrase 11 ! [11: let n be the smoke timer of the location] t_0 = GProperty(OBJECT_TY, real_location,p54_smoke_timer); ! phrase 12 ! [12: if n is greater than 5 begin] if (((t_0 > 5))) { ! phrase 13 ! [13: if a random chance of n in 500 succeeds begin] if (( (GenerateRandomNumber(1, 500) <= t_0) )) { ! phrase 14 ! [14: now the location is smoke-demoned] (Adj_280_t2_v9(real_location)); ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end unless] } ! phrase 18 ! [18: if the location is smoke-demoned begin] if ((((Adj_280_t1_v9(real_location))))) { ! phrase 19 ! [19: unless the smoke demon is enclosed by the location begin] if (~~(((IndirectlyContains(real_location,I517_smoke_demon))))) { ! phrase 20 ! [20: if a random chance of 1 in 4 succeeds begin] if (( (GenerateRandomNumber(1, 4) <= 1) )) { ! phrase 21 ! [21: have the smoke demon appear] (PHR_2051_r30 ()); ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end unless] } ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Every turn ( this is the tweak smoke demon rule ): [ R_2049 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the smoke demon is enclosed by the location begin] if (((IndirectlyContains(real_location,I517_smoke_demon)))) { ! phrase 2 ! [2: let n be smoke timer of the location divided by 3] t_0 = (IntegerDivide(GProperty(OBJECT_TY, real_location,p54_smoke_timer),3)) ; ! phrase 3 ! [3: decrease n by 3] t_0 = t_0 - 3; ! phrase 4 ! [4: now melee of the smoke demon is n] WriteGProperty(9, I517_smoke_demon,p18_melee,t_0); ! phrase 5 ! [5: increase n by 6] t_0 = t_0 + 6; ! phrase 6 ! [6: now defence of the smoke demon is n] WriteGProperty(9, I517_smoke_demon,p19_defence,t_0); ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Every turn ( this is the victory rule ): [ R_2145 ; ! phrase 1 ! [1: if the player is victorious begin] if (((PHR_2144_r31 ()))) { ! phrase 2 ! [2: consider the victory message rules] ProcessRulebook(667); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Every turn ( this is the player death rule ): [ R_2149 ; ! phrase 1 ! [1: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 2 ! [2: unless the global attacker is the player begin] if (~~((((Global_Vars-->41) == player)))) { ! phrase 3 ! [3: end the game saying ~You were killed by [no dead property][the global attacker][dead property].~] deadflag=text_routine_95; story_complete=false; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: end the game saying ~You committed suicide. How unseemly!~] deadflag=SC_394; story_complete=false; ! phrase 6 ! [6: end unless] } ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last every turn ( this is the internal heat rule ): [ R_1226 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through internally-heated things begin] for (t_0=Prop_77(0), t_1=Prop_77(t_0): t_0: t_0=t_1, t_1=Prop_77(t_1)) { ! phrase 2 ! [2: if heat strength of item is less than internal heat of item begin] if (((GProperty(9, t_0,p50_heat_strength) < GProperty(9, t_0,p52_internal_heat)))) { ! phrase 3 ! [3: now heat strength of item is internal heat of item] WriteGProperty(9, t_0,p50_heat_strength,GProperty(9, t_0,p52_internal_heat)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last every turn ( this is the cooling rule ): [ R_1227 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through hot not flaming things begin] for (t_0=Prop_78(0), t_1=Prop_78(t_0): t_0: t_0=t_1, t_1=Prop_78(t_1)) { ! phrase 2 ! [2: unless item is not cooler and heat strength of item is 1 begin] if (~~((((~~(((Adj_203_t1_v9(t_0))))))) && (((GProperty(9, t_0,p50_heat_strength) == 1))))) { ! phrase 3 ! [3: if heat strength of item is greater than internal heat of item begin] if (((GProperty(9, t_0,p50_heat_strength) > GProperty(9, t_0,p52_internal_heat)))) { ! phrase 4 ! [4: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 5 ! [5: decrease heat strength of item by 1] WriteGProperty(9, t_0,p50_heat_strength,GProperty(9, t_0,p50_heat_strength) - 1); ! phrase 6 ! [6: if heat strength of item is 0 and item is visible begin] if ((((GProperty(9, t_0,p50_heat_strength) == 0))) && ((((Adj_3_t1_v9(t_0)))))) { ! phrase 7 ! [7: if item is a readied weapon begin] if (((t_0 ofclass K17_weapon) && ((Adj_103_t1_v9(t_0))))) { ! phrase 8 ! [8: say ~[The item] has cooled down completely.~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_395; new_line; .L_Say84; .L_SayX75; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end unless] } ! phrase 14 ! [14: now item is cooler] (Adj_203_t2_v9(t_0)); ! phrase 15 ! [15: end repeat] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Action-processing (B10_action_processing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/12 ! This is the announce items from multiple object lists rule: ! === which is equally specific with === ! Rule 2/12 ! This is the set pronouns from items from multiple object lists rule: ! === which is equally specific with === ! Rule 3/12 ! This is the before stage rule: ! --- now the mid-placed rules --- ! Rule 4/12 ! This is the update ambiguous pronouns for actions rule: ! >>> III - Action requirement >>> ! Rule 5/12: BASIC_VISIBILITY_R ! <<< III - Action requirement <<< ! Rule 6/12 ! This is the allow reaping faraway things rule: ! >>> III - Action requirement >>> ! Rule 7/12: CARRYING_REQUIREMENTS_R ! --- now the last-placed rules --- ! Rule 8/12 ! This is the instead stage rule: ! === which is equally specific with === ! Rule 9/12: REQUESTED_ACTIONS_REQUIRE_R ! === which is equally specific with === ! Rule 10/12: CARRY_OUT_REQUESTED_ACTIONS_R ! === which is equally specific with === ! Rule 11/12: DESCEND_TO_SPECIFIC_ACTION_R ! === which is equally specific with === ! Rule 12/12 ! This is the end action-processing in success rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! This is the announce items from multiple object lists rule: [ R_20 ; ! phrase 1 ! [1: if the current item from the multiple object list is not nothing , say ~[current item from the multiple object list]: [run paragraph on]~] if (((~~((multiple_object_item == nothing))))) { say__p=1;ParaContent(); print (PrintShortName) multiple_object_item; ParaContent(); print (PrintText) SC_396; ParaContent(); RunParagraphOn(); .L_Say85; .L_SayX76; } rfalse; ]; ! No specific request ! From the Standard Rules ! This is the set pronouns from items from multiple object lists rule: [ R_19 ; ! phrase 1 ! [1: if the current item from the multiple object list is not nothing , set pronouns from the current item from the multiple object list] if (((~~((multiple_object_item == nothing))))) { PronounNotice(multiple_object_item); } rfalse; ]; ! No specific request ! From the Standard Rules ! This is the before stage rule: [ R_21 ; ! phrase 1 ! [1: abide by the before rules] if (ProcessRulebook(20)) rtrue; rfalse; ]; ! No specific request ! From "Plurality" by Emily Short ! This is the update ambiguous pronouns for actions rule: [ R_945 ; ! phrase 1 ! [1: if the noun is a thing and the noun is ambiguously plural begin] if ((((noun ofclass K2_thing))) && ((((Adj_101_t1_v9(noun)))))) { ! phrase 2 ! [2: notice the plurality of the noun] PlugPlural(noun); ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if the second noun is a thing and the second noun is ambiguously plural begin] if ((((second ofclass K2_thing))) && ((((Adj_101_t1_v9(second)))))) { ! phrase 5 ! [5: notice the plurality of the second noun] PlugPlural(second); ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! This is the allow reaping faraway things rule: [ R_1827 ; ! phrase 1 ! [1: unless reaping , abide by the basic accessibility rule] if (~~((action ==##A110_reaping) && (actor==player))) { if (ProcessRulebook(BASIC_ACCESSIBILITY_R)) rtrue; } rfalse; ]; ! No specific request ! From the Standard Rules ! This is the instead stage rule: [ R_22 ; ! phrase 1 ! [1: abide by the instead rules] if (ProcessRulebook(21)) rtrue; rfalse; ]; ! No specific request ! From the Standard Rules ! This is the end action-processing in success rule: [ R_23 ; ! phrase 1 ! [1: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Setting action variables (B11_setting_action_variables) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! Rule for setting action variables when acting fast ( this is the acting fast actions are fast rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/5 ! Rule for setting action variables for going ( this is the standard set going variables rule ): ! === which is equally specific with === ! Rule 3/5 ! Setting action variables for looking ( this is the determine visibility ceiling rule ): ! === which is equally specific with === ! Rule 4/5 ! Setting action variables for hitting ( this is the reset hitting variables rule ): ! === which is equally specific with === ! Rule 5/5 ! Setting action variables for exiting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Rule for setting action variables when acting fast ( this is the acting fast actions are fast rule ): [ R_856 ; if (((((NAP_0()) && (actor==player))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_856, 856); ! phrase 1 ! [1: now the take no time boolean is true] (Global_Vars-->34) = 1; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_856, 856, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Rule for setting action variables for going ( this is the standard set going variables rule ): [ R_137 t_0 ! Local variable e.g. 'carriage' = vehicle t_1 ! Local variable e.g. 'target' = object t_2 ! Local variable e.g. '?-1,-1?' = object ; if ((action ==##Go)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_137, 137); ! phrase 1 ! [1: now the thing gone with is the item-pushed-between-rooms] (MStack-->MstVO(20007,4)) = move_pushing; ! phrase 2 ! [2: now the room gone from is the location of the actor] (MStack-->MstVO(20007,0)) = LocationOf(actor) ; ! phrase 3 ! [3: if the actor is in an enterable vehicle ( called the carriage ) , now the vehicle gone by is the carriage] if (((ContainerOf(actor) ofclass K14_vehicle) && (t_0=(ContainerOf(actor)), true) && ((Adj_74_t1_v9(ContainerOf(actor)))))) { (MStack-->MstVO(20007,3)) = t_0; } ! phrase 4 ! [4: let the target be nothing] t_1 = nothing; ! phrase 5 ! [5: if the noun is a direction begin] if (((noun ofclass K3_direction))) { ! phrase 6 ! [6: let direction d be the noun] t_2 = noun; ! phrase 7 ! [7: let the target be the room-or-door direction d from the room gone from] t_1 = (Resolver_2(t_2,(MStack-->MstVO(20007,0)),"source", 1948)); ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: if the noun is a door , let the target be the noun] if (((noun ofclass K4_door))) { t_1 = noun; } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if the target is a door begin] if (((t_1 ofclass K4_door))) { ! phrase 12 ! [12: now the door gone through is the target] (MStack-->MstVO(20007,2)) = t_1; ! phrase 13 ! [13: now the target is the other side of the target from the room gone from] t_1 = (Resolver_3(t_1,(MStack-->MstVO(20007,0)),"source", 1953)); ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: now the room gone to is the target] (MStack-->MstVO(20007,1)) = t_1; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_137, 137, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Setting action variables for looking ( this is the determine visibility ceiling rule ): [ R_171 ; if ((action ==##Look)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_171, 171); ! phrase 1 ! [1: if the actor is the player , calculate visibility ceiling at low level] if (((actor == player))) { FindVisibilityLevels(); } ! phrase 2 ! [2: now the visibility level count is the visibility ceiling count calculated] (MStack-->MstVO(20011,2)) = visibility_levels ; ! phrase 3 ! [3: now the visibility ceiling is the visibility ceiling calculated] (MStack-->MstVO(20011,3)) = visibility_ceiling ; ! phrase 4 ! [4: now the room-describing action is the looking action] (MStack-->MstVO(20011,0)) = ##Look; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_171, 171, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Setting action variables for hitting ( this is the reset hitting variables rule ): [ R_972 ; if ((action ==##A86_hitting)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_972, 972); ! phrase 1 ! [1: now the global attacker is the actor] (Global_Vars-->41) = actor; ! phrase 2 ! [2: now the global defender is the noun] (Global_Vars-->42) = noun; if (~~((Global_Vars-->42) ofclass K8_person)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->42), "now the global defender is the noun", "person");; ! phrase 3 ! [3: now the global attacker weapon is a random readied weapon enclosed by the actor] (Global_Vars-->43) = (Prop_79()) ; ! phrase 4 ! [4: now the global defender weapon is a random readied weapon enclosed by the noun] (Global_Vars-->44) = (Prop_80()) ; ! phrase 5 ! [5: have the actor start pressing the noun] (Resolver_4(actor,noun,"source", 258)); ! phrase 6 ! [6: now the attack strength is 0] (Global_Vars-->45) = 0; ! phrase 7 ! [7: now the attack damage is 0] (Global_Vars-->46) = 0; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_972, 972, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Setting action variables for exiting: [ R_159 ; if ((action ==##Exit)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_159, 159); ! phrase 1 ! [1: now the container exited from is the holder of the actor] (MStack-->MstVO(20009,0)) = (HolderOf(actor)) ; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_159, 159, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: specific action-processing (B12_specific_action_processi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/9: WORK_OUT_DETAILS_OF_SPECIFIC_R ! --- now the mid-placed rules --- ! Rule 2/9 ! A specific action-processing rule ( this is the investigate player's awareness before action rule ): ! === which is equally specific with === ! Rule 3/9 ! A specific action-processing rule ( this is the check stage rule ): ! === which is equally specific with === ! Rule 4/9 ! A specific action-processing rule ( this is the carry out stage rule ): ! === which is equally specific with === ! Rule 5/9 ! A specific action-processing rule ( this is the after stage rule ): ! === which is equally specific with === ! Rule 6/9 ! A specific action-processing rule ( this is the investigate player's awareness after action rule ): ! === which is equally specific with === ! Rule 7/9 ! A specific action-processing rule ( this is the report stage rule ): ! === which is equally specific with === ! Rule 8/9 ! A specific action-processing rule ( this is the after reporting stage rule ): ! --- now the last-placed rules --- ! Rule 9/9 ! The last specific action-processing rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! A specific action-processing rule ( this is the investigate player's awareness before action rule ): [ R_24 ; ! phrase 1 ! [1: consider the player's action awareness rules] ProcessRulebook(13); ! phrase 2 ! [2: if rule succeeded , now within the player's sight is true] if (( (RulebookSucceeded()) )) { (MStack-->MstVO(12,5)) = 1; } ! phrase 3 ! [3: otherwise now within the player's sight is false] else { (MStack-->MstVO(12,5)) = 0; } rfalse; ]; ! No specific request ! From the Standard Rules ! A specific action-processing rule ( this is the check stage rule ): [ R_25 ; ! phrase 1 ! [1: anonymously abide by the specific check rulebook] if (temporary_value = ProcessRulebook((MStack-->MstVO(12,2)))) { if (RulebookSucceeded()) ActRulebookSucceeds(temporary_value); else ActRulebookFails(temporary_value); return 2; } rfalse; ]; ! No specific request ! From the Standard Rules ! A specific action-processing rule ( this is the carry out stage rule ): [ R_26 ; ! phrase 1 ! [1: consider the specific carry out rulebook] ProcessRulebook((MStack-->MstVO(12,3))); rfalse; ]; ! No specific request ! From the Standard Rules ! A specific action-processing rule ( this is the after stage rule ): [ R_27 ; ! phrase 1 ! [1: if action in world is true , abide by the after rules] if (((((MStack-->MstVO(12,0)) && true) == (1 && true)))) { if (ProcessRulebook(24)) rtrue; } rfalse; ]; ! No specific request ! From the Standard Rules ! A specific action-processing rule ( this is the investigate player's awareness after action rule ): [ R_28 ; ! phrase 1 ! [1: if within the player's sight is false begin] if (((((MStack-->MstVO(12,5)) && true) == (0 && true)))) { ! phrase 2 ! [2: consider the player's action awareness rules] ProcessRulebook(13); ! phrase 3 ! [3: if rule succeeded , now within the player's sight is true] if (( (RulebookSucceeded()) )) { (MStack-->MstVO(12,5)) = 1; } ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From the Standard Rules ! A specific action-processing rule ( this is the report stage rule ): [ R_29 ; ! phrase 1 ! [1: if within the player's sight is true and action keeping silent is false , consider the specific report rulebook] if ((((((MStack-->MstVO(12,5)) && true) == (1 && true)))) && (((((MStack-->MstVO(12,1)) && true) == (0 && true))))) { ProcessRulebook((MStack-->MstVO(12,4))); } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! A specific action-processing rule ( this is the after reporting stage rule ): [ R_953 ; ! phrase 1 ! [1: if action in world is true begin] if (((((MStack-->MstVO(12,0)) && true) == (1 && true)))) { ! phrase 2 ! [2: abide by the after reporting rules] if (ProcessRulebook(431)) rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From the Standard Rules ! The last specific action-processing rule: [ R_30 ; ! phrase 1 ! [1: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: player's action awareness (B13_player_s_action_awarenes) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! A player's action awareness rule ( this is the player aware of his own actions rule ): ! === which is equally specific with === ! Rule 2/4 ! A player's action awareness rule ( this is the player aware of actions by visible actors rule ): ! === which is equally specific with === ! Rule 3/4 ! A player's action awareness rule ( this is the player aware of actions on visible nouns rule ): ! === which is equally specific with === ! Rule 4/4 ! A player's action awareness rule ( this is the player aware of actions on visible second nouns rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! A player's action awareness rule ( this is the player aware of his own actions rule ): [ R_31 ; ! phrase 1 ! [1: if the player is the actor , rule succeeds] if (((player == actor))) { RulebookSucceeds(); rtrue; } rfalse; ]; ! No specific request ! From the Standard Rules ! A player's action awareness rule ( this is the player aware of actions by visible actors rule ): [ R_32 ; ! phrase 1 ! [1: if the player is not the actor and the player can see the actor , rule succeeds] if ((((~~((player == actor))))) && (((TestVisibility(player,actor))))) { RulebookSucceeds(); rtrue; } rfalse; ]; ! No specific request ! From the Standard Rules ! A player's action awareness rule ( this is the player aware of actions on visible nouns rule ): [ R_33 ; ! phrase 1 ! [1: if the noun is a thing and the player can see the noun , rule succeeds] if ((((noun ofclass K2_thing))) && (((TestVisibility(player,noun))))) { RulebookSucceeds(); rtrue; } rfalse; ]; ! No specific request ! From the Standard Rules ! A player's action awareness rule ( this is the player aware of actions on visible second nouns rule ): [ R_34 ; ! phrase 1 ! [1: if the second noun is a thing and the player can see the second noun , rule succeeds] if ((((second ofclass K2_thing))) && (((TestVisibility(player,second))))) { RulebookSucceeds(); rtrue; } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Visibility (B17_visibility) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! The last visibility rule ( this is the can't act in the dark rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! The last visibility rule ( this is the can't act in the dark rule ): [ R_35 ; ! phrase 1 ! [1: if in darkness , rule succeeds] if (( (location==thedark) )) { RulebookSucceeds(); rtrue; } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Persuasion (B18_persuasion) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Persuasion rule for asking people to try doing something when the player is in Drawing Room: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Persuasion rule for asking people to try doing something when the player is in Drawing Room: [ R_1645 ; if ( (actor~=player) && (act_requester) && ((actor ofclass K8_person)) && (self=actor,true) && (((I416_drawing_room == ContainerOf(player))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1645, 1645); ! phrase 1 ! [1: if the location of the person asked is not the location of the player begin] if (((~~(( LocationOf(actor) == LocationOf(player) ))))) { ! phrase 2 ! [2: say ~It is only a drawing.~] say__p=1;ParaContent(); print (PrintText) SC_397; new_line; .L_Say86; .L_SayX77; ! phrase 3 ! [3: persuasion fails] RulebookFails(19, RBNO_5); rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1645, 1645, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Before (B20_before) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11 ! Before doing anything except examining or reaping in Drawing Room: ! >>> III.2.2 - Action/Where/Room Where Action Takes Place >>> ! Rule 2/11 ! Before applying something to a person ( this is the putting a salve on someone is risky rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 3/11 ! Before attacking the mirrors: ! === which is equally specific with === ! Rule 4/11 ! Before attacking the reflections: ! === which is equally specific with === ! Rule 5/11 ! Before reading the symbols of death: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 6/11 ! Before going when the player is ethereal: ! === which is equally specific with === ! Rule 7/11 ! Before attacking when Nomos counter is greater than 0: ! >>> III.4.1 - Action/How/What Happens >>> ! Rule 8/11 ! Before doing anything except attacking when Nomos bonus is true: ! >>> I - Number of aspects constrained >>> ! Rule 9/11 ! Before ethereal-forbidden: ! === which is equally specific with === ! Rule 10/11 ! Before ethereal-forbidden-second: ! >>> III.6.1 - Action/Name/Is This Named >>> ! Rule 11/11 ! Before doing anything ( this is the boots of wandering weirdness rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before doing anything except examining or reaping in Drawing Room: [ R_1644 ; if ((action ~=##A110_reaping or ##Examine) && (actor==player) && ((real_location == I416_drawing_room) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1644, 1644); ! phrase 1 ! [1: if the noun is a person and the location of the noun is not the location of the player begin] if ((((noun ofclass K8_person))) && (((~~(( LocationOf(noun) == LocationOf(player) )))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~It is only a drawing.~ instead] say__p=1;ParaContent(); print (PrintText) SC_397; new_line; rtrue; .L_Say87; .L_SayX78; rtrue; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if the second noun is a person and the location of the second noun is not the location of the player begin] if ((((second ofclass K8_person))) && (((~~(( LocationOf(second) == LocationOf(player) )))))) { ! phrase 6 ! [6: take no time] (PHR_853_r33 ()); ! phrase 7 ! [7: say ~It is only a drawing.~ instead] say__p=1;ParaContent(); print (PrintText) SC_397; new_line; rtrue; .L_Say88; .L_SayX79; rtrue; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: continue the action] rfalse; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1644, 1644, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Before applying something to a person ( this is the putting a salve on someone is risky rule ): [ R_1375 ; if ((action ==##A100_applying_it_to) && (actor==player) && ((noun ofclass K2_thing)) && ((second ofclass K8_person))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1375, 1375); ! phrase 1 ! [1: if the faction of the second noun hates the faction of the player begin] if ((((Relation_TestVtoV(GProperty(OBJECT_TY, second,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))) { ! phrase 2 ! [2: if player is not hidden begin] if (((~~(((Adj_221_t1_v9(player))))))) { ! phrase 3 ! [3: say ~The salve at the ready, you attempt to reach [the second noun].~] say__p=1;ParaContent(); print (PrintText) SC_398; ParaContent(); print (the) second; ParaContent(); print (PrintText) SC_310; new_line; .L_Say89; .L_SayX80; ! phrase 4 ! [4: now player is risky] (Adj_197_t2_v9(player)); ! phrase 5 ! [5: try the second noun hitting the player] TryAction(0, second, ##A86_hitting, player, 0);; ! phrase 6 ! [6: now player is not risky] (Adj_197_t3_v9(player)); ! phrase 7 ! [7: if player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 8 ! [8: stop the action] rtrue; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: now player is not hidden] (Adj_221_t3_v9(player)); ! phrase 12 ! [12: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1375, 1375, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before attacking the mirrors: [ R_1545 ; if ((action ==##Attack) && (actor==player) && ((noun == I379_mirrors) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1545, 1545); ! phrase 1 ! [1: say ~You smash one of the mirrors -- but there are only further mirrors behind it. After a few seconds, the shards of glass start moving up and reform the mirror. Not a crack can be seen.~ instead] say__p=1;ParaContent(); print (PrintText) SC_399; new_line; rtrue; .L_Say90; .L_SayX81; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1545, 1545, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before attacking the reflections: [ R_1546 ; if ((action ==##Attack) && (actor==player) && ((noun == I380_reflections) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1546, 1546); ! phrase 1 ! [1: try attacking the mirrors instead] TryAction(0, player, ##Attack, I379_mirrors, 0);; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1546, 1546, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before reading the symbols of death: [ R_1602 t_0 ! Local variable e.g. '?-1,-1?' = number ; if ((action ==##A102_reading) && (actor==player) && ((noun == I399_symbols_of_death) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1602, 1602); ! phrase 1 ! [1: if symbols-of-death-number is 0 begin] if ((((Global_Vars-->108) == 0))) { ! phrase 2 ! [2: now symbols-of-death-number is 1] (Global_Vars-->108) = 1; ! phrase 3 ! [3: let n be a random number between 1 and 5] t_0 = R_DecimalNumber(1, 5) ; ! phrase 4 ! [4: if n is less than 3 begin] if (((t_0 < 3))) { ! phrase 5 ! [5: say ~You either fail to pronounce the symbols correctly, or the spell has lost its power, for there is no effect.~] say__p=1;ParaContent(); print (PrintText) SC_400; new_line; .L_Say91; .L_SayX82; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if n is 3 begin] if (((t_0 == 3))) { ! phrase 8 ! [8: unless the player is undead begin] if (~~(((player.p111_faction == I158_undead)))) { ! phrase 9 ! [9: say ~As you read the symbols, your flesh starts to rot and most of your vital functions cease. You have been turned into a ghoul!~] say__p=1;ParaContent(); print (PrintText) SC_401; new_line; .L_Say92; .L_SayX83; ! phrase 10 ! [10: ghoulify the player] (PHR_1270_r34 ()); ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~You feel your flesh crawl.~] say__p=1;ParaContent(); print (PrintText) SC_402; new_line; .L_Say93; .L_SayX84; ! phrase 13 ! [13: end unless] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: if n is 4 begin] if (((t_0 == 4))) { ! phrase 16 ! [16: unless the player is hidden begin] if (~~((((Adj_221_t1_v9(player)))))) { ! phrase 17 ! [17: now the player is hidden] (Adj_221_t2_v9(player)); ! phrase 18 ! [18: say ~As you speak the spell, you blend into the shadows.~] say__p=1;ParaContent(); print (PrintText) SC_403; new_line; .L_Say94; .L_SayX85; ! phrase 19 ! [19: otherwise] } else { ! phrase 20 ! [20: say ~You feel mysterious.~] say__p=1;ParaContent(); print (PrintText) SC_404; new_line; .L_Say95; .L_SayX86; ! phrase 21 ! [21: end unless] } ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: if n is 5 begin] if (((t_0 == 5))) { ! phrase 24 ! [24: say ~As you read the symbols of death, you feel an immense power surge through your body. It is either intensely hot or inhumanly cold; the difference is impossible to tell. You finish reading the spell, and wonder what you have been given, and whether it is a blessing or a curse.~] say__p=1;ParaContent(); print (PrintText) SC_405; new_line; .L_Say96; .L_SayX87; ! phrase 25 ! [25: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 26 ! [26: now the player is death-blessed] (Adj_213_t2_v9(player)); ! phrase 27 ! [27: otherwise] } else { ! phrase 28 ! [28: now the player is death-cursed] (Adj_215_t2_v9(player)); ! phrase 29 ! [29: end if] } ! phrase 30 ! [30: end if] } ! phrase 31 ! [31: otherwise] } else { ! phrase 32 ! [32: say ~You read the symbols once again, but nothing happens.~] say__p=1;ParaContent(); print (PrintText) SC_406; new_line; .L_Say97; .L_SayX88; ! phrase 33 ! [33: end if] } ! phrase 34 ! [34: stop the action] rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1602, 1602, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Before going when the player is ethereal: [ R_1345 t_0 ! Local variable e.g. 'x' = number t_1 ! Local variable e.g. 'y' = number t_2 ! Local variable e.g. 'z' = number t_3 ! Local variable e.g. '?-1,-1?' = object ; if ((action ==##Go) && (actor==player) && (self=actor,true) && ((((Adj_231_t1_v9(player)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1345, 1345); ! phrase 1 ! [1: let x be the x noun of location] t_0 = (Resolver_5(noun,real_location,"source", 406)); ! phrase 2 ! [2: let y be the y noun of location] t_1 = (Resolver_6(noun,real_location,"source", 407)); ! phrase 3 ! [3: let z be the z noun of location] t_2 = (Resolver_7(noun,real_location,"source", 408)); ! phrase 4 ! [4: if the space at x by y by z is free begin] if (((PHR_1094_r38 (t_0,t_1,t_2)))) { ! phrase 5 ! [5: say ~You walk through rock.~] say__p=1;ParaContent(); print (PrintText) SC_407; new_line; .L_Say98; .L_SayX89; ! phrase 6 ! [6: unless player is in moving through solid rock begin] if (~~(((I186_moving_through_solid_ro == ContainerOf(player))))) { ! phrase 7 ! [7: move player to moving through solid rock] MoveObject(player, I186_moving_through_solid_ro, 0, false); ! phrase 8 ! [8: end unless] } ! phrase 9 ! [9: now x-coordinate of moving through solid rock is x] WriteGProperty(9, I186_moving_through_solid_ro,p28_x_coordinate,t_0); ! phrase 10 ! [10: now y-coordinate of moving through solid rock is y] WriteGProperty(9, I186_moving_through_solid_ro,p29_y_coordinate,t_1); ! phrase 11 ! [11: now z-coordinate of moving through solid rock is z] WriteGProperty(9, I186_moving_through_solid_ro,p30_z_coordinate,t_2); ! phrase 12 ! [12: stop the action] rtrue; ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: let item be the room at x by y by z] t_3 = (PHR_1095_r39 (t_0,t_1,t_2)); ! phrase 15 ! [15: if item is the room noun from the location begin] if (((t_3 == (Resolver_8(noun,real_location,"source", 419))))) { ! phrase 16 ! [16: continue the action] rfalse; ! phrase 17 ! [17: otherwise] } else { ! phrase 18 ! [18: say ~You walk through the walls.~] say__p=1;ParaContent(); print (PrintText) SC_408; new_line; .L_Say99; .L_SayX90; ! phrase 19 ! [19: move player to item] MoveObject(player, t_3, 0, false); ! phrase 20 ! [20: stop the action] rtrue; ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1345, 1345, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before attacking when Nomos counter is greater than 0: [ R_1575 t_0 ! Local variable e.g. 'N' = number t_1 ! Local variable e.g. '?-1,-1?' = object ; if ((action ==##Attack) && (actor==player) && (self=actor,true) && ((((Global_Vars-->101) > 0)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1575, 1575); ! phrase 1 ! [1: say ~Deciding to break the command of Nomos, you plan on attacking [the noun]. However, you find yourself ~] say__p=1;ParaContent(); print (PrintText) SC_409; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_410; .L_Say100; .L_SayX91; ! phrase 2 ! [2: let n be a random number between 1 and 5] t_0 = R_DecimalNumber(1, 5) ; ! phrase 3 ! [3: if n is begin] switch(t_0) { ! phrase 4 ! [4: -- 1] 1: ! phrase 5 ! [5: say ~doing nothing instead.~] say__p=1;ParaContent(); print (PrintText) SC_411; new_line; .L_Say101; .L_SayX92; ! phrase 6 ! [6: try waiting instead] TryAction(0, player, ##Wait, 0, 0);; rtrue; ! phrase 7 ! [7: -- 2] ; 2: ! phrase 8 ! [8: say ~concentrating instead.~] say__p=1;ParaContent(); print (PrintText) SC_412; new_line; .L_Say102; .L_SayX93; ! phrase 9 ! [9: try concentrating instead] TryAction(0, player, ##A88_concentrating, 0, 0);; rtrue; ! phrase 10 ! [10: -- 3] ; 3: ! phrase 11 ! [11: if the player carries at least one thing begin] if ((Prop_81())) { ! phrase 12 ! [12: let x be a random thing carried by the player] t_1 = (Prop_82()) ; ! phrase 13 ! [13: say ~dropping [the X] instead.~] say__p=1;ParaContent(); print (PrintText) SC_413; ParaContent(); print (the) t_1; ParaContent(); print (PrintText) SC_414; new_line; .L_Say103; .L_SayX94; ! phrase 14 ! [14: try dropping x instead] TryAction(0, player, ##Drop, t_1, 0);; rtrue; ! phrase 15 ! [15: otherwise] } else { ! phrase 16 ! [16: say ~praising the god instead.~ instead] say__p=1;ParaContent(); print (PrintText) SC_415; new_line; rtrue; .L_Say104; .L_SayX95; rtrue; ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: -- 4] ; 4: ! phrase 19 ! [19: say ~speaking a language you have never heard instead.~ instead] say__p=1;ParaContent(); print (PrintText) SC_416; new_line; rtrue; .L_Say105; .L_SayX96; rtrue; ! phrase 20 ! [20: -- 5] ; 5: ! phrase 21 ! [21: say ~contemplating the inevitability of Death instead.~ instead] say__p=1;ParaContent(); print (PrintText) SC_417; new_line; rtrue; .L_Say106; .L_SayX97; rtrue; ! phrase 22 ! [22: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1575, 1575, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before doing anything except attacking when Nomos bonus is true: [ R_1574 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_2(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_2 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = object ; if ((action ~=##Attack) && (actor==player) && (self=actor,true) && (((((Global_Vars-->103) && true) == (1 && true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1574, 1574); ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: if at least one hostile alive person is enclosed by the location begin] if ((Prop_83())) { ! phrase 3 ! [3: let x be a random hostile person enclosed by the location] t_0 = (Prop_84()) ; ! phrase 4 ! [4: say ~You plan on [current action], but find yourself attacking [the X] instead.~] say__p=1;ParaContent(); print (PrintText) SC_418; ParaContent(); print (STORED_ACTION_TY_Say) STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0))) ; ParaContent(); print (PrintText) SC_419; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_414; new_line; .L_Say107; .L_SayX98; ! phrase 5 ! [5: try attacking x instead] TryAction(0, player, ##Attack, t_0, 0);; rtrue; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: say ~You plan on [current action], but find your body attacking itself instead!~] say__p=1;ParaContent(); print (PrintText) SC_418; ParaContent(); print (STORED_ACTION_TY_Say) STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1))) ; ParaContent(); print (PrintText) SC_420; new_line; .L_Say108; .L_SayX99; ! phrase 8 ! [8: try the player hitting the player instead] TryAction(0, player, ##A86_hitting, player, 0);; rtrue; ! phrase 9 ! [9: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 10 ! [10: end the game saying ~Nomos is not to be toyed with.~] deadflag=SC_421; story_complete=false; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1574, 1574, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Before ethereal-forbidden: [ R_1338 ; if ((NAP_1()) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1338, 1338); ! phrase 1 ! [1: if the player is ethereal begin] if ((((Adj_231_t1_v9(player))))) { ! phrase 2 ! [2: unless the noun is radiance begin] if (~~(((noun.p180_material == I176_radiance)))) { ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You cannot do that while you are ethereal.~ instead] say__p=1;ParaContent(); print (PrintText) SC_422; new_line; rtrue; .L_Say109; .L_SayX100; rtrue; ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1338, 1338, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Before ethereal-forbidden-second: [ R_1339 ; if ((NAP_2()) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1339, 1339); ! phrase 1 ! [1: if the player is ethereal begin] if ((((Adj_231_t1_v9(player))))) { ! phrase 2 ! [2: unless the second noun is radiance begin] if (~~(((second.p180_material == I176_radiance)))) { ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You cannot do that while you are ethereal.~ instead] say__p=1;ParaContent(); print (PrintText) SC_422; new_line; rtrue; .L_Say110; .L_SayX101; rtrue; ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1339, 1339, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Before doing anything ( this is the boots of wandering weirdness rule ): [ R_1493 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = object t_2 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player)) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1493, 1493); ! phrase 1 ! [1: if the player wears the boots of wandering and a random chance of 1 in 40 succeeds begin] if ((((player == WearerOf(I350_boots_of_wandering)))) && (( (GenerateRandomNumber(1, 40) <= 1) ))) { ! phrase 2 ! [2: if at least one room is adjacent to the location of the player begin] if ((Prop_85(, LocationOf(player) ))) { ! phrase 3 ! [3: let place2 be the location of the player] t_0 = LocationOf(player) ; ! phrase 4 ! [4: let place be a random room which is adjacent to place2] t_1 = (Prop_86(,t_0)) ; ! phrase 5 ! [5: let way be the direction from the location of the player to place] t_2 = (Resolver_0( LocationOf(player) ,t_1,"source", 1607)); ! phrase 6 ! [6: say ~Before you can do anything, the [bold type]boots of wandering[roman type] attempt to run [way]!~] say__p=1;ParaContent(); print (PrintText) SC_423; ParaContent(); style bold; ParaContent(); print (PrintText) SC_424; ParaContent(); style roman; ParaContent(); print (PrintText) SC_425; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_426; new_line; .L_Say111; .L_SayX102; ! phrase 7 ! [7: now forced-action is true] (Global_Vars-->86) = 1; ! phrase 8 ! [8: try going way instead] TryAction(0, player, ##Go, t_2, 0);; rtrue; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1493, 1493, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Instead (B21_instead) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/86 ! Instead of going down in Bridge of Doom: ! === which is equally specific with === ! Rule 2/86 ! Instead of going inside in Portal of Smoke: ! === which is equally specific with === ! Rule 3/86 ! Instead of going outside in Elemental Plane of Smoke: ! >>> III.2.2 - Action/Where/Room Where Action Takes Place >>> ! Rule 4/86 ! Instead of examining rust spores when the location is rust-spored: ! === which is equally specific with === ! Rule 5/86 ! Instead of taking rust spores when the location is rust-spored: ! === which is equally specific with === ! Rule 6/86 ! Instead of examining clouds of smoke when the smoke timer of the location is greater than 0: ! >>> III.4.1 - Action/How/What Happens >>> ! Rule 7/86 ! Instead of doing anything with clouds of smoke when the smoke timer of the location is less than 1: ! >>> I - Number of aspects constrained >>> ! Rule 8/86 ! Instead of praying in Temple of Aite ( this is the Aite prayer rule ): ! === which is equally specific with === ! Rule 9/86 ! Instead of praying in Temple of Nomos: ! === which is equally specific with === ! Rule 10/86 ! Instead of praying in Temple of Sul: ! === which is equally specific with === ! Rule 11/86 ! Instead of praying in the Temple of Isatzo: ! === which is equally specific with === ! Rule 12/86 ! Instead of smelling in the Quartering Room: ! === which is equally specific with === ! Rule 13/86 ! Instead of digging in Elemental Plane of Smoke: ! === which is equally specific with === ! Rule 14/86 ! Instead of going in Elemental Plane of Smoke: ! === which is equally specific with === ! Rule 15/86 ! Instead of exiting in Elemental Plane of Smoke: ! >>> III.2.2 - Action/Where/Room Where Action Takes Place >>> ! Rule 16/86 ! Instead of applying unguentum argenti to an alive iron person: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 17/86 ! Instead of applying unguentum argenti to an iron weapon: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 18/86 ! Instead of applying unguentum argenti to an iron thing: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 19/86 ! Instead of throwing a grenade at something: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 20/86 ! Instead of touching clouds of smoke: ! === which is equally specific with === ! Rule 21/86 ! Instead of taking clouds of smoke: ! === which is equally specific with === ! Rule 22/86 ! Instead of throwing the Blessed Grenade: ! === which is equally specific with === ! Rule 23/86 ! Instead of readying the rod of the master builder: ! === which is equally specific with === ! Rule 24/86 ! Instead of eating Drakul's lifeblood: ! === which is equally specific with === ! Rule 25/86 ! Instead of drinking Drakul's lifeblood: ! === which is equally specific with === ! Rule 26/86 ! Instead of reading the tome of transmutation: ! === which is equally specific with === ! Rule 27/86 ! Instead of attacking the radiant images: ! === which is equally specific with === ! Rule 28/86 ! Instead of attacking the statue of Nomos: ! === which is equally specific with === ! Rule 29/86 ! Instead of climbing the statue of Nomos: ! === which is equally specific with === ! Rule 30/86 ! Instead of attacking the statue of Aite: ! === which is equally specific with === ! Rule 31/86 ! Instead of touching the statue of Aite: ! === which is equally specific with === ! Rule 32/86 ! Instead of climbing the statue of Aite: ! === which is equally specific with === ! Rule 33/86 ! Instead of taking the pile of fragments: ! === which is equally specific with === ! Rule 34/86 ! Instead of attacking the statue of Sul: ! === which is equally specific with === ! Rule 35/86 ! Instead of touching the statue of Sul: ! === which is equally specific with === ! Rule 36/86 ! Instead of climbing the statue of Sul: ! === which is equally specific with === ! Rule 37/86 ! Instead of attacking the statue of Isatzo: ! === which is equally specific with === ! Rule 38/86 ! Instead of touching the statue of Isatzo: ! === which is equally specific with === ! Rule 39/86 ! Instead of climbing the statue of Isatzo: ! === which is equally specific with === ! Rule 40/86 ! Instead of taking the ruined tombs: ! === which is equally specific with === ! Rule 41/86 ! Instead of entering the sarcophagus: ! === which is equally specific with === ! Rule 42/86 ! Instead of climbing the staircase: ! === which is equally specific with === ! Rule 43/86 ! Instead of opening the pipes: ! === which is equally specific with === ! Rule 44/86 ! Instead of closing the pipes: ! === which is equally specific with === ! Rule 45/86 ! Instead of turning the big wheel: ! === which is equally specific with === ! Rule 46/86 ! Instead of pushing the wheel: ! === which is equally specific with === ! Rule 47/86 ! Instead of pulling the wheel: ! === which is equally specific with === ! Rule 48/86 ! Instead of switching on the pipes: ! === which is equally specific with === ! Rule 49/86 ! Instead of switching off the pipes: ! === which is equally specific with === ! Rule 50/86 ! Instead of entering the huge magical portal: ! === which is equally specific with === ! Rule 51/86 ! Instead of entering the huge empty portal: ! === which is equally specific with === ! Rule 52/86 ! Instead of taking the hundreds of books: ! === which is equally specific with === ! Rule 53/86 ! Instead of reading the hundreds of books: ! === which is equally specific with === ! Rule 54/86 ! Instead of burning the hundreds of books: ! === which is equally specific with === ! Rule 55/86 ! Instead of examining the fascinating drawing: ! === which is equally specific with === ! Rule 56/86 ! Instead of taking the large pile of body parts: ! === which is equally specific with === ! Rule 57/86 ! Instead of searching the large pile of body parts: ! === which is equally specific with === ! Rule 58/86 ! Instead of smelling putrefying arm: ! === which is equally specific with === ! Rule 59/86 ! Instead of entering the portal to the elemental plane of smoke: ! === which is equally specific with === ! Rule 60/86 ! Instead of smelling the lair of the imp: ! === which is equally specific with === ! Rule 61/86 ! Instead of switching on the teleportation beacon: ! === which is equally specific with === ! Rule 62/86 ! Instead of switching off the teleportation beacon: ! === which is equally specific with === ! Rule 63/86 ! Instead of climbing the thorny bushes: ! === which is equally specific with === ! Rule 64/86 ! Instead of entering the thorny bushes: ! === which is equally specific with === ! Rule 65/86 ! Instead of taking the thorny bushes: ! === which is equally specific with === ! Rule 66/86 ! Instead of entering the portal to Kerkerkruip: ! >>> III.4.1 - Action/How/What Happens >>> ! Rule 67/86 ! Instead of attacking or cutting or touching the fascinating drawing: ! === which is equally specific with === ! Rule 68/86 ! Instead of turning or pushing or pulling the teleportation beacon: ! >>> III.4.1 - Action/How/What Happens >>> ! Rule 69/86 ! Instead of doing anything with rust spores: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 70/86 ! Instead of eating a package of ment ( this is the ment cannot be eaten rule ): ! === which is equally specific with === ! Rule 71/86 ! Instead of opening an essence: ! === which is equally specific with === ! Rule 72/86 ! Instead of drinking an essence: ! === which is equally specific with === ! Rule 73/86 ! Instead of throwing a flash grenade: ! === which is equally specific with === ! Rule 74/86 ! Instead of throwing a rust grenade: ! === which is equally specific with === ! Rule 75/86 ! Instead of throwing a smoke grenade: ! === which is equally specific with === ! Rule 76/86 ! Instead of throwing a fragmentation grenade: ! === which is equally specific with === ! Rule 77/86 ! Instead of eating a rotting limb: ! === which is equally specific with === ! Rule 78/86 ! Instead of taking a rotting limb: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 79/86 ! Instead of asking something for: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 80/86 ! Instead of the Nameless Horror waiting: ! >>> III.3.3 - Action/What/Actor Performing Action >>> ! Rule 81/86 ! Instead of smelling when the rotting corpse is in the location: ! >>> I - Number of aspects constrained >>> ! Rule 82/86 ! Instead of shorter going to: ! === which is equally specific with === ! Rule 83/86 ! Instead of singing: ! === which is equally specific with === ! Rule 84/86 ! Instead of answering that: ! === which is equally specific with === ! Rule 85/86 ! Instead of telling about: ! === which is equally specific with === ! Rule 86/86 ! Instead of asking about: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of going down in Bridge of Doom: [ R_1565 ; if ((action ==##Go) && (actor==player) && ((noun == I55_down) && (true)) && ((real_location == I384_bridge_of_doom) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1565, 1565); ! phrase 1 ! [1: try entering the seething lake of lava instead] TryAction(0, player, ##Enter, I386_seething_lake_of_lava, 0);; rtrue; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1565, 1565, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of going inside in Portal of Smoke: [ R_1660 ; if ((action ==##Go) && (actor==player) && ((noun == in_obj) && (true)) && ((real_location == I425_portal_of_smoke) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1660, 1660); ! phrase 1 ! [1: try entering the portal to the elemental plane of smoke] TryAction(0, player, ##Enter, I426_portal_to_the_elemental, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1660, 1660, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Events and Specials" by Victor Gijsbers ! Instead of going outside in Elemental Plane of Smoke: [ R_2073 ; if ((action ==##Go) && (actor==player) && ((noun == out_obj) && (true)) && ((real_location == I521_elemental_plane_of_smok) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2073, 2073); ! phrase 1 ! [1: try exiting] TryAction(0, player, ##Exit, 0, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2073, 2073, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Instead of examining rust spores when the location is rust-spored: [ R_1240 ; if ((action ==##Examine) && (actor==player) && ((noun == I179_rust_spores) && (true)) && (self=actor,true) && ((((Adj_207_t1_v9(real_location)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1240, 1240); ! phrase 1 ! [1: say ~These small brown flaked look innocent enough, but they corrode iron faster than one would think possible.~] say__p=1;ParaContent(); print (PrintText) SC_427; new_line; .L_Say112; .L_SayX103; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1240, 1240, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Instead of taking rust spores when the location is rust-spored: [ R_1241 ; if ((action ==##Take) && (actor==player) && ((noun == I179_rust_spores) && (true)) && (self=actor,true) && ((((Adj_207_t1_v9(real_location)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1241, 1241); ! phrase 1 ! [1: say ~You attempt to take some of the rust spores, but they are blown out of your hand as you close it.~] say__p=1;ParaContent(); print (PrintText) SC_428; new_line; .L_Say113; .L_SayX104; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1241, 1241, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Instead of examining clouds of smoke when the smoke timer of the location is greater than 0: [ R_1324 ; if ((action ==##Examine) && (actor==player) && ((noun == I185_clouds_of_smoke) && (true)) && (self=actor,true) && (((GProperty(OBJECT_TY, real_location,p54_smoke_timer) > 0)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1324, 1324); ! phrase 1 ! [1: say ~The smoke makes it harder to see clearly. (All sighted creatures receive a -[smoke penalty of the location] penalty on their attacks.)~] say__p=1;ParaContent(); print (PrintText) SC_429; ParaContent(); print (say__n=(Resolver_9(real_location,"source", 1))); ParaContent(); print (PrintText) SC_430; new_line; .L_Say114; .L_SayX105; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1324, 1324, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Instead of doing anything with clouds of smoke when the smoke timer of the location is less than 1: [ R_1321 ; if ( (actor==player) && (noun) && (noun == inp1) && ((noun == I185_clouds_of_smoke) && (true)) && (self=actor,true) && (((GProperty(OBJECT_TY, real_location,p54_smoke_timer) < 1)))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1321, 1321); ! phrase 1 ! [1: say ~This place is free of smoke.~] say__p=1;ParaContent(); print (PrintText) SC_431; new_line; .L_Say115; .L_SayX106; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1321, 1321, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of praying in Temple of Aite ( this is the Aite prayer rule ): [ R_1584 ; if ((action ==##A136_praying) && (actor==player) && ((real_location == I389_temple_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1584, 1584); ! phrase 1 ! [1: do the aite prayer] (PHR_1585_r40 ()); RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1584, 1584, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of praying in Temple of Nomos: [ R_1571 ; if ((action ==##A136_praying) && (actor==player) && ((real_location == I387_temple_of_nomos) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1571, 1571); ! phrase 1 ! [1: if the nomos counter is greater than 0 begin] if ((((Global_Vars-->101) > 0))) { ! phrase 2 ! [2: say ~You pray again, even though Nomos has already given you his decree. Will your iniquity go unpunished?~] say__p=1;ParaContent(); print (PrintText) SC_432; new_line; .L_Say116; .L_SayX107; ! phrase 3 ! [3: if nomos wrath counter is 0 begin] if ((((Global_Vars-->102) == 0))) { ! phrase 4 ! [4: now nomos wrath counter is a random number between 5 and 50] (Global_Vars-->102) = R_DecimalNumber(5, 50) ; ! phrase 5 ! [5: if a random chance of 1 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 1) )) { ! phrase 6 ! [6: now nomos wrath counter is 0] (Global_Vars-->102) = 0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: now nomos counter is a random number between 1 and 5] (Global_Vars-->101) = R_DecimalNumber(1, 5) ; ! phrase 11 ! [11: say ~A deep voice inside your head speaks: 'You will attack [Nomos counter] turns from now. The law will be with you.'~] say__p=1;ParaContent(); print (PrintText) SC_433; ParaContent(); print (say__n=(Global_Vars-->101)); ParaContent(); print (PrintText) SC_434; new_line; .L_Say117; .L_SayX108; ! phrase 12 ! [12: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1571, 1571, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of praying in Temple of Sul: [ R_1595 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD4_list_of_things); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_3(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_3 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = thing ; if ((action ==##A136_praying) && (actor==player) && ((real_location == I391_temple_of_sul) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1595, 1595); ! phrase 1 ! [1: unless the statue of sul is in the temple of sul begin] if (~~(((I391_temple_of_sul == ContainerOf(I392_statue_of_sul))))) { ! phrase 2 ! [2: say ~Praying has little effect, now that the statue has been destroyed.~] say__p=1;ParaContent(); print (PrintText) SC_435; new_line; .L_Say118; .L_SayX109; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: unless the maximum prayers to sul is greater than 0 begin] if (~~((((Global_Vars-->106) > 0)))) { ! phrase 5 ! [5: say ~You pray, but there is no answer.~] say__p=1;ParaContent(); print (PrintText) SC_436; new_line; .L_Say119; .L_SayX110; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: if the player has at least one cursed corruptible thing begin] if ((Prop_87())) { ! phrase 8 ! [8: let k be a list of things] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 9 ! [9: repeat with item running through cursed corruptible things had by the player begin] for (t_1=Prop_88(0), t_2=Prop_88(t_1): t_1: t_1=t_2, t_2=Prop_88(t_2)) { ! phrase 10 ! [10: now item is not cursed] (Adj_256_t3_v9(t_1)); ! phrase 11 ! [11: add item to k] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: say ~Sul uncurses [K with definite articles].~] say__p=1;ParaContent(); print (PrintText) SC_437; ParaContent(); LIST_OF_TY_Say(t_0, 2); ParaContent(); print (PrintText) SC_310; new_line; .L_Say120; .L_SayX111; ! phrase 14 ! [14: decrease maximum prayers to sul by 1] (Global_Vars-->106) = (Global_Vars-->106) - 1; ! phrase 15 ! [15: otherwise if the player has at least one cursed thing] } else if ((Prop_89())) { ! phrase 16 ! [16: say ~Unfortunately, Sul cannot help you.~] say__p=1;ParaContent(); print (PrintText) SC_438; new_line; .L_Say121; .L_SayX112; ! phrase 17 ! [17: otherwise] } else { ! phrase 18 ! [18: say ~Sul is displeased with your spurious prayer!~] say__p=1;ParaContent(); print (PrintText) SC_439; new_line; .L_Say122; .L_SayX113; ! phrase 19 ! [19: now maximum prayers to sul is 0] (Global_Vars-->106) = 0; ! phrase 20 ! [20: if the player has at least one corruptible not cursed thing begin] if ((Prop_90())) { ! phrase 21 ! [21: let item be a random corruptible not cursed thing had by the player] t_0 = (Prop_91()) ; ! phrase 22 ! [22: now item is cursed] (Adj_256_t2_v9(t_0)); ! phrase 23 ! [23: now item is curse-identified] (Adj_258_t2_v9(t_0)); ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end unless] } ! phrase 27 ! [27: end unless] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1595, 1595, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of praying in the Temple of Isatzo: [ R_1600 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = object ; if ((action ==##A136_praying) && (actor==player) && ((real_location == I394_temple_of_isatzo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1600, 1600); ! phrase 1 ! [1: if not hate is present begin] if (~~(((PHR_833_r16 ())))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~There is nothing for Isatzo to balance here -- you must be engaged in a fight.~] say__p=1;ParaContent(); print (PrintText) SC_440; new_line; .L_Say123; .L_SayX114; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: if isatzo time-out is greater than 0 begin] if ((((Global_Vars-->107) > 0))) { ! phrase 6 ! [6: take no time] (PHR_853_r33 ()); ! phrase 7 ! [7: say ~The time for a new intervention by Isatzo has not yet come.~] say__p=1;ParaContent(); print (PrintText) SC_441; new_line; .L_Say124; .L_SayX115; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: now isatzo time-out is a random number between 2 and 10] (Global_Vars-->107) = R_DecimalNumber(2, 10) ; ! phrase 10 ! [10: let guy be the player] t_0 = player; ! phrase 11 ! [11: while the faction of guy does not hate the faction of the player begin] while (((~~(((Relation_TestVtoV(GProperty(OBJECT_TY, t_0,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))))) { ! phrase 12 ! [12: let guy be a random person enclosed by the location] t_0 = (Prop_92()) ; ! phrase 13 ! [13: end while] } ! phrase 14 ! [14: let m be a random number between 1 and 4] t_1 = R_DecimalNumber(1, 4) ; ! phrase 15 ! [15: if m is 1 begin] if (((t_1 == 1))) { ! phrase 16 ! [16: let n be concentration of guy + concentration of player] t_2 = (GProperty(OBJECT_TY, t_0,p26_concentration)+GProperty(9, player,p26_concentration)) ; ! phrase 17 ! [17: increase n by 1] t_2 = t_2 + 1; ! phrase 18 ! [18: now n is n divided by 2] t_2 = (IntegerDivide(t_2,2)) ; ! phrase 19 ! [19: now concentration of guy is n] WriteGProperty(OBJECT_TY, t_0,p26_concentration,t_2); ! phrase 20 ! [20: now concentration of the player is n] WriteGProperty(9, player,p26_concentration,t_2); ! phrase 21 ! [21: say ~Isatzo sets your concentration and that of [the guy] to [if n is 0]none[otherwise if n is 1]mild[otherwise if n is 2]medium[otherwise if n is 3]maximal[end if].~] say__p=1;ParaContent(); print (PrintText) SC_442; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_443; if (~~((((t_2 == 0))))) jump L_Say125; ParaContent(); print (PrintText) SC_444; ParaContent(); jump L_SayX116; .L_Say125; if (~~((((t_2 == 1))))) jump L_Say126; ParaContent(); print (PrintText) SC_445; ParaContent(); jump L_SayX116; .L_Say126; if (~~((((t_2 == 2))))) jump L_Say127; ParaContent(); print (PrintText) SC_446; ParaContent(); jump L_SayX116; .L_Say127; if (~~((((t_2 == 3))))) jump L_Say128; ParaContent(); print (PrintText) SC_447; .L_Say128; .L_SayX116; ParaContent(); print (PrintText) SC_310; new_line; .L_Say129; .L_SayX117; ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: if m is 2 begin] if (((t_1 == 2))) { ! phrase 24 ! [24: if health of guy is health of player begin] if (((GProperty(OBJECT_TY, t_0,p14_health) == GProperty(9, player,p14_health)))) { ! phrase 25 ! [25: say ~Isatzo feels your health and that of [the guy] are already balanced enough.~] say__p=1;ParaContent(); print (PrintText) SC_448; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_449; new_line; .L_Say130; .L_SayX118; ! phrase 26 ! [26: otherwise] } else { ! phrase 27 ! [27: let n be health of guy minus health of player] t_2 = (GProperty(OBJECT_TY, t_0,p14_health)-GProperty(9, player,p14_health)) ; ! phrase 28 ! [28: let n be absolute value of n] t_2 = (PHR_1090_r41 (t_2)); ! phrase 29 ! [29: increase n by 1] t_2 = t_2 + 1; ! phrase 30 ! [30: now n is n divided by 2] t_2 = (IntegerDivide(t_2,2)) ; ! phrase 31 ! [31: if health of guy is less than health of player begin] if (((GProperty(OBJECT_TY, t_0,p14_health) < GProperty(9, player,p14_health)))) { ! phrase 32 ! [32: say ~Isatzo transfers [n] health from you to [the guy].~] say__p=1;ParaContent(); print (PrintText) SC_450; ParaContent(); print (say__n=t_2); ParaContent(); print (PrintText) SC_451; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say131; .L_SayX119; ! phrase 33 ! [33: increase health of the guy by n] WriteGProperty(OBJECT_TY, t_0,p14_health,GProperty(OBJECT_TY, t_0,p14_health) + t_2); ! phrase 34 ! [34: decrease health of the player by n] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - t_2); ! phrase 35 ! [35: end if] } ! phrase 36 ! [36: if health of guy is greater than health of player begin] if (((GProperty(OBJECT_TY, t_0,p14_health) > GProperty(9, player,p14_health)))) { ! phrase 37 ! [37: say ~Isatzo transfers [n] health from [the guy] to you.~] say__p=1;ParaContent(); print (PrintText) SC_450; ParaContent(); print (say__n=t_2); ParaContent(); print (PrintText) SC_452; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_453; new_line; .L_Say132; .L_SayX120; ! phrase 38 ! [38: decrease health of the guy by n] WriteGProperty(OBJECT_TY, t_0,p14_health,GProperty(OBJECT_TY, t_0,p14_health) - t_2); ! phrase 39 ! [39: increase health of the player by n] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) + t_2); ! phrase 40 ! [40: end if] } ! phrase 41 ! [41: end if] } ! phrase 42 ! [42: end if] } ! phrase 43 ! [43: if m is 3 begin] if (((t_1 == 3))) { ! phrase 44 ! [44: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 45 ! [45: let i be the number of things had by the player] t_2 = (Prop_93()) ; ! phrase 46 ! [46: let j be the number of things had by guy] t_3 = (Prop_94(,t_0)) ; ! phrase 47 ! [47: let k be i + j] t_4 = (t_2+t_3) ; ! phrase 48 ! [48: if i is j or k is 0 begin] if ((((t_2 == t_3))) || (((t_4 == 0)))) { ! phrase 49 ! [49: say ~Isatzo feels your items and those of [the guy] are well-balanced.~] say__p=1;ParaContent(); print (PrintText) SC_454; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_455; new_line; .L_Say133; .L_SayX121; ! phrase 50 ! [50: end if] } ! phrase 51 ! [51: if i is greater than j begin] if (((t_2 > t_3))) { ! phrase 52 ! [52: let item be a random not readied thing had by the player] t_5 = (Prop_95()) ; ! phrase 53 ! [53: say ~Isatzo decides to give your [item] to [the guy].~] say__p=1;ParaContent(); print (PrintText) SC_456; ParaContent(); print (PrintShortName) t_5; ParaContent(); print (PrintText) SC_443; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say134; .L_SayX122; ! phrase 54 ! [54: move item to guy] MoveObject(t_5, t_0, 0, false); ! phrase 55 ! [55: end if] } ! phrase 56 ! [56: if j is greater than i begin] if (((t_3 > t_2))) { ! phrase 57 ! [57: let item be a random not readied thing had by the guy] t_5 = (Prop_96(,t_0)) ; ! phrase 58 ! [58: say ~Isatzo decides to give [possessive of the guy] [item] to you.~] say__p=1;ParaContent(); print (PrintText) SC_457; ParaContent(); (Resolver_10(t_0,"source", 728));ParaContent(); print (PrintText) SC_209; ParaContent(); print (PrintShortName) t_5; ParaContent(); print (PrintText) SC_453; new_line; .L_Say135; .L_SayX123; ! phrase 59 ! [59: move item to player] MoveObject(t_5, player, 0, false); ! phrase 60 ! [60: end if] } ! phrase 61 ! [61: otherwise] } else { ! phrase 62 ! [62: let n be a random number between 0 and 3] t_2 = R_DecimalNumber(0, 3) ; ! phrase 63 ! [63: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 64 ! [64: now concentration of the player is n] WriteGProperty(9, player,p26_concentration,t_2); ! phrase 65 ! [65: say ~To balance the combat, Isatzo sets your concentration to [if n is 0]none[otherwise if n is 1]mild[otherwise if n is 2]medium[otherwise if n is 3]maximal[end if].~] say__p=1;ParaContent(); print (PrintText) SC_458; if (~~((((t_2 == 0))))) jump L_Say136; ParaContent(); print (PrintText) SC_444; ParaContent(); jump L_SayX124; .L_Say136; if (~~((((t_2 == 1))))) jump L_Say137; ParaContent(); print (PrintText) SC_445; ParaContent(); jump L_SayX124; .L_Say137; if (~~((((t_2 == 2))))) jump L_Say138; ParaContent(); print (PrintText) SC_446; ParaContent(); jump L_SayX124; .L_Say138; if (~~((((t_2 == 3))))) jump L_Say139; ParaContent(); print (PrintText) SC_447; .L_Say139; .L_SayX124; ParaContent(); print (PrintText) SC_310; new_line; .L_Say140; .L_SayX125; ! phrase 66 ! [66: otherwise] } else { ! phrase 67 ! [67: now concentration of guy is n] WriteGProperty(OBJECT_TY, t_0,p26_concentration,t_2); ! phrase 68 ! [68: say ~To balance the combat, Isatzo sets the concentration of [the guy] to [if n is 0]none[otherwise if n is 1]mild[otherwise if n is 2]medium[otherwise if n is 3]maximal[end if].~] say__p=1;ParaContent(); print (PrintText) SC_459; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_443; if (~~((((t_2 == 0))))) jump L_Say141; ParaContent(); print (PrintText) SC_444; ParaContent(); jump L_SayX126; .L_Say141; if (~~((((t_2 == 1))))) jump L_Say142; ParaContent(); print (PrintText) SC_445; ParaContent(); jump L_SayX126; .L_Say142; if (~~((((t_2 == 2))))) jump L_Say143; ParaContent(); print (PrintText) SC_446; ParaContent(); jump L_SayX126; .L_Say143; if (~~((((t_2 == 3))))) jump L_Say144; ParaContent(); print (PrintText) SC_447; .L_Say144; .L_SayX126; ParaContent(); print (PrintText) SC_310; new_line; .L_Say145; .L_SayX127; ! phrase 69 ! [69: end if] } ! phrase 70 ! [70: end if] } ! phrase 71 ! [71: end if] } ! phrase 72 ! [72: if m is 4 begin] if (((t_1 == 4))) { ! phrase 73 ! [73: let item be a random readied weapon enclosed by the player] t_2 = (Prop_97()) ; ! phrase 74 ! [74: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 75 ! [75: say ~Isatzo decides that your [item] is imbalanced and needs a buff (permanent +1 attack bonus).~] say__p=1;ParaContent(); print (PrintText) SC_460; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_461; new_line; .L_Say146; .L_SayX128; ! phrase 76 ! [76: increase weapon attack bonus of item by 1] WriteGProperty(OBJECT_TY, t_2,p25_weapon_attack_bonus,GProperty(OBJECT_TY, t_2,p25_weapon_attack_bonus) + 1); ! phrase 77 ! [77: otherwise] } else { ! phrase 78 ! [78: say ~Isatzo decides that your [item] is imbalanced and needs a nerf (permanent -1 attack bonus).~] say__p=1;ParaContent(); print (PrintText) SC_460; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_462; new_line; .L_Say147; .L_SayX129; ! phrase 79 ! [79: decrease weapon attack bonus of item by 1] WriteGProperty(OBJECT_TY, t_2,p25_weapon_attack_bonus,GProperty(OBJECT_TY, t_2,p25_weapon_attack_bonus) - 1); ! phrase 80 ! [80: end if] } ! phrase 81 ! [81: end if] } ! phrase 82 ! [82: end if] } ! phrase 83 ! [83: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1600, 1600, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of smelling in the Quartering Room: [ R_1647 ; if ((action ==##Smell) && (actor==player) && ((real_location == I418_quartering_room) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1647, 1647); ! phrase 1 ! [1: say ~The stench of rotting bodies overwhelms everything else.~] say__p=1;ParaContent(); print (PrintText) SC_463; new_line; .L_Say148; .L_SayX130; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1647, 1647, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Events and Specials" by Victor Gijsbers ! Instead of digging in Elemental Plane of Smoke: [ R_2070 ; if ((action ==##A91_digging) && (actor==player) && ((real_location == I521_elemental_plane_of_smok) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2070, 2070); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~You cannot dig tunnels in the smoke.~] say__p=1;ParaContent(); print (PrintText) SC_464; new_line; .L_Say149; .L_SayX131; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2070, 2070, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Events and Specials" by Victor Gijsbers ! Instead of going in Elemental Plane of Smoke: [ R_2071 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(LIST_OF_TY,0,KD4_list_of_things); blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD4_list_of_things); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_4(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_4 I7BASPL t_0 ! Local variable e.g. 'lijst' = list of things t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = thing ; if ((action ==##Go) && (actor==player) && ((real_location == I521_elemental_plane_of_smok) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2071, 2071); ! phrase 1 ! [1: repeat with item running through things in elemental plane of smoke begin] for (t_0=Prop_98(0), t_1=Prop_98(t_0): t_0: t_0=t_1, t_1=Prop_98(t_1)) { ! phrase 2 ! [2: unless item is a person or item is a backdrop begin] if (~~((((t_0 ofclass K8_person))) || (((t_0 ofclass K7_backdrop))))) { ! phrase 3 ! [3: move item to elemental plane of smoke storage] MoveObject(t_0, I522_elemental_plane_of_smok, 0, false); ! phrase 4 ! [4: end unless] } ! phrase 5 ! [5: end repeat] } ! phrase 6 ! [6: let lijst be a list of things] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 7 ! [7: repeat with item running through things in elemental plane of smoke storage begin] for (t_1=Prop_99(0), t_2=Prop_99(t_1): t_1: t_1=t_2, t_2=Prop_99(t_2)) { ! phrase 8 ! [8: if a random chance of 1 in 20 succeeds begin] if (( (GenerateRandomNumber(1, 20) <= 1) )) { ! phrase 9 ! [9: move item to elemental plane of smoke] MoveObject(t_1, I521_elemental_plane_of_smok, 0, false); ! phrase 10 ! [10: add item to lijst] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: say ~[if lijst is not empty]Running through the smoke, you stumble across [a list of things that list-inhabit lijst][otherwise][one of]You stumble blindly through the smoke[or]You run through an endless world of clouds[or]Nothing appears to change, no matter how long you run[as decreasingly likely outcomes][end if].~] say__p=1; if (~~((((~~(((Adj_16_t1_v30(t_0))))))))) jump L_Say150; ParaContent(); print (PrintText) SC_465; ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && ((Relation_87(subst__v,BlkValueCopy((blockv_stack-->(I7BASPL+1)), t_0)))))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT); @pull subst__v; jump L_SayX132; .L_Say150; ParaContent(); I7_ST_say_one_of-->1 = i7_soo_tap(I7_ST_say_one_of-->1, 3); switch((I7_ST_say_one_of-->1)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_466; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_467; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_468; ParaContent(); } .L_Say151; .L_SayX132; ParaContent(); print (PrintText) SC_310; new_line; .L_Say152; .L_SayX133; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2071, 2071, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Events and Specials" by Victor Gijsbers ! Instead of exiting in Elemental Plane of Smoke: [ R_2074 ; if ((action ==##Exit) && (actor==player) && ((real_location == I521_elemental_plane_of_smok) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2074, 2074); ! phrase 1 ! [1: if portal to kerkerkruip is in the location begin] if (((real_location == ContainerOf(I523_portal_to_kerkerkruip)))) { ! phrase 2 ! [2: try entering the portal to kerkerkruip] TryAction(0, player, ##Enter, I523_portal_to_kerkerkruip, 0);; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~If only you could find that portal again!~] say__p=1;ParaContent(); print (PrintText) SC_469; new_line; .L_Say153; .L_SayX134; ! phrase 5 ! [5: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2074, 2074, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of applying unguentum argenti to an alive iron person: [ R_1436 ; if ((action ==##A100_applying_it_to) && (actor==player) && ((noun ofclass K49_unguentum_argenti)) && ((second ofclass K8_person) && ((Adj_33_t1_v9(second))) && ((Adj_184_t1_v9(second))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1436, 1436); ! phrase 1 ! [1: say ~You apply the salve wherever you can, significantly weakening [the second noun].~] say__p=1;ParaContent(); print (PrintText) SC_470; ParaContent(); print (the) second; ParaContent(); print (PrintText) SC_310; new_line; .L_Say154; .L_SayX135; ! phrase 2 ! [2: now the second noun is silver] second.p180_material = I167_silver; ! phrase 3 ! [3: remove noun from play] RemoveFromPlay(noun); ! phrase 4 ! [4: now permanent health of the second noun is permanent health of the second noun divided by 2] WriteGProperty(OBJECT_TY, second,p17_permanent_health, (IntegerDivide(GProperty(OBJECT_TY, second,p17_permanent_health),2)) ); ! phrase 5 ! [5: now health of the second noun is health of the second noun divided by 2] WriteGProperty(OBJECT_TY, second,p14_health, (IntegerDivide(GProperty(OBJECT_TY, second,p14_health),2)) ); ! phrase 6 ! [6: if health of the second noun is less than 1 begin] if (((GProperty(OBJECT_TY, second,p14_health) < 1))) { ! phrase 7 ! [7: now health of the second noun is 1] WriteGProperty(OBJECT_TY, second,p14_health,1); ! phrase 8 ! [8: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1436, 1436, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of applying unguentum argenti to an iron weapon: [ R_1435 ; if ((action ==##A100_applying_it_to) && (actor==player) && ((noun ofclass K49_unguentum_argenti)) && ((second ofclass K17_weapon) && ((Adj_184_t1_v9(second))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1435, 1435); ! phrase 1 ! [1: say ~You carefully apply the salve to [the second noun], turning it into a silver weapon.~] say__p=1;ParaContent(); print (PrintText) SC_471; ParaContent(); print (the) second; ParaContent(); print (PrintText) SC_472; new_line; .L_Say155; .L_SayX136; ! phrase 2 ! [2: now the second noun is silver] second.p180_material = I167_silver; ! phrase 3 ! [3: remove noun from play] RemoveFromPlay(noun); RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1435, 1435, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of applying unguentum argenti to an iron thing: [ R_1437 ; if ((action ==##A100_applying_it_to) && (actor==player) && ((noun ofclass K49_unguentum_argenti)) && ((second ofclass K2_thing) && ((Adj_184_t1_v9(second))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1437, 1437); ! phrase 1 ! [1: say ~You carefully apply the salve to [the second noun], turning it into silver.~] say__p=1;ParaContent(); print (PrintText) SC_471; ParaContent(); print (the) second; ParaContent(); print (PrintText) SC_473; new_line; .L_Say156; .L_SayX137; ! phrase 2 ! [2: now second noun is silver] second.p180_material = I167_silver; ! phrase 3 ! [3: remove noun from play] RemoveFromPlay(noun); RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1437, 1437, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of throwing a grenade at something: [ R_1369 ; if ((action ==##ThrowAt) && (actor==player) && ((noun ofclass K35_grenade)) && ((second ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1369, 1369); ! phrase 1 ! [1: try throwing the noun instead] TryAction(0, player, ##A99_throwing, noun, 0);; rtrue; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1369, 1369, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Instead of touching clouds of smoke: [ R_1322 ; if ((action ==##Touch) && (actor==player) && ((noun == I185_clouds_of_smoke) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1322, 1322); ! phrase 1 ! [1: say ~They are insubstantial.~] say__p=1;ParaContent(); print (PrintText) SC_474; new_line; .L_Say157; .L_SayX138; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1322, 1322, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Instead of taking clouds of smoke: [ R_1323 ; if ((action ==##Take) && (actor==player) && ((noun == I185_clouds_of_smoke) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1323, 1323); ! phrase 1 ! [1: say ~They are insubstantial.~] say__p=1;ParaContent(); print (PrintText) SC_474; new_line; .L_Say158; .L_SayX139; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1323, 1323, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of throwing the Blessed Grenade: [ R_1427 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_5(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_5 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = list of people t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ; if ((action ==##A99_throwing) && (actor==player) && ((noun == I303_blessed_grenade) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1427, 1427); ! phrase 1 ! [1: remove the noun from play] RemoveFromPlay(noun); ! phrase 2 ! [2: if the number of undead persons in the location is less than 1 begin] if ((( (Prop_100()) < 1))) { ! phrase 3 ! [3: say ~As the grenade explodes you hear the singing of angels. But nothing further appears to happen.~] say__p=1;ParaContent(); print (PrintText) SC_475; new_line; .L_Say159; .L_SayX140; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: let k be a list of persons] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 6 ! [6: repeat with guy running through alive undead persons in the location begin] for (t_1=Prop_101(0), t_2=Prop_101(t_1): t_1: t_1=t_2, t_2=Prop_101(t_2)) { ! phrase 7 ! [7: now health of guy is -1] WriteGProperty(9, t_1,p14_health,-1); ! phrase 8 ! [8: add guy to k] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 9 ! [9: end repeat] } ! phrase 10 ! [10: say ~As the grenade explodes you hear the singing of angels, several of whom swoop down from the heavens with huge swords and eviscerate [no dead property][K with definite articles][dead property].~] say__p=1;ParaContent(); print (PrintText) SC_476; ParaContent(); (PHR_828_r43 ());ParaContent(); LIST_OF_TY_Say(t_0, 2); ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_310; new_line; .L_Say160; .L_SayX141; ! phrase 11 ! [11: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 12 ! [12: end the story saying ~The undead should not seek blessings.~] deadflag=SC_477; story_complete=false; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1427, 1427, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of readying the rod of the master builder: [ R_1518 ; if ((action ==##A87_readying) && (actor==player) && ((noun == I357_rod_of_the_master_build) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1518, 1518); ! phrase 1 ! [1: say ~It is not weapon. You can use it without readying it.~] say__p=1;ParaContent(); print (PrintText) SC_478; new_line; .L_Say161; .L_SayX142; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1518, 1518, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of eating Drakul's lifeblood: [ R_1524 ; if ((action ==##Eat) && (actor==player) && ((noun == I359_drakul_s_lifeblood) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1524, 1524); ! phrase 1 ! [1: try drinking drakul's lifeblood] TryAction(0, player, ##Drink, I359_drakul_s_lifeblood, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1524, 1524, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of drinking Drakul's lifeblood: [ R_1525 ; if ((action ==##Drink) && (actor==player) && ((noun == I359_drakul_s_lifeblood) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1525, 1525); ! phrase 1 ! [1: remove noun from play] RemoveFromPlay(noun); ! phrase 2 ! [2: vampirise the player] (PHR_1276_r45 ()); ! phrase 3 ! [3: say ~As you gulp down the blood, you feel your whole body changing -- it becomes cold and fragile, but also swift and lean. Magical power courses through your veins. You have been turned into a vampire!~] say__p=1;ParaContent(); print (PrintText) SC_479; new_line; .L_Say162; .L_SayX143; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1525, 1525, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of reading the tome of transmutation: [ R_1527 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; if ((action ==##A102_reading) && (actor==player) && ((noun == I360_tome_of_transmutation) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1527, 1527); ! phrase 1 ! [1: say ~You speak the mighty words of power. In a flare of magical light, the tome disappears -- and all [material-adjective of first-trans-material] objects have turned into [second-trans-material]!~] say__p=1;ParaContent(); print (PrintText) SC_480; ParaContent(); @push self; print (PrintText) GProperty(50, self=(Global_Vars-->94),p176_material_adjective); @pull self; ParaContent(); print (PrintText) SC_481; ParaContent(); print (T70) (Global_Vars-->95); ParaContent(); print (PrintText) SC_426; new_line; .L_Say163; .L_SayX144; ! phrase 2 ! [2: remove tome of transmutation from play] RemoveFromPlay(I360_tome_of_transmutation); ! phrase 3 ! [3: repeat with item running through things begin] for (t_0=Prop_102(0), t_1=Prop_102(t_0): t_0: t_0=t_1, t_1=Prop_102(t_1)) { ! phrase 4 ! [4: if material of item is first-trans-material begin] if (((GProperty(9, t_0,p180_material) == (Global_Vars-->94)))) { ! phrase 5 ! [5: now material of item is second-trans-material] WriteGProperty(9, t_0,p180_material,(Global_Vars-->95)); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: rule succeeds] RulebookSucceeds(); rtrue; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1527, 1527, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of attacking the radiant images: [ R_1552 ; if ((action ==##Attack) && (actor==player) && ((noun == I382_radiant_images) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1552, 1552); ! phrase 1 ! [1: say ~You courageously attack the illusory beings.~] say__p=1;ParaContent(); print (PrintText) SC_482; new_line; .L_Say164; .L_SayX145; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1552, 1552, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of attacking the statue of Nomos: [ R_1567 ; if ((action ==##Attack) && (actor==player) && ((noun == I388_statue_of_nomos) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1567, 1567); ! phrase 1 ! [1: say ~For aeons, warmth and coldness, air and water, and all the internal material tensions have wrought their slow changes on the atomic structure of the statue of Nomos. This is the exact moment when the critical limit is reached, and Nomos[apostrophe] massive marble fist breaks free and surrenders itself to the laws of gravity. Your body underneath is forced to surrender as well.~] say__p=1;ParaContent(); print (PrintText) SC_483; ParaContent(); print "'"; ParaContent(); print (PrintText) SC_484; new_line; .L_Say165; .L_SayX146; ! phrase 2 ! [2: end the game saying ~You were crushed.~] deadflag=SC_485; story_complete=false; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1567, 1567, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of climbing the statue of Nomos: [ R_1568 ; if ((action ==##Climb) && (actor==player) && ((noun == I388_statue_of_nomos) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1568, 1568); ! phrase 1 ! [1: say ~It is far too smooth for you to climb.~] say__p=1;ParaContent(); print (PrintText) SC_486; new_line; .L_Say166; .L_SayX147; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1568, 1568, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of attacking the statue of Aite: [ R_1581 ; if ((action ==##Attack) && (actor==player) && ((noun == I390_statue_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1581, 1581); ! phrase 1 ! [1: say ~You experimentally whack the statue a couple of times, but it doesn't seem to budge. Has this pleased the goddess, or angered her?~] say__p=1;ParaContent(); print (PrintText) SC_487; new_line; .L_Say167; .L_SayX148; ! phrase 2 ! [2: if a random chance of 4 in 9 succeeds begin] if (( (GenerateRandomNumber(1, 9) <= 4) )) { ! phrase 3 ! [3: now the aite wrath state is 1] (Global_Vars-->104) = 1; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: now the aite wrath state is -1] (Global_Vars-->104) = -1; ! phrase 6 ! [6: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1581, 1581, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of touching the statue of Aite: [ R_1582 ; if ((action ==##Touch) && (actor==player) && ((noun == I390_statue_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1582, 1582); ! phrase 1 ! [1: try climbing the statue of aite] TryAction(0, player, ##Climb, I390_statue_of_aite, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1582, 1582, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of climbing the statue of Aite: [ R_1583 ; if ((action ==##Climb) && (actor==player) && ((noun == I390_statue_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1583, 1583); ! phrase 1 ! [1: say ~You cut yourself badly as soon as you touch the statue.~] say__p=1;ParaContent(); print (PrintText) SC_488; new_line; .L_Say168; .L_SayX149; ! phrase 2 ! [2: decrease the health of the player by 3] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - 3); ! phrase 3 ! [3: if the health of the player is less than 1 begin] if (((GProperty(9, player,p14_health) < 1))) { ! phrase 4 ! [4: end the game saying ~You sacrificed yourself to Aite.~] deadflag=SC_489; story_complete=false; ! phrase 5 ! [5: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1583, 1583, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of taking the pile of fragments: [ R_1590 ; if ((action ==##Take) && (actor==player) && ((noun == I393_pile_of_fragments) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1590, 1590); ! phrase 1 ! [1: say ~For reasons that cannot be merely physical, you are unable to move the rubble~] say__p=1;ParaContent(); print (PrintText) SC_490; .L_Say169; .L_SayX150; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1590, 1590, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of attacking the statue of Sul: [ R_1591 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; if ((action ==##Attack) && (actor==player) && ((noun == I392_statue_of_sul) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1591, 1591); ! phrase 1 ! [1: say ~As soon as you strike the statue, it shatters into a thousand pieces.~] say__p=1;ParaContent(); print (PrintText) SC_491; new_line; .L_Say170; .L_SayX151; ! phrase 2 ! [2: remove the statue of sul from play] RemoveFromPlay(I392_statue_of_sul); ! phrase 3 ! [3: move the pile of fragments to the temple of sul] MoveObject(I393_pile_of_fragments, I391_temple_of_sul, 0, false); ! phrase 4 ! [4: repeat with item running through things begin] for (t_0=Prop_103(0), t_1=Prop_103(t_0): t_0: t_0=t_1, t_1=Prop_103(t_1)) { ! phrase 5 ! [5: if a random chance of 9 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 9) )) { ! phrase 6 ! [6: unless item is incorruptible , now item is cursed] if (~~((((Adj_255_t1_v9(t_0)))))) { (Adj_256_t2_v9(t_0)); } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end repeat] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1591, 1591, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of touching the statue of Sul: [ R_1592 ; if ((action ==##Touch) && (actor==player) && ((noun == I392_statue_of_sul) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1592, 1592); ! phrase 1 ! [1: try climbing the statue of sul] TryAction(0, player, ##Climb, I392_statue_of_sul, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1592, 1592, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of climbing the statue of Sul: [ R_1593 ; if ((action ==##Climb) && (actor==player) && ((noun == I392_statue_of_sul) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1593, 1593); ! phrase 1 ! [1: say ~You attempt to climb Sul's statue, but it so smooth that you make no progress at all.~] say__p=1;ParaContent(); print (PrintText) SC_492; new_line; .L_Say171; .L_SayX152; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1593, 1593, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of attacking the statue of Isatzo: [ R_1596 ; if ((action ==##Attack) && (actor==player) && ((noun == I395_statue_of_isatzo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1596, 1596); ! phrase 1 ! [1: say ~The statue seems impervious to harm.~] say__p=1;ParaContent(); print (PrintText) SC_493; new_line; .L_Say172; .L_SayX153; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1596, 1596, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of touching the statue of Isatzo: [ R_1597 ; if ((action ==##Touch) && (actor==player) && ((noun == I395_statue_of_isatzo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1597, 1597); ! phrase 1 ! [1: try climbing the statue of isatzo] TryAction(0, player, ##Climb, I395_statue_of_isatzo, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1597, 1597, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of climbing the statue of Isatzo: [ R_1598 ; if ((action ==##Climb) && (actor==player) && ((noun == I395_statue_of_isatzo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1598, 1598); ! phrase 1 ! [1: say ~For every meter you climb, you glide one meter down.~] say__p=1;ParaContent(); print (PrintText) SC_494; new_line; .L_Say173; .L_SayX154; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1598, 1598, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of taking the ruined tombs: [ R_1601 ; if ((action ==##Take) && (actor==player) && ((noun == I397_ruined_tombs) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1601, 1601); ! phrase 1 ! [1: say ~You do not find anything useful among the debris.~] say__p=1;ParaContent(); print (PrintText) SC_495; new_line; .L_Say174; .L_SayX155; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1601, 1601, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of entering the sarcophagus: [ R_1605 ; if ((action ==##Enter) && (actor==player) && ((noun == I398_sarcophagus) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1605, 1605); ! phrase 1 ! [1: say ~One should not joke with death.~] say__p=1;ParaContent(); print (PrintText) SC_496; new_line; .L_Say175; .L_SayX156; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1605, 1605, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of climbing the staircase: [ R_1617 ; if ((action ==##Climb) && (actor==player) && ((noun == I404_staircase) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1617, 1617); ! phrase 1 ! [1: try going up] TryAction(0, player, ##Go, I54_up, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1617, 1617, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of opening the pipes: [ R_1620 ; if ((action ==##Open) && (actor==player) && ((noun == I408_large_pipes) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1620, 1620); ! phrase 1 ! [1: if pipes-open is true begin] if (((((Global_Vars-->111) && true) == (1 && true)))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~The pipes are already open.~] say__p=1;ParaContent(); print (PrintText) SC_497; new_line; .L_Say176; .L_SayX157; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: try turning the big wheel] TryAction(0, player, ##Turn, I409_big_wheel, 0);; ! phrase 6 ! [6: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1620, 1620, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of closing the pipes: [ R_1621 ; if ((action ==##Close) && (actor==player) && ((noun == I408_large_pipes) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1621, 1621); ! phrase 1 ! [1: if pipes-open is false begin] if (((((Global_Vars-->111) && true) == (0 && true)))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~The pipes are already closed.~] say__p=1;ParaContent(); print (PrintText) SC_498; new_line; .L_Say177; .L_SayX158; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: try turning the big wheel] TryAction(0, player, ##Turn, I409_big_wheel, 0);; ! phrase 6 ! [6: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1621, 1621, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of turning the big wheel: [ R_1622 ; if ((action ==##Turn) && (actor==player) && ((noun == I409_big_wheel) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1622, 1622); ! phrase 1 ! [1: if pipes-open is true begin] if (((((Global_Vars-->111) && true) == (1 && true)))) { ! phrase 2 ! [2: now pipes-open is false] (Global_Vars-->111) = 0; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: now pipes-open is true] (Global_Vars-->111) = 1; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: say ~With a mighty push, you turn the wheel. [if pipes-open is true]Smoke immediately starts pouring forth from the pipes[otherwise]Smoke stops coming from the pipes[end if].~] say__p=1;ParaContent(); print (PrintText) SC_499; if (~~((((((Global_Vars-->111) && true) == (1 && true)))))) jump L_Say178; ParaContent(); print (PrintText) SC_500; jump L_SayX159; .L_Say178; ParaContent(); print (PrintText) SC_501; .L_Say179; .L_SayX159; ParaContent(); print (PrintText) SC_310; new_line; .L_Say180; .L_SayX160; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1622, 1622, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of pushing the wheel: [ R_1623 ; if ((action ==##Push) && (actor==player) && ((noun == I409_big_wheel) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1623, 1623); ! phrase 1 ! [1: try turning the wheel] TryAction(0, player, ##Turn, I409_big_wheel, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1623, 1623, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of pulling the wheel: [ R_1624 ; if ((action ==##Pull) && (actor==player) && ((noun == I409_big_wheel) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1624, 1624); ! phrase 1 ! [1: try turning the wheel] TryAction(0, player, ##Turn, I409_big_wheel, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1624, 1624, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of switching on the pipes: [ R_1625 ; if ((action ==##SwitchOn) && (actor==player) && ((noun == I408_large_pipes) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1625, 1625); ! phrase 1 ! [1: try opening the pipes] TryAction(0, player, ##Open, I408_large_pipes, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1625, 1625, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of switching off the pipes: [ R_1626 ; if ((action ==##SwitchOff) && (actor==player) && ((noun == I408_large_pipes) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1626, 1626); ! phrase 1 ! [1: try closing the pipes] TryAction(0, player, ##Close, I408_large_pipes, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1626, 1626, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of entering the huge magical portal: [ R_1628 ; if ((action ==##Enter) && (actor==player) && ((noun == I411_huge_magical_portal) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1628, 1628); ! phrase 1 ! [1: teleport the player] (PHR_1186_r46 ()); ! phrase 2 ! [2: if a random chance of 1 in 4 succeeds begin] if (( (GenerateRandomNumber(1, 4) <= 1) )) { ! phrase 3 ! [3: remove huge magical portal from play] RemoveFromPlay(I411_huge_magical_portal); ! phrase 4 ! [4: move huge empty portal to portal room] MoveObject(I412_huge_empty_portal, I410_portal_room, 0, false); ! phrase 5 ! [5: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1628, 1628, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of entering the huge empty portal: [ R_1629 ; if ((action ==##Enter) && (actor==player) && ((noun == I412_huge_empty_portal) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1629, 1629); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~The magical field has dissipated, and the portal is now useless.~] say__p=1;ParaContent(); print (PrintText) SC_502; new_line; .L_Say181; .L_SayX161; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1629, 1629, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of taking the hundreds of books: [ R_1630 ; if ((action ==##Take) && (actor==player) && ((noun == I414_hundreds_of_books) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1630, 1630); ! phrase 1 ! [1: say ~You'd love to partake of the undoubtedly forbidden knowledge stored in them, but you cannot read any of the alphabets -- and there is little doubt that the languages would be equally unfamiliar to you.~] say__p=1;ParaContent(); print (PrintText) SC_503; new_line; .L_Say182; .L_SayX162; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1630, 1630, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of reading the hundreds of books: [ R_1631 ; if ((action ==##A102_reading) && (actor==player) && ((noun == I414_hundreds_of_books) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1631, 1631); ! phrase 1 ! [1: try taking the hundreds of books] TryAction(0, player, ##Take, I414_hundreds_of_books, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1631, 1631, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of burning the hundreds of books: [ R_1632 ; if ((action ==##Burn) && (actor==player) && ((noun == I414_hundreds_of_books) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1632, 1632); ! phrase 1 ! [1: say ~You are not a barbarian!~] say__p=1;ParaContent(); print (PrintText) SC_504; new_line; .L_Say183; .L_SayX163; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1632, 1632, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of examining the fascinating drawing: [ R_1639 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_6(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_6 I7BASPL t_0 ! Local variable e.g. 'X' = list of people t_1 ! Local variable e.g. 'n' = number t_2 ! Local variable e.g. 'item' = object ; if ((action ==##Examine) && (actor==player) && ((noun == I417_fascinating_drawing) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1639, 1639); ! phrase 1 ! [1: let x be a list of persons] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: repeat with guy running through alive not off-stage persons begin] for (t_1=Prop_104(0), t_2=Prop_104(t_1): t_1: t_1=t_2, t_2=Prop_104(t_2)) { ! phrase 3 ! [3: unless guy is malygris or guy is nameless horror begin] if (~~((((t_1 == I493_malygris))) || (((t_1 == I499_nameless_horror))))) { ! phrase 4 ! [4: add guy to x] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: end repeat] } ! phrase 7 ! [7: let n be the number of dead persons] t_1 = (Prop_105()) ; ! phrase 8 ! [8: let item be a random readied weapon carried by the player] t_2 = (Prop_106()) ; ! phrase 9 ! [9: if the number of entries in x is greater than 1 begin] if ((( LIST_OF_TY_GetLength(t_0) > 1))) { ! phrase 10 ! [10: say ~The artist has skillfully drawn a battle scene involving [X with indefinite articles]. [if n is greater than 2]Several figures seem to have been smudged out. [end if]In the background, Malygris rises triumphant over all[if Eternal Prison is placed] -- unless the huge shadow behind him is a creature threatening to consume even him[end if]. You could further [italic type]examine[roman type] the individual creatures, if you wanted to.~] say__p=1;ParaContent(); print (PrintText) SC_505; ParaContent(); LIST_OF_TY_Say(t_0, 3); ParaContent(); print (PrintText) SC_506; if (~~((((t_1 > 2))))) jump L_Say184; ParaContent(); print (PrintText) SC_507; .L_Say184; .L_SayX164; ParaContent(); print (PrintText) SC_508; if (~~(((((Adj_111_t1_v9(I421_eternal_prison))))))) jump L_Say185; ParaContent(); print (PrintText) SC_509; .L_Say185; .L_SayX165; ParaContent(); print (PrintText) SC_510; ParaContent(); style underline; ParaContent(); print (PrintText) SC_511; ParaContent(); style roman; ParaContent(); print (PrintText) SC_512; new_line; .L_Say186; .L_SayX166; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~The artist has skillfully drawn a battle scene between you and Malygris, where you are evidently being crushed by the mighty wizard. Large portions of the drawing have been wiped out.~] say__p=1;ParaContent(); print (PrintText) SC_513; new_line; .L_Say187; .L_SayX167; ! phrase 13 ! [13: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1639, 1639, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of taking the large pile of body parts: [ R_1648 ; if ((action ==##Take) && (actor==player) && ((noun == I419_large_pile_of_body_part) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1648, 1648); ! phrase 1 ! [1: say ~You definitely do not want any of the body parts.~] say__p=1;ParaContent(); print (PrintText) SC_514; new_line; .L_Say188; .L_SayX168; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1648, 1648, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of searching the large pile of body parts: [ R_1649 ; if ((action ==##Search) && (actor==player) && ((noun == I419_large_pile_of_body_part) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1649, 1649); ! phrase 1 ! [1: if pile-searched is false begin] if (((((Global_Vars-->114) && true) == (0 && true)))) { ! phrase 2 ! [2: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 3 ! [3: now pile-searched is true] (Global_Vars-->114) = 1; ! phrase 4 ! [4: if rotting corpse is off-stage and rotting corpse is alive begin] if (((((~~Adj_9_t1_v9(I501_rotting_corpse))))) && ((((Adj_33_t1_v9(I501_rotting_corpse)))))) { ! phrase 5 ! [5: say ~As you search the pile, a rotting corpse jumps out!~] say__p=1;ParaContent(); print (PrintText) SC_515; new_line; .L_Say189; .L_SayX169; ! phrase 6 ! [6: move rotting corpse to location of the large pile of body parts] MoveObject(I501_rotting_corpse, LocationOf(I419_large_pile_of_body_part) , 0, false); ! phrase 7 ! [7: now the player is not hidden] (Adj_221_t3_v9(player)); ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: say ~The most valuable thing you find is a putrefying arm that might function as a club.~] say__p=1;ParaContent(); print (PrintText) SC_516; new_line; .L_Say190; .L_SayX170; ! phrase 10 ! [10: move putrefying arm to player] MoveObject(I420_putrefying_arm, player, 0, false); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: otherwise] } else { ! phrase 13 ! [13: do the pile-scroll-giving] (PHR_1650_r47 ()); ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: otherwise] } else { ! phrase 16 ! [16: say ~You find nothing else in the pile.~] say__p=1;ParaContent(); print (PrintText) SC_517; new_line; .L_Say191; .L_SayX171; ! phrase 17 ! [17: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1649, 1649, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of smelling putrefying arm: [ R_1651 ; if ((action ==##Smell) && (actor==player) && ((noun == I420_putrefying_arm) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1651, 1651); ! phrase 1 ! [1: say ~It is horrible.~] say__p=1;ParaContent(); print (PrintText) SC_518; new_line; .L_Say192; .L_SayX172; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1651, 1651, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of entering the portal to the elemental plane of smoke: [ R_1658 t_0 ! Local variable e.g. 'item' = object ; if ((action ==##Enter) && (actor==player) && ((noun == I426_portal_to_the_elemental) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1658, 1658); ! phrase 1 ! [1: consider the sudden combat reset rules] ProcessRulebook(506); ! phrase 2 ! [2: let item be portal to kerkerkruip] t_0 = I523_portal_to_kerkerkruip; ! phrase 3 ! [3: move item to elemental plane of smoke] MoveObject(t_0, I521_elemental_plane_of_smok, 0, false); ! phrase 4 ! [4: move player to elemental plane of smoke] MoveObject(player, I521_elemental_plane_of_smok, 0, false); ! phrase 5 ! [5: now the take no time boolean is false] (Global_Vars-->34) = 0; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1658, 1658, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of smelling the lair of the imp: [ R_1662 ; if ((action ==##Smell) && (actor==player) && ((noun == I427_lair_of_the_imp) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1662, 1662); ! phrase 1 ! [1: say ~Mostly sulphur, but you'd recognise this smell anywhere -- you used to have a pet imp when you were an apprentice.~] say__p=1;ParaContent(); print (PrintText) SC_519; new_line; .L_Say193; .L_SayX173; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1662, 1662, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Instead of switching on the teleportation beacon: [ R_1672 ; if ((action ==##SwitchOn) && (actor==player) && ((noun == I430_teleportation_beacon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1672, 1672); ! phrase 1 ! [1: if teleportation-beacon-on is true begin] if (((((Global_Vars-->116) && true) == (1 && true)))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~The beacon is already on.~] say__p=1;ParaContent(); print (PrintText) SC_520; new_line; .L_Say194; .L_SayX174; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: now teleportation-beacon-on is true] (Global_Vars-->116) = 1; ! phrase 6 ! [6: say ~With a confident magical gesture, you turn on the teleportation beacon. All teleportations in the dungeon will now end up here.~] say__p=1;ParaContent(); print (PrintText) SC_521; new_line; .L_Say195; .L_SayX175; ! phrase 7 ! [7: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1672, 1672, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Instead of switching off the teleportation beacon: [ R_1673 ; if ((action ==##SwitchOff) && (actor==player) && ((noun == I430_teleportation_beacon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1673, 1673); ! phrase 1 ! [1: if teleportation-beacon-on is false begin] if (((((Global_Vars-->116) && true) == (0 && true)))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~The beacon is already off.~] say__p=1;ParaContent(); print (PrintText) SC_522; new_line; .L_Say196; .L_SayX176; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: now teleportation-beacon-on is false] (Global_Vars-->116) = 0; ! phrase 6 ! [6: say ~With a complicated magical gesture, you turn off the teleportation beacon.~] say__p=1;ParaContent(); print (PrintText) SC_523; new_line; .L_Say197; .L_SayX177; ! phrase 7 ! [7: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1673, 1673, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Instead of climbing the thorny bushes: [ R_1961 ; if ((action ==##Climb) && (actor==player) && ((noun == I491_thorny_bushes) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1961, 1961); ! phrase 1 ! [1: try entering the thorny bushes] TryAction(0, player, ##Enter, I491_thorny_bushes, 0);; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1961, 1961, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Instead of entering the thorny bushes: [ R_1962 ; if ((action ==##Enter) && (actor==player) && ((noun == I491_thorny_bushes) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1962, 1962); ! phrase 1 ! [1: say ~You jump into the thorns, receiving [bold type]10 damage[roman type] before you can crawl out again.~] say__p=1;ParaContent(); print (PrintText) SC_524; ParaContent(); style bold; ParaContent(); print (PrintText) SC_525; ParaContent(); style roman; ParaContent(); print (PrintText) SC_526; new_line; .L_Say198; .L_SayX178; ! phrase 2 ! [2: decrease health of the player by 10] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - 10); ! phrase 3 ! [3: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 4 ! [4: end the story saying ~I'd love to give you a barbed compliment.~] deadflag=SC_527; story_complete=false; ! phrase 5 ! [5: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1962, 1962, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Instead of taking the thorny bushes: [ R_1963 ; if ((action ==##Take) && (actor==player) && ((noun == I491_thorny_bushes) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1963, 1963); ! phrase 1 ! [1: say ~They seem to be rooted to the spot.~] say__p=1;ParaContent(); print (PrintText) SC_528; new_line; .L_Say199; .L_SayX179; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1963, 1963, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Events and Specials" by Victor Gijsbers ! Instead of entering the portal to Kerkerkruip: [ R_2075 ; if ((action ==##Enter) && (actor==player) && ((noun == I523_portal_to_kerkerkruip) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2075, 2075); ! phrase 1 ! [1: consider the sudden combat reset rules] ProcessRulebook(506); ! phrase 2 ! [2: move player to portal of smoke] MoveObject(player, I425_portal_of_smoke, 0, false); ! phrase 3 ! [3: now the take no time boolean is false] (Global_Vars-->34) = 0; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2075, 2075, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Instead of attacking or cutting or touching the fascinating drawing: [ R_1646 ; if ((action ==##Touch or ##Cut or ##Attack) && (actor==player) && ((noun == I417_fascinating_drawing) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1646, 1646); ! phrase 1 ! [1: say ~The painting seems to be magically protected.~] say__p=1;ParaContent(); print (PrintText) SC_529; new_line; .L_Say200; .L_SayX180; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1646, 1646, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Instead of turning or pushing or pulling the teleportation beacon: [ R_1671 ; if ((action ==##Pull or ##Push or ##Turn) && (actor==player) && ((noun == I430_teleportation_beacon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1671, 1671); ! phrase 1 ! [1: if teleportation-beacon-on is true begin] if (((((Global_Vars-->116) && true) == (1 && true)))) { ! phrase 2 ! [2: try switching off the teleportation beacon] TryAction(0, player, ##SwitchOff, I430_teleportation_beacon, 0);; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: try switching on the teleportation beacon] TryAction(0, player, ##SwitchOn, I430_teleportation_beacon, 0);; ! phrase 5 ! [5: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1671, 1671, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Instead of doing anything with rust spores: [ R_1239 ; if ( (actor==player) && (noun) && (noun == inp1) && ((noun == I179_rust_spores) && (true))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1239, 1239); ! phrase 1 ! [1: if the location is not rust-spored begin] if (((~~(((Adj_207_t1_v9(real_location))))))) { ! phrase 2 ! [2: say ~This place is blessedly free of rust spores.~] say__p=1;ParaContent(); print (PrintText) SC_530; new_line; .L_Say201; .L_SayX181; ! phrase 3 ! [3: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1239, 1239, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of eating a package of ment ( this is the ment cannot be eaten rule ): [ R_1542 ; if ((action ==##Eat) && (actor==player) && ((noun ofclass K50_package_of_ment))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1542, 1542); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~Ment has to be taken through the nose, not the mouth. Try snorting it.~] say__p=1;ParaContent(); print (PrintText) SC_531; new_line; .L_Say202; .L_SayX182; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1542, 1542, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of opening an essence: [ R_1355 ; if ((action ==##Open) && (actor==player) && ((noun ofclass K23_essence))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1355, 1355); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~The minute amount of magical essence would immediately evaporate and be lost forever. To use an essence, [italic type]inhale[roman type] it.~] say__p=1;ParaContent(); print (PrintText) SC_532; ParaContent(); style underline; ParaContent(); print (PrintText) SC_533; ParaContent(); style roman; ParaContent(); print (PrintText) SC_534; new_line; .L_Say203; .L_SayX183; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1355, 1355, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of drinking an essence: [ R_1356 ; if ((action ==##Drink) && (actor==player) && ((noun ofclass K23_essence))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1356, 1356); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~The gaseous essence is no fluid, and cannot be drunk. You could, however, [italic type]inhale[roman type] it.~] say__p=1;ParaContent(); print (PrintText) SC_535; ParaContent(); style underline; ParaContent(); print (PrintText) SC_533; ParaContent(); style roman; ParaContent(); print (PrintText) SC_534; new_line; .L_Say204; .L_SayX184; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1356, 1356, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of throwing a flash grenade: [ R_1423 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_7(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_7 I7BASPL t_0 ! Local variable e.g. 'lijst' = list of people t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = number ; if ((action ==##A99_throwing) && (actor==player) && ((noun ofclass K45_flash_grenade))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1423, 1423); ! phrase 1 ! [1: let lijst be a list of person] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: repeat with guy running through alive persons in the location begin] for (t_1=Prop_107(0), t_2=Prop_107(t_1): t_1: t_1=t_2, t_2=Prop_107(t_2)) { ! phrase 3 ! [3: unless guy is blind begin] if (~~(((PHR_1169_r17 (t_1))))) { ! phrase 4 ! [4: let n be a random number between 0 and 8] t_3 = R_DecimalNumber(0, 8) ; ! phrase 5 ! [5: if guy is the player , decrease n by 2] if (((t_1 == player))) { t_3 = t_3 - 2; } ! phrase 6 ! [6: if guy is smoke immune , increase n by 20] if (((PHR_1325_r48 (t_1)))) { t_3 = t_3 + 20; } ! phrase 7 ! [7: unless n is less than smoke penalty of the location begin] if (~~(((t_3 < (Resolver_9(real_location,"source", 814)))))) { ! phrase 8 ! [8: add guy to lijst] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 9 ! [9: now guy is blinded] (Adj_162_t2_v9(t_1)); ! phrase 10 ! [10: end unless] } ! phrase 11 ! [11: end unless] } ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: say ~You throw the flash grenade, and a blinding light [unless lijst is empty]burns away the retinae of anyone unlucky enough to see it clearly, namely, [lijst with definite articles][otherwise]flashes through the room[end if].~] say__p=1;ParaContent(); print (PrintText) SC_536; if (((((Adj_16_t1_v30(t_0)))))) jump L_Say205; ParaContent(); print (PrintText) SC_537; ParaContent(); LIST_OF_TY_Say(t_0, 2); jump L_SayX185; .L_Say205; ParaContent(); print (PrintText) SC_538; .L_Say206; .L_SayX185; ParaContent(); print (PrintText) SC_310; new_line; .L_Say207; .L_SayX186; ! phrase 14 ! [14: remove noun from play] RemoveFromPlay(noun); RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1423, 1423, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of throwing a rust grenade: [ R_1424 ; if ((action ==##A99_throwing) && (actor==player) && ((noun ofclass K46_rust_grenade))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1424, 1424); ! phrase 1 ! [1: say ~You throw the rust grenade, and it immediately releases a cloud of rust spores!~] say__p=1;ParaContent(); print (PrintText) SC_539; new_line; .L_Say208; .L_SayX187; ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: now the location is rust-spored] (Adj_207_t2_v9(real_location)); RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1424, 1424, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of throwing a smoke grenade: [ R_1425 t_0 ! Local variable e.g. 'n' = number ; if ((action ==##A99_throwing) && (actor==player) && ((noun ofclass K47_smoke_grenade))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1425, 1425); ! phrase 1 ! [1: say ~You throw the smoke grenade, and it immediately explodes into a large cloud of smoke.~] say__p=1;ParaContent(); print (PrintText) SC_540; new_line; .L_Say209; .L_SayX188; ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: let n be a random number between 6 and 8] t_0 = R_DecimalNumber(6, 8) ; ! phrase 4 ! [4: increase the smoke timer of the location by n] WriteGProperty(OBJECT_TY, real_location,p54_smoke_timer,GProperty(OBJECT_TY, real_location,p54_smoke_timer) + t_0); RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1425, 1425, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Instead of throwing a fragmentation grenade: [ R_1426 ; if ((action ==##A99_throwing) && (actor==player) && ((noun ofclass K48_fragmentation_grenade))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1426, 1426); ! phrase 1 ! [1: say ~The grenade explodes, dealing [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_541; ParaContent(); RunParagraphOn(); .L_Say210; .L_SayX189; ! phrase 2 ! [2: have a fragmentation event in location with noun by player] (Resolver_11(real_location,noun,player,"source", 873)); RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1426, 1426, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Instead of eating a rotting limb: [ R_2004 ; if ((action ==##Eat) && (actor==player) && ((noun ofclass K53_rotting_limb))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2004, 2004); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~The smell makes you gag.~] say__p=1;ParaContent(); print (PrintText) SC_542; new_line; .L_Say211; .L_SayX190; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2004, 2004, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Instead of taking a rotting limb: [ R_2005 ; if ((action ==##Take) && (actor==player) && ((noun ofclass K53_rotting_limb))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2005, 2005); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~You will not touch that. You will touch a lot of things, but not that.~] say__p=1;ParaContent(); print (PrintText) SC_543; new_line; .L_Say212; .L_SayX191; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2005, 2005, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Instead of asking something for: [ R_2120 ; if ((action ==##AskFor) && (actor==player) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2120, 2120); ! phrase 1 ! [1: say ~You enjoy an idle boast as much as the next person, but this is hardly the time for an in-depth conversation.~] say__p=1;ParaContent(); print (PrintText) SC_544; new_line; .L_Say213; .L_SayX192; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2120, 2120, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Instead of the Nameless Horror waiting: [ R_2002 ; if ((action ==##Wait) && (actor~=player) && (act_requester==nothing) && ((actor == I499_nameless_horror) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2002, 2002); ! phrase 1 ! [1: say ~[one of]The Nameless Horror emits a maddening shriek[or]Darkness coalesces around the Nameless Horror[or]The world shakes as the Nameless Horror roars in defiance[at random].~] say__p=1;ParaContent(); I7_ST_say_one_of-->2 = i7_soo_ran(I7_ST_say_one_of-->2, 3); switch((I7_ST_say_one_of-->2)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_545; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_546; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_547; ParaContent(); } ParaContent(); print (PrintText) SC_310; new_line; .L_Say214; .L_SayX193; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2002, 2002, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Instead of smelling when the rotting corpse is in the location: [ R_2009 ; if ((action ==##Smell) && (actor==player) && (self=actor,true) && (((real_location == ContainerOf(I501_rotting_corpse))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2009, 2009); ! phrase 1 ! [1: say ~The smell of rotting meat fills your nostrils.~] say__p=1;ParaContent(); print (PrintText) SC_548; new_line; .L_Say215; .L_SayX194; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2009, 2009, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Instead of shorter going to: [ R_2095 ; if ((action ==##A130_shorter_going_to) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2095, 2095); ! phrase 1 ! [1: if location-to-go is null-room begin] if ((((Global_Vars-->127) == I524_null_room))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~Unable to go automatically: you haven't provided a destination yet. Please use a command like 'go to Entrance Hall' first.~] say__p=1;ParaContent(); print (PrintText) SC_549; new_line; .L_Say216; .L_SayX195; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: try going to the location-to-go] TryAction(0, player, ##A129_going_to, (Global_Vars-->127), 0);; ! phrase 6 ! [6: end if] } RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2095, 2095, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Instead of singing: [ R_2116 ; if ((action ==##Sing) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2116, 2116); ! phrase 1 ! [1: say ~You hum a battle hymn.~] say__p=1;ParaContent(); print (PrintText) SC_550; new_line; .L_Say217; .L_SayX196; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2116, 2116, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Instead of answering that: [ R_2117 ; if ((action ==##Answer) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2117, 2117); ! phrase 1 ! [1: say ~You enjoy an idle boast as much as the next person, but this is hardly the time for an in-depth conversation.~] say__p=1;ParaContent(); print (PrintText) SC_544; new_line; .L_Say218; .L_SayX197; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2117, 2117, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Instead of telling about: [ R_2118 ; if ((action ==##Tell) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2118, 2118); ! phrase 1 ! [1: say ~You enjoy an idle boast as much as the next person, but this is hardly the time for an in-depth conversation.~] say__p=1;ParaContent(); print (PrintText) SC_544; new_line; .L_Say219; .L_SayX198; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2118, 2118, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Instead of asking about: [ R_2119 ; if ((action ==##Ask) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2119, 2119); ! phrase 1 ! [1: say ~You enjoy an idle boast as much as the next person, but this is hardly the time for an in-depth conversation.~] say__p=1;ParaContent(); print (PrintText) SC_544; new_line; .L_Say220; .L_SayX199; RulebookFails(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2119, 2119, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: After (B24_after) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/15 ! After taking off the cloak of shadows when the player is hidden: ! >>> I - Number of aspects constrained >>> ! Rule 2/15 ! After putting on a readied weapon ( this is the unready on putting on rule ): ! === which is equally specific with === ! Rule 3/15 ! After inserting into a readied weapon ( this is the unready on inserting rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 4/15 ! After readying the glass cannon: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 5/15 ! After wearing a cursed not curse-identified thing: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 6/15 ! After examining a dead person ( this is the give list of possession on dead person rule ): ! === which is equally specific with === ! Rule 7/15 ! After dropping a readied weapon ( this is the unready on dropping rule ): ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 8/15 ! After readying something cursed: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 9/15 ! After the player hitting ( this is the scales disappear after attacking rule ): ! >>> I - Number of aspects constrained >>> ! Rule 10/15 ! After going ( this is the first make sure that going is not acting fast rule ): ! === which is equally specific with === ! Rule 11/15 ! After looking ( this is the second make sure that going is not acting fast rule ): ! === which is equally specific with === ! Rule 12/15 ! After an actor hitting ( this is the lose concentration after attacking rule ): ! === which is equally specific with === ! Rule 13/15 ! After an actor hitting ( this is the no longer at parry after the attack rule ): ! === which is equally specific with === ! Rule 14/15 ! After an actor hitting ( this is the no longer at dodge after the attack rule ): ! === which is equally specific with === ! Rule 15/15 ! After an actor hitting ( this is the better not dodge on bridge of doom rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! After taking off the cloak of shadows when the player is hidden: [ R_1505 ; if ((action ==##Disrobe) && (actor==player) && ((noun == I353_cloak_of_shadows) && (true)) && (self=actor,true) && ((((Adj_221_t1_v9(player)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1505, 1505); ! phrase 1 ! [1: now player is not hidden] (Adj_221_t3_v9(player)); ! phrase 2 ! [2: say ~You reveal your presence to the world.~] say__p=1;ParaContent(); print (PrintText) SC_551; new_line; .L_Say221; .L_SayX200; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1505, 1505, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After putting on a readied weapon ( this is the unready on putting on rule ): [ R_970 ; if ((action ==##PutOn) && (actor==player) && ((second ofclass K17_weapon) && ((Adj_103_t1_v9(second))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_970, 970); ! phrase 1 ! [1: now the noun is not readied] (Adj_103_t3_v9(noun)); ! phrase 2 ! [2: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_970, 970, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After inserting into a readied weapon ( this is the unready on inserting rule ): [ R_971 ; if ((action ==##Insert) && (actor==player) && ((second ofclass K17_weapon) && ((Adj_103_t1_v9(second))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_971, 971); ! phrase 1 ! [1: now the noun is not readied] (Adj_103_t3_v9(noun)); ! phrase 2 ! [2: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_971, 971, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! After readying the glass cannon: [ R_1508 ; if ((action ==##A87_readying) && (actor==player) && ((noun == I354_glass_cannon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1508, 1508); ! phrase 1 ! [1: say ~You feel fragile.~] say__p=1;ParaContent(); print (PrintText) SC_552; new_line; .L_Say222; .L_SayX201; ! phrase 2 ! [2: now permanent health of player is permanent health of the player divided by 2] WriteGProperty(9, player,p17_permanent_health, (IntegerDivide(GProperty(9, player,p17_permanent_health),2)) ); ! phrase 3 ! [3: now health of the player is health of the player divided by 2] WriteGProperty(9, player,p14_health, (IntegerDivide(GProperty(9, player,p14_health),2)) ); ! phrase 4 ! [4: if player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 5 ! [5: end the story saying ~You were a little too fragile for that.~] deadflag=SC_553; story_complete=false; ! phrase 6 ! [6: end if] } RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1508, 1508, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! After wearing a cursed not curse-identified thing: [ R_1396 ; if ((action ==##Wear) && (actor==player) && ((noun ofclass K2_thing) && ((Adj_256_t1_v9(noun))) && (~~((Adj_258_t1_v9(noun)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1396, 1396); ! phrase 1 ! [1: say ~As soon as you put on [the noun], a chill goes through your body. You realise that [the noun] [is-are] cursed and cannot be removed with normal means.~] say__p=1;ParaContent(); print (PrintText) SC_554; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_555; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_885_r49 ());ParaContent(); print (PrintText) SC_556; new_line; .L_Say223; .L_SayX202; ! phrase 2 ! [2: now the noun is curse-identified] (Adj_258_t2_v9(noun)); RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1396, 1396, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After examining a dead person ( this is the give list of possession on dead person rule ): [ R_956 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD4_list_of_things); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_8(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_8 I7BASPL ; if ((action ==##Examine) && (actor==player) && ((noun ofclass K8_person) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_956, 956); ! phrase 1 ! [1: if the number of things carried by the noun is at least one begin] if ((( (Prop_108()) >= 1))) { ! phrase 2 ! [2: say ~On the [if the noun is plural-named]bodies[otherwise]body[end if] of [the noun] you also see [list of things carried by the noun with indefinite articles].~] say__p=1;ParaContent(); print (PrintText) SC_557; if (~~(((((Adj_48_t1_v9(noun))))))) jump L_Say224; ParaContent(); print (PrintText) SC_558; jump L_SayX203; .L_Say224; ParaContent(); print (PrintText) SC_559; .L_Say225; .L_SayX203; ParaContent(); print (PrintText) SC_560; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_561; ParaContent(); LIST_OF_TY_Say( LIST_OF_TY_Desc((blockv_stack-->(I7BASPL+0)), Prop_109, 9) , 3); ParaContent(); print (PrintText) SC_310; new_line; .L_Say226; .L_SayX204; ! phrase 3 ! [3: end if] } RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_956, 956, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After dropping a readied weapon ( this is the unready on dropping rule ): [ R_969 ; if ((action ==##Drop) && (actor==player) && ((noun ofclass K17_weapon) && ((Adj_103_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_969, 969); ! phrase 1 ! [1: now the noun is not readied] (Adj_103_t3_v9(noun)); ! phrase 2 ! [2: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_969, 969, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! After readying something cursed: [ R_1399 ; if ((action ==##A87_readying) && (actor==player) && ((noun ofclass K2_thing) && ((Adj_256_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1399, 1399); ! phrase 1 ! [1: say ~As soon as you ready [the noun], a chill goes through your body. You realise that [the noun] [is-are] cursed and that you cannot let go.~] say__p=1;ParaContent(); print (PrintText) SC_562; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_555; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_885_r49 ());ParaContent(); print (PrintText) SC_563; new_line; .L_Say227; .L_SayX205; ! phrase 2 ! [2: now the noun is curse-identified] (Adj_258_t2_v9(noun)); RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1399, 1399, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! After the player hitting ( this is the scales disappear after attacking rule ): [ R_1744 ; if ((action ==##A86_hitting) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1744, 1744); ! phrase 1 ! [1: if the scales number is not 0 begin] if (((~~(((Global_Vars-->120) == 0))))) { ! phrase 2 ! [2: now the scales number is 0] (Global_Vars-->120) = 0; ! phrase 3 ! [3: say ~Your scales disappear.~] say__p=1;ParaContent(); print (PrintText) SC_564; new_line; .L_Say228; .L_SayX206; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1744, 1744, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! After going ( this is the first make sure that going is not acting fast rule ): [ R_859 ; if ((action ==##Go) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_859, 859); ! phrase 1 ! [1: now the just moved boolean is true] (Global_Vars-->35) = 1; ! phrase 2 ! [2: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_859, 859, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! After looking ( this is the second make sure that going is not acting fast rule ): [ R_860 ; if ((action ==##Look) && (actor==player)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_860, 860); ! phrase 1 ! [1: if the just moved boolean is true begin] if (((((Global_Vars-->35) && true) == (1 && true)))) { ! phrase 2 ! [2: now the take no time boolean is false] (Global_Vars-->34) = 0; ! phrase 3 ! [3: now the just moved boolean is false] (Global_Vars-->35) = 0; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_860, 860, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After an actor hitting ( this is the lose concentration after attacking rule ): [ R_1015 ; if ((action ==##A86_hitting) && (act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1015, 1015); ! phrase 1 ! [1: now the concentration of the global attacker is 0] WriteGProperty(9, (Global_Vars-->41),p26_concentration,0); ! phrase 2 ! [2: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1015, 1015, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After an actor hitting ( this is the no longer at parry after the attack rule ): [ R_1025 ; if ((action ==##A86_hitting) && (act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1025, 1025); ! phrase 1 ! [1: now the global defender is not at parry] (Adj_105_t3_v9((Global_Vars-->42))); ! phrase 2 ! [2: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1025, 1025, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After an actor hitting ( this is the no longer at dodge after the attack rule ): [ R_1031 ; if ((action ==##A86_hitting) && (act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1031, 1031); ! phrase 1 ! [1: now the global defender is not at dodge] (Adj_107_t3_v9((Global_Vars-->42))); ! phrase 2 ! [2: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1031, 1031, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! After an actor hitting ( this is the better not dodge on bridge of doom rule ): [ R_1561 ; if ((action ==##A86_hitting) && (act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1561, 1561); ! phrase 1 ! [1: if the location is the bridge of doom and the global defender can move begin] if ((((real_location == I384_bridge_of_doom))) && (((PHR_1258_r50 ((Global_Vars-->42)))))) { ! phrase 2 ! [2: if the player is the global defender and the player is at dodge begin] if ((((player == (Global_Vars-->42)))) && ((((Adj_107_t1_v9(player)))))) { ! phrase 3 ! [3: if the attack strength is less than the defence of the global defender begin] if ((((Global_Vars-->45) < GProperty(9, (Global_Vars-->42),p19_defence)))) { ! phrase 4 ! [4: unless the player is flying begin] if (~~(((PHR_1166_r51 (player))))) { ! phrase 5 ! [5: if player-vulnerable-to-bridge is true begin] if (((((Global_Vars-->100) && true) == (1 && true)))) { ! phrase 6 ! [6: say ~You successfully dodge the attack of [the global attacker]. Since there is no place to dodge to on the narrow bridge, your maneuver continues with an involuntary downward movement.~] say__p=1;ParaContent(); print (PrintText) SC_565; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_566; new_line; .L_Say229; .L_SayX207; ! phrase 7 ! [7: end the game saying ~You fell into the lava.~] deadflag=SC_567; story_complete=false; ! phrase 8 ! [8: stop the action] rtrue; ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: say ~You successfully dodge the attack of [the global attacker]. Since there is no place to dodge to on the narrow bridge, your maneuver almost ends in a drop down into the lava -- but you manage to regain your balance almost miraculously. This is something you might not want to try again.~] say__p=1;ParaContent(); print (PrintText) SC_565; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_568; new_line; .L_Say230; .L_SayX208; ! phrase 11 ! [11: now player-vulnerable-to-bridge is true] (Global_Vars-->100) = 1; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end unless] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: continue the action] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1561, 1561, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: does the player mean (B26_does_the_player_mean) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/21 ! Does the player mean applying a salve to something: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 2/21 ! Does the player mean entering the portal to the elemental plane of smoke: ! === which is equally specific with === ! Rule 3/21 ! Does the player mean entering the portal to Kerkerkruip: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 4/21 ! Does the player mean piercing the player: ! === which is equally specific with === ! Rule 5/21 ! Does the player mean stunning the player: ! === which is equally specific with === ! Rule 6/21 ! Does the player mean dominating the player: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 7/21 ! Does the player mean attacking a person opposed by the player: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 8/21 ! Does the player mean taking something which is carried by the player ( this is the very unlikely to mean taking what's already carried rule ): ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 9/21 ! Does the player mean readying a readied weapon: ! === which is equally specific with === ! Rule 10/21 ! Does the player mean attacking a dead person: ! === which is equally specific with === ! Rule 11/21 ! Does the player mean piercing an alive person: ! === which is equally specific with === ! Rule 12/21 ! Does the player mean stunning an alive person: ! === which is equally specific with === ! Rule 13/21 ! Does the player mean reaping an alive person: ! === which is equally specific with === ! Rule 14/21 ! Does the player mean reaping a seen person: ! === which is equally specific with === ! Rule 15/21 ! Does the player mean dominating an alive person: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 16/21 ! Does the player mean readying a natural weapon: ! === which is equally specific with === ! Rule 17/21 ! Does the player mean inhaling an essence: ! === which is equally specific with === ! Rule 18/21 ! Does the player mean wearing clothing: ! === which is equally specific with === ! Rule 19/21 ! Does the player mean throwing a grenade: ! === which is equally specific with === ! Rule 20/21 ! Does the player mean spraying a sprayable: ! === which is equally specific with === ! Rule 21/21 ! Does the player mean reading a scroll: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Does the player mean applying a salve to something: [ R_1373 ; if ((action ==##A100_applying_it_to) && (actor==player) && ((noun ofclass K36_salve)) && ((second ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1373, 1373); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1373, 1373, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Does the player mean entering the portal to the elemental plane of smoke: [ R_1659 ; if ((action ==##Enter) && (actor==player) && ((noun == I426_portal_to_the_elemental) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1659, 1659); ! phrase 1 ! [1: it is likely] RulebookSucceeds(19, RBNO_7); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1659, 1659, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Events and Specials" by Victor Gijsbers ! Does the player mean entering the portal to Kerkerkruip: [ R_2072 ; if ((action ==##Enter) && (actor==player) && ((noun == I523_portal_to_kerkerkruip) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2072, 2072); ! phrase 1 ! [1: it is likely] RulebookSucceeds(19, RBNO_7); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2072, 2072, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean piercing the player: [ R_1696 ; if ((action ==##A104_piercing) && (actor==player) && ((noun == player) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1696, 1696); ! phrase 1 ! [1: it is unlikely] RulebookSucceeds(19, RBNO_9); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1696, 1696, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean stunning the player: [ R_1749 ; if ((action ==##A107_stunning) && (actor==player) && ((noun == player) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1749, 1749); ! phrase 1 ! [1: it is unlikely] RulebookSucceeds(19, RBNO_9); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1749, 1749, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean dominating the player: [ R_1876 ; if ((action ==##A112_dominating) && (actor==player) && ((noun == player) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1876, 1876); ! phrase 1 ! [1: it is unlikely] RulebookSucceeds(19, RBNO_9); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1876, 1876, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Does the player mean attacking a person opposed by the player: [ R_999 ; if ((action ==##Attack) && (actor==player) && ((noun ofclass K8_person) && ((Relation_69(player,noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_999, 999); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_999, 999, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Does the player mean taking something which is carried by the player ( this is the very unlikely to mean taking what's already carried rule ): [ R_36 ; if ((action ==##Take) && (actor==player) && ((noun ofclass K2_thing) && (player == CarrierOf(noun)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_36, 36); ! phrase 1 ! [1: it is very unlikely] RulebookSucceeds(19, RBNO_10); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_36, 36, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Does the player mean readying a readied weapon: [ R_991 ; if ((action ==##A87_readying) && (actor==player) && ((noun ofclass K17_weapon) && ((Adj_103_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_991, 991); ! phrase 1 ! [1: it is unlikely] RulebookSucceeds(19, RBNO_9); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_991, 991, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Does the player mean attacking a dead person: [ R_998 ; if ((action ==##Attack) && (actor==player) && ((noun ofclass K8_person) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_998, 998); ! phrase 1 ! [1: it is unlikely] RulebookSucceeds(19, RBNO_9); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_998, 998, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean piercing an alive person: [ R_1697 ; if ((action ==##A104_piercing) && (actor==player) && ((noun ofclass K8_person) && ((Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1697, 1697); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1697, 1697, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean stunning an alive person: [ R_1748 ; if ((action ==##A107_stunning) && (actor==player) && ((noun ofclass K8_person) && ((Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1748, 1748); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1748, 1748, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean reaping an alive person: [ R_1828 ; if ((action ==##A110_reaping) && (actor==player) && ((noun ofclass K8_person) && ((Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1828, 1828); ! phrase 1 ! [1: it is likely] RulebookSucceeds(19, RBNO_7); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1828, 1828, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean reaping a seen person: [ R_1829 ; if ((action ==##A110_reaping) && (actor==player) && ((noun ofclass K8_person) && ((Adj_91_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1829, 1829); ! phrase 1 ! [1: it is likely] RulebookSucceeds(19, RBNO_7); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1829, 1829, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Does the player mean dominating an alive person: [ R_1875 ; if ((action ==##A112_dominating) && (actor==player) && ((noun ofclass K8_person) && ((Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1875, 1875); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1875, 1875, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Does the player mean readying a natural weapon: [ R_964 ; if ((action ==##A87_readying) && (actor==player) && ((noun ofclass K18_natural_weapon))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_964, 964); ! phrase 1 ! [1: it is very unlikely] RulebookSucceeds(19, RBNO_10); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_964, 964, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Does the player mean inhaling an essence: [ R_1351 ; if ((action ==##A98_inhaling) && (actor==player) && ((noun ofclass K23_essence))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1351, 1351); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1351, 1351, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Does the player mean wearing clothing: [ R_1357 ; if ((action ==##Wear) && (actor==player) && ((noun ofclass K24_clothing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1357, 1357); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1357, 1357, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Does the player mean throwing a grenade: [ R_1370 ; if ((action ==##A99_throwing) && (actor==player) && ((noun ofclass K35_grenade))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1370, 1370); ! phrase 1 ! [1: it is likely] RulebookSucceeds(19, RBNO_7); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1370, 1370, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Does the player mean spraying a sprayable: [ R_1377 ; if ((action ==##A101_spraying) && (actor==player) && ((noun ofclass K37_sprayable))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1377, 1377); ! phrase 1 ! [1: it is very likely] RulebookSucceeds(19, RBNO_6); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1377, 1377, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Does the player mean reading a scroll: [ R_1379 ; if ((action ==##A102_reading) && (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1379, 1379); ! phrase 1 ! [1: it is likely] RulebookSucceeds(19, RBNO_7); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1379, 1379, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Printing the name (B29_before_printing_the_name) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/8 ! Before printing the name of something ( called macguffin ) while asking which do you mean ( this is the Numbered Disambiguation Choices preface disambiguation objects with numbers rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/8 ! Before printing the name of hot not flaming thing ( called item ): ! === which is equally specific with === ! Rule 3/8 ! Before printing the name of a cursed curse-identified thing: ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 4/8 ! Before printing the name of a dead person ( called body ) ( this is the improper print dead property rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 5/8 ! Before printing the name of a flaming thing ( called item ): ! === which is equally specific with === ! Rule 6/8 ! Before printing the name of a rusted thing: ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 7/8 ! Before printing the name of a thing ( called the item being printed ) ( this is the make named things mentioned rule ): ! === which is equally specific with === ! Rule 8/8 ! Before printing the name of a thing ( called item ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Numbered Disambiguation Choices" by Aaron Reed ! Before printing the name of something ( called macguffin ) while asking which do you mean ( this is the Numbered Disambiguation Choices preface disambiguation objects with numbers rule ): [ R_775 t_0 ! Local variable e.g. 'macguffin' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (((TestActivity(V20_asking_which_do_you_mean)))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_775, 775); ! phrase 1 ! [1: if disambiguation-busy is false begin] if (((((Global_Vars-->17) && true) == (0 && true)))) { ! phrase 2 ! [2: now disambiguation-busy is true] (Global_Vars-->17) = 1; ! phrase 3 ! [3: add macguffin to the list of disambiguables , if absent] LIST_OF_TY_InsertItem((Global_Vars-->16), t_0, 0, 0, 1); ! phrase 4 ! [4: now the disambiguation id of macguffin is the number of entries in list of disambiguables] WriteGProperty(9, t_0,p13_disambiguation_id, LIST_OF_TY_GetLength((Global_Vars-->16)) ); ! phrase 5 ! [5: say ~[before disambiguation number text][number of entries in list of disambiguables][after disambiguation number text]~] say__p=1;ParaContent(); print (PrintText) (Global_Vars-->18); ParaContent(); print (say__n= LIST_OF_TY_GetLength((Global_Vars-->16)) ); ParaContent(); print (PrintText) (Global_Vars-->19); .L_Say231; .L_SayX209; ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_775, 775, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Before printing the name of hot not flaming thing ( called item ): [ R_1210 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing) && ((Adj_39_t1_v9(parameter_object))) && (~~((Adj_201_t1_v9(parameter_object)))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1210, 1210); ! phrase 1 ! [1: unless not-mentioning-hotness is true begin] if (~~(((((Global_Vars-->82) && true) == (1 && true))))) { ! phrase 2 ! [2: if heat strength of item is less than 3 begin] if (((GProperty(9, t_0,p50_heat_strength) < 3))) { ! phrase 3 ! [3: say ~hot [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_569; ParaContent(); RunParagraphOn(); .L_Say232; .L_SayX210; ! phrase 4 ! [4: otherwise if heat strength of item is less than 6] } else if (((GProperty(9, t_0,p50_heat_strength) < 6))) { ! phrase 5 ! [5: say ~very hot [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_570; ParaContent(); RunParagraphOn(); .L_Say233; .L_SayX211; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: say ~blazingly hot [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_571; ParaContent(); RunParagraphOn(); .L_Say234; .L_SayX212; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1210, 1210, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Before printing the name of a cursed curse-identified thing: [ R_1397 ; if (((parameter_object ofclass K2_thing) && ((Adj_256_t1_v9(parameter_object))) && ((Adj_258_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1397, 1397); ! phrase 1 ! [1: say ~cursed ~] say__p=1;ParaContent(); print (PrintText) SC_572; .L_Say235; .L_SayX213; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1397, 1397, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Before printing the name of a dead person ( called body ) ( this is the improper print dead property rule ): [ R_831 t_0 ! Local variable e.g. 'body' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((~~Adj_33_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_831, 831); ! phrase 1 ! [1: if the printing dead property is true and the body is improper-named begin] if ((((((Global_Vars-->28) && true) == (1 && true)))) && ((((Adj_51_t1_v9(t_0)))))) { ! phrase 2 ! [2: say ~dead [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_573; ParaContent(); RunParagraphOn(); .L_Say236; .L_SayX214; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_831, 831, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Before printing the name of a flaming thing ( called item ): [ R_1217 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing) && ((Adj_201_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1217, 1217); ! phrase 1 ! [1: unless not-mentioning-flaming is true begin] if (~~(((((Global_Vars-->83) && true) == (1 && true))))) { ! phrase 2 ! [2: say ~burning [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_574; ParaContent(); RunParagraphOn(); .L_Say237; .L_SayX215; ! phrase 3 ! [3: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1217, 1217, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Before printing the name of a rusted thing: [ R_1230 ; if (((parameter_object ofclass K2_thing) && ((Adj_205_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1230, 1230); ! phrase 1 ! [1: if not-mentioning-rust is false , say ~rusted [run paragraph on]~] if (((((Global_Vars-->85) && true) == (0 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_575; ParaContent(); RunParagraphOn(); .L_Say238; .L_SayX216; } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1230, 1230, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Before printing the name of a thing ( called the item being printed ) ( this is the make named things mentioned rule ): [ R_58 t_0 ! Local variable e.g. 'item being printed' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_58, 58); ! phrase 1 ! [1: now the item being printed is mentioned] (Adj_72_t2_v9(t_0)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_58, 58, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Before printing the name of a thing ( called item ): [ R_1200 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1200, 1200); ! phrase 1 ! [1: if material of item is not original material of item begin] if (((~~((GProperty(9, t_0,p180_material) == GProperty(9, t_0,p49_original_material)))))) { ! phrase 2 ! [2: if item is not proper-named begin] if (((~~(((Adj_50_t1_v9(t_0))))))) { ! phrase 3 ! [3: say ~[material-adjective of material of item] ~] say__p=1;ParaContent(); @push self; print (PrintText) GProperty(50, self=GProperty(9, t_0,p180_material),p176_material_adjective); @pull self; ParaContent(); print (PrintText) SC_209; .L_Say239; .L_SayX217; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1200, 1200, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Printing the name (B31_after_printing_the_name) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! First after printing the name of a thing ( called item ): ! --- now the mid-placed rules --- ! Rule 2/7 ! After printing the name of a readied weapon while taking inventory ( this is the readied inventory listing rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 3/7 ! After printing the name of something while looking when in Hall of Mirrors: ! >>> II - When/while requirement >>> ! Rule 4/7 ! After printing the name of something while asking which do you mean ( this is the Numbered Disambiguation Choices cleanup disambiguation-busy flag rule ): ! >>> I - Number of aspects constrained >>> ! Rule 5/7 ! After printing the name of a dead person ( called body ) ( this is the proper print dead property rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 6/7 ! After printing the name of an ambiguously plural thing ( called the suspect ) ( this is the notice plurality of printed ambiguous object rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 7/7 ! After printing the name of something ( called the target ) ( this is the notice plurality of printed object rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First after printing the name of a thing ( called item ): [ R_1201 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1201, 1201); ! phrase 1 ! [1: if material of item is not original material of item begin] if (((~~((GProperty(9, t_0,p180_material) == GProperty(9, t_0,p49_original_material)))))) { ! phrase 2 ! [2: if item is proper-named begin] if ((((Adj_50_t1_v9(t_0))))) { ! phrase 3 ! [3: say ~ (now [material-adjective of material of item])~] say__p=1;ParaContent(); print (PrintText) SC_576; ParaContent(); @push self; print (PrintText) GProperty(50, self=GProperty(9, t_0,p180_material),p176_material_adjective); @pull self; ParaContent(); print (PrintText) SC_275; .L_Say240; .L_SayX218; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1201, 1201, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After printing the name of a readied weapon while taking inventory ( this is the readied inventory listing rule ): [ R_961 ; if (((parameter_object ofclass K17_weapon) && ((Adj_103_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (((((action ==##Inv) && (actor==player))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_961, 961); ! phrase 1 ! [1: say ~ (readied)~] say__p=1;ParaContent(); print (PrintText) SC_577; .L_Say241; .L_SayX219; } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_961, 961, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! After printing the name of something while looking when in Hall of Mirrors: [ R_1548 ; if (((parameter_object ofclass K2_thing))) { ! Runs only when pattern matches if (((((action ==##Look) && (actor==player) && (self=actor,true) && (( (WhetherIn(I378_hall_of_mirrors)) )))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1548, 1548); ! phrase 1 ! [1: say ~[run paragraph on]~] say__p=1;ParaContent(); RunParagraphOn(); .L_Say242; .L_SayX220; ! phrase 2 ! [2: unless the player is blind begin] if (~~(((PHR_1169_r17 (player))))) { ! phrase 3 ! [3: say ~ [one of](reflected thousandfold)[or](mirrored all around you)[or](copied and copied by mirrors)[or](multiplied ad infinitum)[at random]~ instead] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); I7_ST_say_one_of-->3 = i7_soo_ran(I7_ST_say_one_of-->3, 4); switch((I7_ST_say_one_of-->3)%(4+1)-1) { 0: ParaContent(); print (PrintText) SC_578; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_579; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_580; ParaContent(); @nop; 3: ParaContent(); print (PrintText) SC_581; ParaContent(); } rtrue; .L_Say243; .L_SayX221; rtrue; ! phrase 4 ! [4: end unless] } } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1548, 1548, true); rfalse; ]; ! No specific request ! From "Numbered Disambiguation Choices" by Aaron Reed ! After printing the name of something while asking which do you mean ( this is the Numbered Disambiguation Choices cleanup disambiguation-busy flag rule ): [ R_776 ; if (((parameter_object ofclass K2_thing))) { ! Runs only when pattern matches if (((TestActivity(V20_asking_which_do_you_mean)))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_776, 776); ! phrase 1 ! [1: now disambiguation-busy is false] (Global_Vars-->17) = 0; } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_776, 776, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! After printing the name of a dead person ( called body ) ( this is the proper print dead property rule ): [ R_832 t_0 ! Local variable e.g. 'body' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((~~Adj_33_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_832, 832); ! phrase 1 ! [1: if the printing dead property is true and the body is proper-named begin] if ((((((Global_Vars-->28) && true) == (1 && true)))) && ((((Adj_50_t1_v9(t_0)))))) { ! phrase 2 ! [2: say ~'s [if body is plural-named]bodies[otherwise]body[end if]~] say__p=1;ParaContent(); print (PrintText) SC_582; if (~~(((((Adj_48_t1_v9(t_0))))))) jump L_Say244; ParaContent(); print (PrintText) SC_558; jump L_SayX222; .L_Say244; ParaContent(); print (PrintText) SC_559; .L_Say245; .L_SayX222; .L_Say246; .L_SayX223; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_832, 832, true); rfalse; ]; ! No specific request ! From "Plurality" by Emily Short ! After printing the name of an ambiguously plural thing ( called the suspect ) ( this is the notice plurality of printed ambiguous object rule ): [ R_946 t_0 ! Local variable e.g. 'suspect' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing) && ((Adj_101_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_946, 946); ! phrase 1 ! [1: if the manual pronouns option is active begin] if ((((Adj_22_t1_v15(22))))) { ! phrase 2 ! [2: do nothing] ; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: notice the plurality of the suspect] PlugPlural(t_0); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_946, 946, true); rfalse; ]; ! No specific request ! From "Plurality" by Emily Short ! After printing the name of something ( called the target ) ( this is the notice plurality of printed object rule ): [ R_880 t_0 ! Local variable e.g. 'target' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_880, 880); ! phrase 1 ! [1: mark target in output] (PHR_881_r52 (t_0)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_880, 880, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing the plural name (B33_for_printing_the_plural_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Rule for printing the plural name of something ( called the item ) ( this is the standard printing the plural name rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Rule for printing the plural name of something ( called the item ) ( this is the standard printing the plural name rule ): [ R_59 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_59, 59); ! phrase 1 ! [1: say the printed plural name of the item] say__p=1;ParaContent(); @push self; print (PrintText) GProperty(9, self=t_0,plural); @pull self; .L_Say247; .L_SayX224; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_59, 59, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing a number (B36_for_printing_a_number) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Rule for printing a number of something ( called the item ) ( this is the standard printing a number of something rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Rule for printing a number of something ( called the item ) ( this is the standard printing a number of something rule ): [ R_60 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_60, 60); ! phrase 1 ! [1: say ~[listing group size in words] ~] say__p=1;ParaContent(); print (number) say__n=(listing_size); ParaContent(); print (PrintText) SC_209; .L_Say248; .L_SayX225; ! phrase 2 ! [2: carry out the printing the plural name activity with the item] CarryOutActivity(V1_printing_the_plural_name_, t_0); RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_60, 60, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing the announcement of light (B63_for_printing_the_announc) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! This is the look around once light available rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! This is the look around once light available rule: [ R_61 ; ! phrase 1 ! [1: try looking] TryAction(0, player, ##Look, 0, 0);; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Constructing the status line (B69_for_constructing_the_sta) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Rule for constructing the status line while displaying ( this is the constructing status line while displaying rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/2 ! Rule for constructing the status line: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Menus" by Emily Short ! Rule for constructing the status line while displaying ( this is the constructing status line while displaying rule ): [ R_748 ; if (((TestActivity(V32_displaying)))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_748, 748); ! phrase 1 ! [1: if the endnode flag is 0 , fill status bar with table of deep menu status] if ((((Global_Vars-->10) == 0))) { (PHR_768_r53 (T5_deep_menu_status)); } ! phrase 2 ! [2: otherwise fill status bar with table of shallow menu status] else { (PHR_768_r53 (T4_shallow_menu_status)); } ! phrase 3 ! [3: rule succeeds] RulebookSucceeds(); rtrue; RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_748, 748, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Rule for constructing the status line: [ R_2123 ; ! phrase 1 ! [1: fill status bar with table of fancy status] (PHR_768_r53 (T20_fancy_status)); ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Reading a command (B74_before_reading_a_command) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Before reading a command when roguelike mode is true ( this is the automatically save before input rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/2 ! Before reading a command ( this is the planning notification rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! Before reading a command when roguelike mode is true ( this is the automatically save before input rule ): [ R_816 ; if ((((((((Global_Vars-->23) && true) == (1 && true))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_816, 816); ! phrase 1 ! [1: write game data to the file of save data] FileIO_WriteSavedGame(I89_file_of_save_data); ! phrase 2 ! [2: continue the action] rfalse; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_816, 816, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before reading a command ( this is the planning notification rule ): [ R_1572 ; ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: if the nomos bonus is true begin] if (((((Global_Vars-->103) && true) == (1 && true)))) { ! phrase 3 ! [3: say ~[bold type](Remember: Nomos has told you to attack this turn.)[roman type][line break]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_583; ParaContent(); style roman; ParaContent(); new_line; .L_Say249; .L_SayX226; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Reading a command (B76_after_reading_a_command) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! After reading a command ( this is the Numbered Disambiguation Choices strip closing parenthesis rule ): ! === which is equally specific with === ! Rule 2/3 ! After reading a command ( this is the d might mean dodge rule ): ! === which is equally specific with === ! Rule 3/3 ! After reading a command ( this is the blank line is go to rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Numbered Disambiguation Choices" by Aaron Reed ! After reading a command ( this is the Numbered Disambiguation Choices strip closing parenthesis rule ): [ R_779 ;blockv_stack-->(blockv_sp+3) = BlkValueCreate(INDEXED_TEXT_TY,0,INDEXED_TEXT_TY); blockv_stack-->(blockv_sp+2) = BlkValueCreate(INDEXED_TEXT_TY,0,INDEXED_TEXT_TY); blockv_stack-->(blockv_sp+1) = BlkValueCreate(INDEXED_TEXT_TY,0,INDEXED_TEXT_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(INDEXED_TEXT_TY,0,INDEXED_TEXT_TY); blockv_sp = blockv_sp + 4; blockv_stack-->(blockv_sp++) = R_SHELL_9(blockv_sp-4); blockv_sp = blockv_sp - 5; BlkFree(blockv_stack-->(blockv_sp+3)); BlkFree(blockv_stack-->(blockv_sp+2)); BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+4); ]; [ R_SHELL_9 I7BASPL t_0 ! Local variable e.g. 'disam-cmd' = indexed text ; ! phrase 1 ! [1: let disam-cmd be indexed text] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: let disam-cmd be the player's command] BlkValueCast(t_0, INDEXED_TEXT_TY, SNIPPET_TY, players_command); ! phrase 3 ! [3: replace the regular expression ~@{5C})~ in disam-cmd with ~ ~] IT_Replace_RE(REGEXP_BLOB, t_0, BlkValueCast((blockv_stack-->(I7BASPL+1)),INDEXED_TEXT_TY,TEXT_TY,SC_584), BlkValueCast((blockv_stack-->(I7BASPL+2)),INDEXED_TEXT_TY,TEXT_TY,SC_209), 0); ! phrase 4 ! [4: change the text of the player's command to disam-cmd] SetPlayersCommand(t_0); ! phrase 5 ! [5: unless disam-cmd matches the regular expression ~@{5C}d+~ begin] if (~~(( IT_Replace_RE(REGEXP_BLOB,t_0,BlkValueCast((blockv_stack-->(I7BASPL+3)),INDEXED_TEXT_TY,TEXT_TY,SC_585),0,0) ))) { ! phrase 6 ! [6: consider the numbered disambiguation choices reset disambiguables rule] ProcessRulebook(R_777); ! phrase 7 ! [7: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! After reading a command ( this is the d might mean dodge rule ): [ R_1065 ; ! phrase 1 ! [1: if the player's command matches ~d~ and the player is at-react begin] if ((( (SnippetMatches(players_command, Consult_Grammar_226)) )) && (((player.p112_combat_state == I97_at_react)))) { ! phrase 2 ! [2: say ~[italic type](Perhaps you wanted to dodge? The abbreviation for that is 'do'.)[roman type][paragraph break]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_586; ParaContent(); style roman; ParaContent(); DivideParagraphPoint(); new_line; .L_Say250; .L_SayX227; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! After reading a command ( this is the blank line is go to rule ): [ R_2096 ;blockv_stack-->(blockv_sp+2) = BlkValueCreate(INDEXED_TEXT_TY,0,INDEXED_TEXT_TY); blockv_stack-->(blockv_sp+1) = BlkValueCreate(INDEXED_TEXT_TY,0,INDEXED_TEXT_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(INDEXED_TEXT_TY,0,INDEXED_TEXT_TY); blockv_sp = blockv_sp + 3; blockv_stack-->(blockv_sp++) = R_SHELL_10(blockv_sp-3); blockv_sp = blockv_sp - 4; BlkFree(blockv_stack-->(blockv_sp+2)); BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+3); ]; [ R_SHELL_10 I7BASPL t_0 ! Local variable e.g. 'T' = indexed text ; ! phrase 1 ! [1: let t be indexed text] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: now t is the player's command] BlkValueCast(t_0, INDEXED_TEXT_TY, SNIPPET_TY, players_command); ! phrase 3 ! [3: if t is ~~ , change the text of the player's command to ~go to~] if (((BlkValueCompare(t_0, BlkValueCast((blockv_stack-->(I7BASPL+1)), INDEXED_TEXT_TY, TEXT_TY, EMPTY_TEXT_VALUE))==0))) { SetPlayersCommand(BlkValueCast((blockv_stack-->(I7BASPL+2)),INDEXED_TEXT_TY,TEXT_TY,SC_587)); } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Deciding the scope (B79_after_deciding_the_scope) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! After deciding the scope of the player while in Drawing Room: ! === which is equally specific with === ! Rule 2/2 ! After deciding the scope of the player while adjusted scope for the drawing room is true: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! After deciding the scope of the player while in Drawing Room: [ R_1640 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (((parameter_object == player) && (true))) { ! Runs only when pattern matches if ((((( (WhetherIn(I416_drawing_room)) ))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1640, 1640); ! phrase 1 ! [1: repeat with guy running through alive not off-stage persons begin] for (t_0=Prop_110(0), t_1=Prop_110(t_0): t_0: t_0=t_1, t_1=Prop_110(t_1)) { ! phrase 2 ! [2: unless guy is nameless horror begin] if (~~(((t_0 == I499_nameless_horror)))) { ! phrase 3 ! [3: place guy in scope] PlaceInScope(t_0, 0); ! phrase 4 ! [4: end unless] } ! phrase 5 ! [5: end repeat] } } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1640, 1640, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! After deciding the scope of the player while adjusted scope for the drawing room is true: [ R_1641 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (((parameter_object == player) && (true))) { ! Runs only when pattern matches if ((((((((Global_Vars-->113) && true) == (1 && true))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1641, 1641); ! phrase 1 ! [1: repeat with guy running through alive not off-stage persons begin] for (t_0=Prop_111(0), t_1=Prop_111(t_0): t_0: t_0=t_1, t_1=Prop_111(t_1)) { ! phrase 2 ! [2: unless guy is nameless horror begin] if (~~(((t_0 == I499_nameless_horror)))) { ! phrase 3 ! [3: place guy in scope] PlaceInScope(t_0, 0); ! phrase 4 ! [4: end unless] } ! phrase 5 ! [5: end repeat] } } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1641, 1641, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Deciding whether all includes (B84_for_deciding_whether_all) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Rule for deciding whether all includes scenery while taking ( this is the exclude scenery from take all rule ): ! === which is equally specific with === ! Rule 2/3 ! Rule for deciding whether all includes fixed in place things while taking ( this is the exclude fixed in place things from take all rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 3/3 ! Rule for deciding whether all includes people while taking ( this is the exclude people from take all rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Rule for deciding whether all includes scenery while taking ( this is the exclude scenery from take all rule ): [ R_62 ; if ((((Adj_64_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (((((action ==##Take) && (actor==player))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_62, 62); ! phrase 1 ! [1: rule fails] RulebookFails(); rtrue; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_62, 62, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Rule for deciding whether all includes fixed in place things while taking ( this is the exclude fixed in place things from take all rule ): [ R_64 ; if (((parameter_object ofclass K2_thing) && ((Adj_62_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (((((action ==##Take) && (actor==player))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_64, 64); ! phrase 1 ! [1: rule fails] RulebookFails(); rtrue; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_64, 64, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Rule for deciding whether all includes people while taking ( this is the exclude people from take all rule ): [ R_63 ; if (((parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (((((action ==##Take) && (actor==player))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_63, 63); ! phrase 1 ! [1: rule fails] RulebookFails(); rtrue; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_63, 63, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Asking which do you mean (B89_before_asking_which_do_y) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Before asking which do you mean ( this is the Numbered Disambiguation Choices reset disambiguables rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Numbered Disambiguation Choices" by Aaron Reed ! Before asking which do you mean ( this is the Numbered Disambiguation Choices reset disambiguables rule ): [ R_777 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: repeat with item running through list of disambiguables begin] for (t_1=1, t_0=LIST_OF_TY_GetItem((Global_Vars-->16), t_1, true): t_1<=LIST_OF_TY_GetLength((Global_Vars-->16)): t_1++, t_0=LIST_OF_TY_GetItem((Global_Vars-->16), t_1, true)) { ! phrase 2 ! [2: now disambiguation id of item is 0] WriteGProperty(OBJECT_TY, t_0,p13_disambiguation_id,0); ! phrase 3 ! [3: end repeat] } ! phrase 4 ! [4: truncate list of disambiguables to 0 entries] LIST_OF_TY_SetLength((Global_Vars-->16), 0, -1, 1); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing a parser error (B93_for_printing_a_parser_er) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Rule for printing a parser error when the latest parser error is the didn't understand that number error ( this is the Numbered Disambiguation Choices don't use number rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Numbered Disambiguation Choices" by Aaron Reed ! Rule for printing a parser error when the latest parser error is the didn't understand that number error ( this is the Numbered Disambiguation Choices don't use number rule ): [ R_778 ; if ((((((etype == I70_didn_t_understand_that_n)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_778, 778); ! phrase 1 ! [1: now the latest parser error is the didn't understand error] etype = I68_didn_t_understand_error; ! phrase 2 ! [2: make no decision] rfalse; RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_778, 778, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Supplying a missing noun (B96_for_supplying_a_missing_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Rule for supplying a missing noun while an actor smelling ( this is the ambient odour rule ): ! === which is equally specific with === ! Rule 2/4 ! Rule for supplying a missing noun while an actor listening ( this is the ambient sound rule ): ! === which is equally specific with === ! Rule 3/4 ! Rule for supplying a missing noun while an actor going ( this is the alternative block vaguely going rule ): ! --- now the last-placed rules --- ! Rule 4/4 ! Rule for supplying a missing noun while entering ( this is the find what to enter rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Rule for supplying a missing noun while an actor smelling ( this is the ambient odour rule ): [ R_65 ; if (((((action ==##Smell) && (act_requester==nothing))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_65, 65); ! phrase 1 ! [1: now the noun is the location] noun = real_location; RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_65, 65, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Rule for supplying a missing noun while an actor listening ( this is the ambient sound rule ): [ R_66 ; if (((((action ==##Listen) && (act_requester==nothing))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_66, 66); ! phrase 1 ! [1: now the noun is the location] noun = real_location; RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_66, 66, true); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Rule for supplying a missing noun while an actor going ( this is the alternative block vaguely going rule ): [ R_1131 ; if (((((action ==##Go) && (act_requester==nothing))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1131, 1131); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: issue library message going action number 7] GL__M(##Go,7,noun); RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1131, 1131, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Rule for supplying a missing noun while entering ( this is the find what to enter rule ): [ R_148 t_0 ! Local variable e.g. 'box' = thing ; if (((((action ==##Enter) && (actor==player))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_148, 148); ! phrase 1 ! [1: if something enterable ( called the box ) is in the location , now the noun is the box] if ((Prop_112() && (t_0=deferred_calling_list-->0, true))) { noun = t_0; } ! phrase 2 ! [2: otherwise continue the activity] else { rfalse; } RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_148, 148, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Printing the player's obituary (B110_before_printing_the_pla) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Before printing the player's obituary ( this is the award Mageslayer achievement rule ): ! === which is equally specific with === ! Rule 2/4 ! Before printing the player's obituary ( this is the award Detox achievement rule ): ! === which is equally specific with === ! Rule 3/4 ! Before printing the player's obituary ( this is the award Unmoved achievement rule ): ! === which is equally specific with === ! Rule 4/4 ! Before printing the player's obituary ( this is the award fragile vessel achievement rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Before printing the player's obituary ( this is the award Mageslayer achievement rule ): [ R_2162 ; ! phrase 1 ! [1: if the player is victorious begin] if (((PHR_2144_r31 ()))) { ! phrase 2 ! [2: award achievement mageslayer] (PHR_2161_r13 (I533_mageslayer)); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Before printing the player's obituary ( this is the award Detox achievement rule ): [ R_2167 ; ! phrase 1 ! [1: if the player is victorious begin] if (((PHR_2144_r31 ()))) { ! phrase 2 ! [2: if ment addiction is 0 begin] if ((((Global_Vars-->96) == 0))) { ! phrase 3 ! [3: award achievement detox] (PHR_2161_r13 (I538_detox)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Before printing the player's obituary ( this is the award Unmoved achievement rule ): [ R_2171 ; ! phrase 1 ! [1: if the player is victorious begin] if (((PHR_2144_r31 ()))) { ! phrase 2 ! [2: if unmoved boolean is true begin] if (((((Global_Vars-->134) && true) == (1 && true)))) { ! phrase 3 ! [3: award achievement unmoved] (PHR_2161_r13 (I540_unmoved)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Before printing the player's obituary ( this is the award fragile vessel achievement rule ): [ R_2172 ; ! phrase 1 ! [1: if the player is victorious begin] if (((PHR_2144_r31 ()))) { ! phrase 2 ! [2: if permanent health of the player is less than 15 begin] if (((GProperty(9, player,p17_permanent_health) < 15))) { ! phrase 3 ! [3: award achievement nature's fragile vessel] (PHR_2161_r13 (I541_nature_s_fragile_vessel)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Printing the player's obituary (B112_after_printing_the_play) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! After printing the player's obituary when roguelike mode is true ( this is the delete save on finish rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/2 ! After printing the player's obituary: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! After printing the player's obituary when roguelike mode is true ( this is the delete save on finish rule ): [ R_824 ; if ((((((((Global_Vars-->23) && true) == (1 && true))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_824, 824); ! phrase 1 ! [1: delete file of save data] FileIO_DeleteSavedGame(I89_file_of_save_data); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_824, 824, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! After printing the player's obituary: [ R_2150 ; ! phrase 1 ! [1: write out the file of victories] (PHR_2135_r54 ()); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Handling the final question (B113_before_handling_the_fin) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! This is the print the final question rule: ! === which is equally specific with === ! Rule 2/3 ! This is the print the final prompt rule: ! --- now the last-placed rules --- ! Rule 3/3: READ_FINAL_ANSWER_R ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! This is the print the final question rule: [ R_69 t_0 ! Local variable e.g. 'named options count' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let named options count be 0] t_0 = 0; ! phrase 2 ! [2: repeat through the table of final question options begin] @push ct_0; @push ct_1; for (t_1=T0_final_question_options,t_2=1,ct_0=t_1,ct_1=t_2: t_2<=TableRows(t_1):t_2++,ct_0=t_1,ct_1=t_2) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 3 ! [3: if the only if victorious entry is false or the story has ended finally begin] if (((((TableLookUpEntry(ct_0,101,ct_1) && true) == (0 && true)))) || (( (story_complete) ))) { ! phrase 4 ! [4: if there is a final response rule entry or the final response activity entry is not empty begin] if ((( (ExistsTableLookUpEntry(ct_0,103,ct_1)) )) || (((~~(((Adj_16_t1_v29(TableLookUpEntry(ct_0,104,ct_1))))))))) { ! phrase 5 ! [5: if there is a final question wording entry , increase named options count by 1] if (( (ExistsTableLookUpEntry(ct_0,100,ct_1)) )) { t_0 = t_0 + 1; } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end repeat] } @pull ct_1; @pull ct_0; ! phrase 9 ! [9: if the named options count is less than 1 , abide by the immediately quit rule] if (((t_0 < 1))) { if (ProcessRulebook(IMMEDIATELY_QUIT_R)) rtrue; } ! phrase 10 ! [10: say ~Would you like to ~] say__p=1;ParaContent(); print (PrintText) SC_588; .L_Say251; .L_SayX228; ! phrase 11 ! [11: repeat through the table of final question options begin] @push ct_0; @push ct_1; for (t_1=T0_final_question_options,t_2=1,ct_0=t_1,ct_1=t_2: t_2<=TableRows(t_1):t_2++,ct_0=t_1,ct_1=t_2) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 12 ! [12: if the only if victorious entry is false or the story has ended finally begin] if (((((TableLookUpEntry(ct_0,101,ct_1) && true) == (0 && true)))) || (( (story_complete) ))) { ! phrase 13 ! [13: if there is a final response rule entry or the final response activity entry is not empty begin] if ((( (ExistsTableLookUpEntry(ct_0,103,ct_1)) )) || (((~~(((Adj_16_t1_v29(TableLookUpEntry(ct_0,104,ct_1))))))))) { ! phrase 14 ! [14: if there is a final question wording entry begin] if (( (ExistsTableLookUpEntry(ct_0,100,ct_1)) )) { ! phrase 15 ! [15: say final question wording entry] say__p=1;ParaContent(); print (PrintText) TableLookUpEntry(ct_0,100,ct_1); .L_Say252; .L_SayX229; ! phrase 16 ! [16: decrease named options count by 1] t_0 = t_0 - 1; ! phrase 17 ! [17: if the named options count is 0 begin] if (((t_0 == 0))) { ! phrase 18 ! [18: say ~?[line break]~] say__p=1;ParaContent(); print (PrintText) SC_589; ParaContent(); new_line; .L_Say253; .L_SayX230; ! phrase 19 ! [19: otherwise if the named options count is 1] } else if (((t_0 == 1))) { ! phrase 20 ! [20: if the serial comma option is active , say ~,~] if ((((Adj_22_t1_v15(5))))) { say__p=1;ParaContent(); print (PrintText) SC_590; .L_Say254; .L_SayX231; } ! phrase 21 ! [21: say ~ or ~] say__p=1;ParaContent(); print (PrintText) SC_591; .L_Say255; .L_SayX232; ! phrase 22 ! [22: otherwise] } else { ! phrase 23 ! [23: say ~, ~] say__p=1;ParaContent(); print (PrintText) SC_592; .L_Say256; .L_SayX233; ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: end if] } ! phrase 28 ! [28: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! No specific request ! From the Standard Rules ! This is the print the final prompt rule: [ R_68 ; ! phrase 1 ! [1: say ~> [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_593; ParaContent(); RunParagraphOn(); .L_Say257; .L_SayX234; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Handling the final question (B114_for_handling_the_final_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! This is the standard respond to final question rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! This is the standard respond to final question rule: [ R_70 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through the table of final question options begin] @push ct_0; @push ct_1; for (t_0=T0_final_question_options,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: if the only if victorious entry is false or the story has ended finally begin] if (((((TableLookUpEntry(ct_0,101,ct_1) && true) == (0 && true)))) || (( (story_complete) ))) { ! phrase 3 ! [3: if there is a final response rule entry or the final response activity entry is not empty begin] if ((( (ExistsTableLookUpEntry(ct_0,103,ct_1)) )) || (((~~(((Adj_16_t1_v29(TableLookUpEntry(ct_0,104,ct_1))))))))) { ! phrase 4 ! [4: if the player's command matches the topic entry begin] if (( (SnippetMatches(players_command, TableLookUpEntry(ct_0,102,ct_1))) )) { ! phrase 5 ! [5: if there is a final response rule entry , abide by final response rule entry] if (( (ExistsTableLookUpEntry(ct_0,103,ct_1)) )) { if (ProcessRulebook(TableLookUpEntry(ct_0,103,ct_1))) rtrue; } ! phrase 6 ! [6: otherwise carry out the final response activity entry activity] else { CarryOutActivity(TableLookUpEntry(ct_0,104,ct_1)); } ! phrase 7 ! [7: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end repeat] } @pull ct_1; @pull ct_0; ! phrase 12 ! [12: issue miscellaneous library message number 8] GL__M(##Miscellany,8); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Printing the locale description (B116_before_printing_the_loc) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Before printing the locale description of a room ( this is the environmental effects rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/3 ! Before printing the locale description ( this is the initialise locale description rule ): ! === which is equally specific with === ! Rule 3/3 ! Before printing the locale description ( this is the find notable locale objects rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Before printing the locale description of a room ( this is the environmental effects rule ): [ R_1255 ; if (((parameter_object ofclass K1_room))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1255, 1255); ! phrase 1 ! [1: if the smoke penalty of the location is greater than 0 begin] if ((((Resolver_9(real_location,"source", 1330)) > 0))) { ! phrase 2 ! [2: say ~[if smoke penalty of the location is greater than 2]Thick[otherwise]Thin[end if] [bold type]clouds of smoke[roman type][if location is rust-spored] and tiny brown spores of the [bold type]rust moss[roman type][end if] fill the room.~] say__p=1; if (~~(((((Resolver_9(real_location,"source", 1)) > 2))))) jump L_Say258; ParaContent(); print (PrintText) SC_594; jump L_SayX235; .L_Say258; ParaContent(); print (PrintText) SC_595; .L_Say259; .L_SayX235; ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_596; ParaContent(); style roman; if (~~(((((Adj_207_t1_v9(real_location))))))) jump L_Say260; ParaContent(); print (PrintText) SC_597; ParaContent(); style bold; ParaContent(); print (PrintText) SC_598; ParaContent(); style roman; .L_Say260; .L_SayX236; ParaContent(); print (PrintText) SC_599; new_line; .L_Say261; .L_SayX237; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if the location is rust-spored and the smoke penalty of the location is less than 1 begin] if (((((Adj_207_t1_v9(real_location))))) && ((((Resolver_9(real_location,"source", 1332)) < 1)))) { ! phrase 5 ! [5: say ~The air is full of the tiny brown spores of the [bold type]rust moss[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_600; ParaContent(); style bold; ParaContent(); print (PrintText) SC_598; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say262; .L_SayX238; ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1255, 1255, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Before printing the locale description ( this is the initialise locale description rule ): [ R_73 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: now the locale paragraph count is 0] (Global_Vars-->8) = 0; ! phrase 2 ! [2: repeat with item running through things begin] for (t_0=Prop_113(0), t_1=Prop_113(t_0): t_0: t_0=t_1, t_1=Prop_113(t_1)) { ! phrase 3 ! [3: now the item is not mentioned] (Adj_72_t3_v9(t_0)); ! phrase 4 ! [4: end repeat] } ! phrase 5 ! [5: repeat through the table of locale priorities begin] @push ct_0; @push ct_1; for (t_0=T1_locale_priorities,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 6 ! [6: blank out the whole row] TableBlankOutRow(ct_0, ct_1); ! phrase 7 ! [7: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! No specific request ! From the Standard Rules ! Before printing the locale description ( this is the find notable locale objects rule ): [ R_74 t_0 ! Local variable e.g. 'domain' = object ; ! phrase 1 ! [1: let the domain be the parameter-object] t_0 = parameter_object; ! phrase 2 ! [2: carry out the choosing notable locale objects activity with the domain] CarryOutActivity(V30_choosing_notable_locale_, t_0); ! phrase 3 ! [3: continue the activity] rfalse; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing the locale description (B117_for_printing_the_locale) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! For printing the locale description ( this is the interesting locale paragraphs rule ): ! === which is equally specific with === ! Rule 2/2 ! For printing the locale description ( this is the alternative-you-can-also-see rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! For printing the locale description ( this is the interesting locale paragraphs rule ): [ R_75 t_0 ! Local variable e.g. 'domain' = object t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let the domain be the parameter-object] t_0 = parameter_object; ! phrase 2 ! [2: sort the table of locale priorities in locale description priority order] TableSort(T1_locale_priorities, 106, 1); ! phrase 3 ! [3: repeat through the table of locale priorities begin] @push ct_0; @push ct_1; for (t_1=T1_locale_priorities,t_2=1,ct_0=t_1,ct_1=t_2: t_2<=TableRows(t_1):t_2++,ct_0=t_1,ct_1=t_2) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 4 ! [4: carry out the printing a locale paragraph about activity with the notable-object entry] CarryOutActivity(V31_printing_a_locale_paragr, TableLookUpEntry(ct_0,105,ct_1)); ! phrase 5 ! [5: end repeat] } @pull ct_1; @pull ct_0; ! phrase 6 ! [6: continue the activity] rfalse; RulebookSucceeds(); rtrue; rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! For printing the locale description ( this is the alternative-you-can-also-see rule ): [ R_2122 t_0 ! Local variable e.g. 'domain' = object t_1 ! Local variable e.g. 'mentionable count' = number t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = truth state t_4 ! Local variable e.g. '?-1,-1?' = thing t_5 ! Local variable e.g. '?-1,-1?' = thing ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let the domain be the parameter-object] t_0 = parameter_object; ! phrase 2 ! [2: let the mentionable count be 0] t_1 = 0; ! phrase 3 ! [3: repeat with item running through things begin] for (t_2=Prop_114(0), t_3=Prop_114(t_2): t_2: t_2=t_3, t_3=Prop_114(t_3)) { ! phrase 4 ! [4: now the item is not marked for listing] (Adj_70_t3_v9(t_2)); ! phrase 5 ! [5: end repeat] } ! phrase 6 ! [6: repeat through the table of locale priorities begin] @push ct_0; @push ct_1; for (t_2=T1_locale_priorities,t_3=1,ct_0=t_2,ct_1=t_3: t_3<=TableRows(t_2):t_3++,ct_0=t_2,ct_1=t_3) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 7 ! [7: if the locale description priority entry is greater than 0 , now the notable-object entry is marked for listing] if (((TableLookUpEntry(ct_0,106,ct_1) > 0))) { (Adj_70_t2_v9(TableLookUpEntry(ct_0,105,ct_1))); } ! phrase 8 ! [8: increase the mentionable count by 1] t_1 = t_1 + 1; ! phrase 9 ! [9: end repeat] } @pull ct_1; @pull ct_0; ! phrase 10 ! [10: if the mentionable count is greater than 0 begin] if (((t_1 > 0))) { ! phrase 11 ! [11: repeat with item running through things begin] for (t_2=Prop_115(0), t_3=Prop_115(t_2): t_2: t_2=t_3, t_3=Prop_115(t_3)) { ! phrase 12 ! [12: if the item is mentioned begin] if ((((Adj_72_t1_v9(t_2))))) { ! phrase 13 ! [13: now the item is not marked for listing] (Adj_70_t3_v9(t_2)); ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: begin the listing nondescript items activity with the domain] BeginActivity(V7_listing_nondescript_items, t_0); ! phrase 17 ! [17: if the number of marked for listing things is 0 begin] if ((( (Prop_116()) == 0))) { ! phrase 18 ! [18: abandon the listing nondescript items activity with the domain] AbandonActivity(V7_listing_nondescript_items, t_0); ! phrase 19 ! [19: otherwise] } else { ! phrase 20 ! [20: if handling the listing nondescript items activity begin] if (( (~~(ForActivity(V7_listing_nondescript_items))) )) { ! phrase 21 ! [21: if the domain is a room begin] if (((t_0 ofclass K1_room))) { ! phrase 22 ! [22: if the domain is the location , say ~You ~] if (((t_0 == real_location))) { say__p=1;ParaContent(); print (PrintText) SC_601; .L_Say263; .L_SayX239; } ! phrase 23 ! [23: otherwise say ~In [the domain] you ~] else { say__p=1;ParaContent(); print (PrintText) SC_602; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say264; .L_SayX240; } ! phrase 24 ! [24: otherwise if the domain is a supporter] } else if (((t_0 ofclass K6_supporter))) { ! phrase 25 ! [25: say ~On [the domain] you ~] say__p=1;ParaContent(); print (PrintText) SC_604; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say265; .L_SayX241; ! phrase 26 ! [26: otherwise if the domain is an animal] } else if (((t_0 ofclass K12_animal))) { ! phrase 27 ! [27: say ~On [the domain] you ~] say__p=1;ParaContent(); print (PrintText) SC_604; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say266; .L_SayX242; ! phrase 28 ! [28: otherwise] } else { ! phrase 29 ! [29: say ~In [the domain] you ~] say__p=1;ParaContent(); print (PrintText) SC_602; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say267; .L_SayX243; ! phrase 30 ! [30: end if] } ! phrase 31 ! [31: say ~can [if the locale paragraph count is greater than 0]also [end if][run paragraph on][unless player is blind][run paragraph on]see[otherwise]feel[end if] ~] say__p=1;ParaContent(); print (PrintText) SC_605; if (~~(((((Global_Vars-->8) > 0))))) jump L_Say268; ParaContent(); print (PrintText) SC_606; .L_Say268; .L_SayX244; ParaContent(); RunParagraphOn(); if ((((PHR_1169_r17 (player))))) jump L_Say269; ParaContent(); RunParagraphOn(); ParaContent(); print (PrintText) SC_607; jump L_SayX245; .L_Say269; ParaContent(); print (PrintText) SC_608; .L_Say270; .L_SayX245; ParaContent(); print (PrintText) SC_209; .L_Say271; .L_SayX246; ! phrase 32 ! [32: let the common holder be nothing] t_2 = nothing; ! phrase 33 ! [33: let contents form of list be true] t_3 = 1; ! phrase 34 ! [34: repeat with list item running through marked for listing things begin] for (t_4=Prop_117(0), t_5=Prop_117(t_4): t_4: t_4=t_5, t_5=Prop_117(t_5)) { ! phrase 35 ! [35: if the holder of the list item is not the common holder begin] if (((~~(( (HolderOf(t_4)) == t_2))))) { ! phrase 36 ! [36: if the common holder is nothing , now the common holder is the holder of the list item] if (((t_2 == nothing))) { t_2 = (HolderOf(t_4)) ; } ! phrase 37 ! [37: otherwise now contents form of list is false] else { t_3 = 0; } ! phrase 38 ! [38: end if] } ! phrase 39 ! [39: if the list item is mentioned , now the list item is not marked for listing] if ((((Adj_72_t1_v9(t_4))))) { (Adj_70_t3_v9(t_4)); } ! phrase 40 ! [40: end repeat] } ! phrase 41 ! [41: filter list recursion to unmentioned things] list_filter_routine = Prop_118; ! phrase 42 ! [42: if contents form of list is true and the common holder is not nothing , list the contents of the common holder , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , listing marked items only] if (((((t_3 && true) == (1 && true)))) && (((~~((t_2 == nothing)))))) { WriteListFrom(child(t_2), 2776); } ! phrase 43 ! [43: otherwise say ~[a list of marked for listing things including contents]~] else { say__p=1;ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && ((Adj_70_t1_v9(subst__v))))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+ TERSE_BIT+CONCEAL_BIT); @pull subst__v; .L_Say272; .L_SayX247; } ! phrase 44 ! [44: if the domain is the location , say ~ here~] if (((t_0 == real_location))) { say__p=1;ParaContent(); print (PrintText) SC_609; .L_Say273; .L_SayX248; } ! phrase 45 ! [45: say ~.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_310; ParaContent(); DivideParagraphPoint(); new_line; .L_Say274; .L_SayX249; ! phrase 46 ! [46: unfilter list recursion] list_filter_routine = 0; ! phrase 47 ! [47: end if] } ! phrase 48 ! [48: end the listing nondescript items activity with the domain] EndActivity(V7_listing_nondescript_items, t_0); ! phrase 49 ! [49: end if] } ! phrase 50 ! [50: end if] } ! phrase 51 ! [51: continue the activity] rfalse; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Choosing notable locale objects (B120_for_choosing_notable_lo) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! For choosing notable locale objects ( this is the standard notable locale objects rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! For choosing notable locale objects ( this is the standard notable locale objects rule ): [ R_77 t_0 ! Local variable e.g. 'domain' = object t_1 ! Local variable e.g. 'held item' = object ; ! phrase 1 ! [1: let the domain be the parameter-object] t_0 = parameter_object; ! phrase 2 ! [2: let the held item be the first thing held by the domain] t_1 = (child(t_0)) ; ! phrase 3 ! [3: while the held item is a thing begin] while (((t_1 ofclass K2_thing))) { ! phrase 4 ! [4: set the locale priority of the held item to 5] (PHR_72_r55 (t_1,5)); ! phrase 5 ! [5: now the held item is the next thing held after the held item] t_1 = (sibling(t_1)) ; ! phrase 6 ! [6: end while] } ! phrase 7 ! [7: continue the activity] rfalse; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing a locale paragraph about (B123_for_printing_a_locale_p) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention player's supporter in room descriptions rule ): ! === which is equally specific with === ! Rule 2/7 ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention scenery in room descriptions rule ): ! === which is equally specific with === ! Rule 3/7 ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention undescribed items in room descriptions rule ): ! === which is equally specific with === ! Rule 4/7 ! For printing a locale paragraph about a thing ( called the item ) ( this is the set pronouns from items in room descriptions rule ): ! === which is equally specific with === ! Rule 5/7 ! For printing a locale paragraph about a thing ( called the item ) ( this is the offer items to writing a paragraph about rule ): ! === which is equally specific with === ! Rule 6/7 ! For printing a locale paragraph about a thing ( called the item ) ( this is the use initial appearance in room descriptions rule ): ! === which is equally specific with === ! Rule 7/7 ! For printing a locale paragraph about a thing ( called the item ) ( this is the describe what's on scenery supporters in room descriptions rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention player's supporter in room descriptions rule ): [ R_78 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_78, 78); ! phrase 1 ! [1: if the item encloses the player , set the locale priority of the item to 0] if (((IndirectlyContains(t_0,player)))) { (PHR_72_r55 (t_0,0)); } ! phrase 2 ! [2: continue the activity] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_78, 78, true); rfalse; ]; ! No specific request ! From the Standard Rules ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention scenery in room descriptions rule ): [ R_79 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_79, 79); ! phrase 1 ! [1: if the item is scenery , set the locale priority of the item to 0] if ((((Adj_64_t1_v9(t_0))))) { (PHR_72_r55 (t_0,0)); } ! phrase 2 ! [2: continue the activity] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_79, 79, true); rfalse; ]; ! No specific request ! From the Standard Rules ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention undescribed items in room descriptions rule ): [ R_80 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_80, 80); ! phrase 1 ! [1: if the item is undescribed begin] if ((((Adj_69_t1_v9(t_0))))) { ! phrase 2 ! [2: set the locale priority of the item to 0] (PHR_72_r55 (t_0,0)); ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: continue the activity] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_80, 80, true); rfalse; ]; ! No specific request ! From the Standard Rules ! For printing a locale paragraph about a thing ( called the item ) ( this is the set pronouns from items in room descriptions rule ): [ R_81 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_81, 81); ! phrase 1 ! [1: if the item is not mentioned , set pronouns from the item] if (((~~(((Adj_72_t1_v9(t_0))))))) { PronounNotice(t_0); } ! phrase 2 ! [2: continue the activity] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_81, 81, true); rfalse; ]; ! No specific request ! From the Standard Rules ! For printing a locale paragraph about a thing ( called the item ) ( this is the offer items to writing a paragraph about rule ): [ R_82 t_0 ! Local variable e.g. 'item' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_82, 82); ! phrase 1 ! [1: if the item is not mentioned begin] if (((~~(((Adj_72_t1_v9(t_0))))))) { ! phrase 2 ! [2: if a paragraph break is pending , say ~[conditional paragraph break]~] if (( (say__p) )) { say__p=1;ParaContent(); DivideParagraphPoint(); .L_Say275; .L_SayX250; } ! phrase 3 ! [3: carry out the writing a paragraph about activity with the item] CarryOutActivity(V6_writing_a_paragraph_about, t_0); ! phrase 4 ! [4: if a paragraph break is pending begin] if (( (say__p) )) { ! phrase 5 ! [5: increase the locale paragraph count by 1] (Global_Vars-->8) = (Global_Vars-->8) + 1; ! phrase 6 ! [6: now the item is mentioned] (Adj_72_t2_v9(t_0)); ! phrase 7 ! [7: say ~[command clarification break]~] say__p=1;ParaContent(); CommandClarificationBreak(); .L_Say276; .L_SayX251; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: continue the activity] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_82, 82, true); rfalse; ]; ! No specific request ! From the Standard Rules ! For printing a locale paragraph about a thing ( called the item ) ( this is the use initial appearance in room descriptions rule ): [ R_83 t_0 ! Local variable e.g. 'item' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_83, 83); ! phrase 1 ! [1: if the item is not mentioned begin] if (((~~(((Adj_72_t1_v9(t_0))))))) { ! phrase 2 ! [2: if the item provides the property initial appearance and the item is not handled and the initial appearance of the item is not ~~ begin] if ((((WhetherProvides(t_0, false, initial)))) && ((((~~(((Adj_67_t1_v9(t_0))))))) && (((~~((GProperty(9, t_0,initial) == EMPTY_TEXT_VALUE))))))) { ! phrase 3 ! [3: increase the locale paragraph count by 1] (Global_Vars-->8) = (Global_Vars-->8) + 1; ! phrase 4 ! [4: say ~[initial appearance of the item]~] say__p=1;ParaContent(); @push self; print (PrintText) GProperty(9, self=t_0,initial); @pull self; .L_Say277; .L_SayX252; ! phrase 5 ! [5: say ~[paragraph break]~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say278; .L_SayX253; ! phrase 6 ! [6: if a locale-supportable thing is on the item begin] if ((Prop_119(,t_0))) { ! phrase 7 ! [7: repeat with possibility running through things on the item begin] for (t_1=Prop_120(,t_0,0), t_2=Prop_120(,t_0,t_1): t_1: t_1=t_2, t_2=Prop_120(,t_0,t_2)) { ! phrase 8 ! [8: now the possibility is marked for listing] (Adj_70_t2_v9(t_1)); ! phrase 9 ! [9: if the possibility is mentioned begin] if ((((Adj_72_t1_v9(t_1))))) { ! phrase 10 ! [10: now the possibility is not marked for listing] (Adj_70_t3_v9(t_1)); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: say ~On [the item] ~] say__p=1;ParaContent(); print (PrintText) SC_604; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_209; .L_Say279; .L_SayX254; ! phrase 14 ! [14: list the contents of the item , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , prefacing with is/are , listing marked items only] WriteListFrom(child(t_0), 3800); ! phrase 15 ! [15: say ~.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_310; ParaContent(); DivideParagraphPoint(); new_line; .L_Say280; .L_SayX255; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: now the item is mentioned] (Adj_72_t2_v9(t_0)); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: continue the activity] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_83, 83, true); rfalse; ]; ! No specific request ! From the Standard Rules ! For printing a locale paragraph about a thing ( called the item ) ( this is the describe what's on scenery supporters in room descriptions rule ): [ R_85 t_0 ! Local variable e.g. 'item' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = thing ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K2_thing))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_85, 85); ! phrase 1 ! [1: if the item is scenery and the item does not enclose the player begin] if (((((Adj_64_t1_v9(t_0))))) && (((~~((IndirectlyContains(t_0,player))))))) { ! phrase 2 ! [2: if a locale-supportable thing is on the item begin] if ((Prop_121(,t_0))) { ! phrase 3 ! [3: set pronouns from the item] PronounNotice(t_0); ! phrase 4 ! [4: repeat with possibility running through things on the item begin] for (t_1=Prop_122(,t_0,0), t_2=Prop_122(,t_0,t_1): t_1: t_1=t_2, t_2=Prop_122(,t_0,t_2)) { ! phrase 5 ! [5: now the possibility is marked for listing] (Adj_70_t2_v9(t_1)); ! phrase 6 ! [6: if the possibility is mentioned begin] if ((((Adj_72_t1_v9(t_1))))) { ! phrase 7 ! [7: now the possibility is not marked for listing] (Adj_70_t3_v9(t_1)); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } ! phrase 10 ! [10: increase the locale paragraph count by 1] (Global_Vars-->8) = (Global_Vars-->8) + 1; ! phrase 11 ! [11: say ~On [the item] ~] say__p=1;ParaContent(); print (PrintText) SC_604; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_209; .L_Say281; .L_SayX256; ! phrase 12 ! [12: list the contents of the item , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , prefacing with is/are , listing marked items only] WriteListFrom(child(t_0), 3800); ! phrase 13 ! [13: say ~.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_310; ParaContent(); DivideParagraphPoint(); new_line; .L_Say282; .L_SayX257; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: continue the activity] rfalse; RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_85, 85, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Taking inventory (B125_check_taking_inventory) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check taking inventory ( this is the cannot take inventory when grappled rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check taking inventory ( this is the cannot take inventory when grappled rule ): [ R_1899 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1899, 1899); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_123())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_124()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~Caught in [the X], you are unable to get a good look at your possessions!~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_611; new_line; rtrue; .L_Say283; .L_SayX258; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1899, 1899, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Taking inventory (B126_carry_out_taking_invent) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out taking inventory: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out taking inventory: [ R_2125 t_0 ! Local variable e.g. 'm' = number ; if (actor == player) { if (debug_rules) DB_Rule(R_2125, 2125); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: if the number of things had by the player is 0 , say ~You are empty-handed.~ instead] if ((( (Prop_125()) == 0))) { say__p=1;ParaContent(); print (PrintText) SC_612; new_line; .L_Say284; .L_SayX259; rtrue; } ! phrase 3 ! [3: unless the number of weapons enclosed by the player is the number of natural weapons enclosed by the player begin] if (~~((( (Prop_126()) == (Prop_127()) )))) { ! phrase 4 ! [4: say ~You are carrying[line break][italic type]-weapons[roman type]: [line break]~] say__p=1;ParaContent(); print (PrintText) SC_613; ParaContent(); new_line; ParaContent(); style underline; ParaContent(); print (PrintText) SC_614; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); new_line; .L_Say285; .L_SayX260; ! phrase 5 ! [5: now all things enclosed by the player are unmarked for listing] Prop_128(); ! phrase 6 ! [6: now all weapons enclosed by the player are marked for listing] Prop_129(); ! phrase 7 ! [7: now all natural weapons enclosed by the player are unmarked for listing] Prop_130(); ! phrase 8 ! [8: list the contents of the player , with newlines , indented , giving inventory information , including contents , with extra indentation , listing marked items only] WriteListFrom(child(player), 8727); ! phrase 9 ! [9: end unless] } ! phrase 10 ! [10: unless the number of clothing enclosed by the player is 0 begin] if (~~((( (Prop_131()) == 0)))) { ! phrase 11 ! [11: say ~[italic type]-clothing[roman type]:[line break]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_615; ParaContent(); style roman; ParaContent(); print (PrintText) SC_616; ParaContent(); new_line; .L_Say286; .L_SayX261; ! phrase 12 ! [12: now all things enclosed by the player are unmarked for listing] Prop_132(); ! phrase 13 ! [13: now all clothing enclosed by the player are marked for listing] Prop_133(); ! phrase 14 ! [14: list the contents of the player , with newlines , indented , giving inventory information , including contents , with extra indentation , listing marked items only] WriteListFrom(child(player), 8727); ! phrase 15 ! [15: end unless] } ! phrase 16 ! [16: unless the number of scrolls enclosed by the player is 0 begin] if (~~((( (Prop_134()) == 0)))) { ! phrase 17 ! [17: say ~[italic type]-scrolls[roman type]:[line break]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_617; ParaContent(); style roman; ParaContent(); print (PrintText) SC_616; ParaContent(); new_line; .L_Say287; .L_SayX262; ! phrase 18 ! [18: now all things enclosed by the player are unmarked for listing] Prop_135(); ! phrase 19 ! [19: now all scrolls enclosed by the player are marked for listing] Prop_136(); ! phrase 20 ! [20: list the contents of the player , with newlines , indented , giving inventory information , including contents , with extra indentation , listing marked items only] WriteListFrom(child(player), 8727); ! phrase 21 ! [21: end unless] } ! phrase 22 ! [22: unless the number of grenades enclosed by the player is 0 begin] if (~~((( (Prop_137()) == 0)))) { ! phrase 23 ! [23: say ~[italic type]-grenades[roman type]:[line break]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_618; ParaContent(); style roman; ParaContent(); print (PrintText) SC_616; ParaContent(); new_line; .L_Say288; .L_SayX263; ! phrase 24 ! [24: now all things enclosed by the player are unmarked for listing] Prop_138(); ! phrase 25 ! [25: now all grenades enclosed by the player are marked for listing] Prop_139(); ! phrase 26 ! [26: list the contents of the player , with newlines , indented , giving inventory information , including contents , with extra indentation , listing marked items only] WriteListFrom(child(player), 8727); ! phrase 27 ! [27: end unless] } ! phrase 28 ! [28: let m be the number of things enclosed by the player] t_0 = (Prop_140()) ; ! phrase 29 ! [29: decrease m by the number of weapons enclosed by the player] t_0 = t_0 - (Prop_141()) ; ! phrase 30 ! [30: decrease m by the number of clothing enclosed by the player] t_0 = t_0 - (Prop_142()) ; ! phrase 31 ! [31: decrease m by the number of scrolls enclosed by the player] t_0 = t_0 - (Prop_143()) ; ! phrase 32 ! [32: decrease m by the number of grenades enclosed by the player] t_0 = t_0 - (Prop_144()) ; ! phrase 33 ! [33: unless m is 0 begin] if (~~(((t_0 == 0)))) { ! phrase 34 ! [34: say ~[italic type]-other[roman type]:[line break]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_619; ParaContent(); style roman; ParaContent(); print (PrintText) SC_616; ParaContent(); new_line; .L_Say289; .L_SayX264; ! phrase 35 ! [35: now all things enclosed by the player are marked for listing] Prop_145(); ! phrase 36 ! [36: now all weapons enclosed by the player are unmarked for listing] Prop_146(); ! phrase 37 ! [37: now all clothing enclosed by the player are unmarked for listing] Prop_147(); ! phrase 38 ! [38: now all scrolls enclosed by the player are unmarked for listing] Prop_148(); ! phrase 39 ! [39: now all grenades enclosed by the player are unmarked for listing] Prop_149(); ! phrase 40 ! [40: list the contents of the player , with newlines , indented , giving inventory information , including contents , with extra indentation , listing marked items only] WriteListFrom(child(player), 8727); ! phrase 41 ! [41: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2125, 2125, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Taking inventory (B127_report_taking_inventory) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor taking inventory ( this is the report other people taking inventory rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor taking inventory ( this is the report other people taking inventory rule ): [ R_88 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_88, 88); ! phrase 1 ! [1: if the actor is not the player , issue actor-based library message taking inventory action number 5 for the actor] if (((~~((actor == player))))) { AGL__M(##Inv,5,actor); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_88, 88, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Taking (B128_check_taking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/14 ! Check taking the skull-sized rubies: ! >>> I - Number of aspects constrained >>> ! Rule 2/14 ! Check an actor taking ( this is the can't take yourself rule ): ! === which is equally specific with === ! Rule 3/14 ! Check an actor taking ( this is the can't take other people rule ): ! === which is equally specific with === ! Rule 4/14 ! Check an actor taking ( this is the can't take component parts rule ): ! === which is equally specific with === ! Rule 5/14 ! Check an actor taking ( this is the can't take items out of play rule ): ! === which is equally specific with === ! Rule 6/14 ! Check an actor taking ( this is the can't take what you're inside rule ): ! === which is equally specific with === ! Rule 7/14 ! Check an actor taking ( this is the can't take scenery rule ): ! === which is equally specific with === ! Rule 8/14 ! Check an actor taking ( this is the can only take things rule ): ! === which is equally specific with === ! Rule 9/14 ! Check an actor taking ( this is the can't take what's fixed in place rule ): ! === which is equally specific with === ! Rule 10/14 ! Check an actor taking ( this is the use player's holdall to avoid exceeding carrying capacity rule ): ! === which is equally specific with === ! Rule 11/14 ! Check an actor taking ( this is the can't exceed carrying capacity rule ): ! === which is equally specific with === ! Rule 12/14 ! Check an actor taking ( this is the can't take living people's possessions rule ): ! === which is equally specific with === ! Rule 13/14 ! Check an actor taking ( this is the alternative can't take what's already taken rule ): ! >>> III - Action requirement >>> ! Rule 14/14 ! Check taking ( this is the cannot take when grappled rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Check taking the skull-sized rubies: [ R_1543 ; if ( (actor==player) && ((noun == I376_skull_sized_rubies) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1543, 1543); ! phrase 1 ! [1: say ~They are secured to the ceiling by magic more powerful than you can break.~ instead] say__p=1;ParaContent(); print (PrintText) SC_620; new_line; rtrue; .L_Say290; .L_SayX265; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1543, 1543, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take yourself rule ): [ R_89 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_89, 89); ! phrase 1 ! [1: if the actor is the noun , stop the action with library message taking action number 2 for the noun] if (((actor == noun))) { return GL__M(##Take,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_89, 89, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take other people rule ): [ R_90 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_90, 90); ! phrase 1 ! [1: if the noun is a person , stop the action with library message taking action number 3 for the noun] if (((noun ofclass K8_person))) { return GL__M(##Take,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_90, 90, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take component parts rule ): [ R_91 t_0 ! Local variable e.g. 'whole' = thing ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_91, 91); ! phrase 1 ! [1: if the noun is part of something ( called the whole ) , stop the action with library message taking action number 7 for the whole] if ((((noun.component_parent) ofclass K2_thing) && (t_0=((noun.component_parent)), true))) { return GL__M(##Take,7,t_0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_91, 91, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take items out of play rule ): [ R_93 t_0 ! Local variable e.g. 'H' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_93, 93); ! phrase 1 ! [1: let h be the noun] t_0 = noun; ! phrase 2 ! [2: while h is not nothing and h is not a room begin] while ((((~~((t_0 == nothing))))) && (((~~((t_0 ofclass K1_room)))))) { ! phrase 3 ! [3: let h be the not-counting-parts holder of h] t_0 = (CoreOfParentOfCoreOf(t_0)) ; ! phrase 4 ! [4: end while] } ! phrase 5 ! [5: if h is nothing , stop the action with library message taking action number 8 for the noun] if (((t_0 == nothing))) { return GL__M(##Take,8,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_93, 93, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take what you're inside rule ): [ R_94 t_0 ! Local variable e.g. 'local ceiling' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_94, 94); ! phrase 1 ! [1: let the local ceiling be the common ancestor of the actor with the noun] t_0 = (CommonAncestor(actor, noun)) ; ! phrase 2 ! [2: if the local ceiling is the noun , stop the action with library message taking action number 4 for the noun] if (((t_0 == noun))) { return GL__M(##Take,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_94, 94, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take scenery rule ): [ R_96 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_96, 96); ! phrase 1 ! [1: if the noun is scenery , stop the action with library message taking action number 10 for the noun] if ((((Adj_64_t1_v9(noun))))) { return GL__M(##Take,10,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_96, 96, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can only take things rule ): [ R_97 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_97, 97); ! phrase 1 ! [1: if the noun is not a thing , stop the action with library message taking action number 15 for the noun] if (((~~((noun ofclass K2_thing))))) { return GL__M(##Take,15,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_97, 97, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take what's fixed in place rule ): [ R_98 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_98, 98); ! phrase 1 ! [1: if the noun is fixed in place , stop the action with library message taking action number 11 for the noun] if ((((Adj_62_t1_v9(noun))))) { return GL__M(##Take,11,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_98, 98, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the use player's holdall to avoid exceeding carrying capacity rule ): [ R_99 t_0 ! Local variable e.g. 'current working sack' = player's holdall t_1 ! Local variable e.g. '?-1,-1?' = object t_2 ! Local variable e.g. '?-1,-1?' = thing t_3 ! Local variable e.g. '?-1,-1?' = thing ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_99, 99); ! phrase 1 ! [1: if the number of things carried by the actor is at least the carrying capacity of the actor begin] if ((( (Prop_150()) >= GProperty(9, actor,capacity)))) { ! phrase 2 ! [2: if the actor is holding a player's holdall ( called the current working sack ) begin] if ((Prop_151() && (t_0=deferred_calling_list-->0, true))) { ! phrase 3 ! [3: let the transferred item be nothing] t_1 = nothing; ! phrase 4 ! [4: repeat with the possible item running through things carried by the actor begin] for (t_2=Prop_152(0), t_3=Prop_152(t_2): t_2: t_2=t_3, t_3=Prop_152(t_3)) { ! phrase 5 ! [5: if the possible item is not lit and the possible item is not the current working sack , let the transferred item be the possible item] if ((((~~(((Adj_58_t1_v9(t_2))))))) && (((~~((t_2 == t_0)))))) { t_1 = t_2; } ! phrase 6 ! [6: end repeat] } ! phrase 7 ! [7: if the transferred item is not nothing begin] if (((~~((t_1 == nothing))))) { ! phrase 8 ! [8: issue library message taking action number 13 for the transferred item and the current working sack] GL__M(##Take,13,t_1,t_0); ! phrase 9 ! [9: silently try the actor trying inserting the transferred item into the current working sack] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Insert, t_1, t_0);; @pull keep_silent; ! phrase 10 ! [10: if the transferred item is not in the current working sack , stop the action] if (((~~((t_0 == ContainerOf(t_1)))))) { rtrue; } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_99, 99, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't exceed carrying capacity rule ): [ R_100 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_100, 100); ! phrase 1 ! [1: if the number of things carried by the actor is at least the carrying capacity of the actor , stop the action with library message taking action number 12 for the actor] if ((( (Prop_153()) >= GProperty(9, actor,capacity)))) { return GL__M(##Take,12,actor); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_100, 100, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check an actor taking ( this is the can't take living people's possessions rule ): [ R_955 t_0 ! Local variable e.g. 'local ceiling' = object t_1 ! Local variable e.g. 'H' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_955, 955); ! phrase 1 ! [1: let the local ceiling be the common ancestor of the actor with the noun] t_0 = (CommonAncestor(actor, noun)) ; ! phrase 2 ! [2: let h be the not-counting-parts holder of the noun] t_1 = (CoreOfParentOfCoreOf(noun)) ; ! phrase 3 ! [3: while h is not nothing and h is not the local ceiling begin] while ((((~~((t_1 == nothing))))) && (((~~((t_1 == t_0)))))) { ! phrase 4 ! [4: if h is an alive person begin] if (((t_1 ofclass K8_person) && ((Adj_33_t1_v9(t_1))))) { ! phrase 5 ! [5: stop the action with library message taking action number 6 for h] return GL__M(##Take,6,t_1); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: let h be the not-counting-parts holder of h] t_1 = (CoreOfParentOfCoreOf(t_1)) ; ! phrase 8 ! [8: end while] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_955, 955, true); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Check an actor taking ( this is the alternative can't take what's already taken rule ): [ R_1133 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1133, 1133); ! phrase 1 ! [1: if the actor is carrying the noun begin] if (((actor == CarrierOf(noun)))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: stop the action with library message taking action number 5 for the noun] return GL__M(##Take,5,noun); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if the actor is wearing the noun begin] if (((actor == WearerOf(noun)))) { ! phrase 6 ! [6: take no time] (PHR_853_r33 ()); ! phrase 7 ! [7: stop the action with library message taking action number 5 for the noun] return GL__M(##Take,5,noun); ! phrase 8 ! [8: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1133, 1133, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check taking ( this is the cannot take when grappled rule ): [ R_1896 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1896, 1896); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_154())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_155()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~Caught in [the X], you are unable to reach [the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_621; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say291; .L_SayX266; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1896, 1896, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Taking (B129_carry_out_taking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out an actor taking ( this is the standard taking rule ): ! >>> III - Action requirement >>> ! Rule 2/2 ! Carry out taking: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor taking ( this is the standard taking rule ): [ R_101 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_101, 101); ! phrase 1 ! [1: now the actor carries the noun] MoveObject(noun,actor); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_101, 101, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Carry out taking: [ R_1312 ; if (actor == player) { if (debug_rules) DB_Rule(R_1312, 1312); ! phrase 1 ! [1: increase detection probability by 20] (Global_Vars-->89) = (Global_Vars-->89) + 20; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1312, 1312, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Taking (B130_report_taking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor taking ( this is the standard report taking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor taking ( this is the standard report taking rule ): [ R_102 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_102, 102); ! phrase 1 ! [1: if the actor is the player , issue library message taking action number 1 for the noun] if (((actor == player))) { GL__M(##Take,1,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message taking action number 16 for the noun] else { AGL__M(##Take,16,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_102, 102, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Removing it from (B131_check_removing_it_from) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check an actor taking ( this is the can't take component parts rule ): ! <<< I - Number of aspects constrained <<< ! Rule 2/4 ! Check an actor removing something from ( this is the can't remove what's not inside rule ): ! === which is equally specific with === ! Rule 3/4 ! Check an actor removing something from ( this is the can't remove from people rule ): ! === which is equally specific with === ! Rule 4/4 ! Check an actor removing something from ( this is the convert remove to take rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor removing something from ( this is the can't remove what's not inside rule ): [ R_103 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_103, 103); ! phrase 1 ! [1: if the holder of the noun is not the second noun , stop the action with library message removing it from action number 2 for the noun] if (((~~(( (HolderOf(noun)) == second))))) { return GL__M(##Remove,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_103, 103, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor removing something from ( this is the can't remove from people rule ): [ R_104 t_0 ! Local variable e.g. 'owner' = object ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_104, 104); ! phrase 1 ! [1: let the owner be the holder of the noun] t_0 = (HolderOf(noun)) ; ! phrase 2 ! [2: if the owner is a person begin] if (((t_0 ofclass K8_person))) { ! phrase 3 ! [3: if the owner is the actor , convert to the taking off action on the noun] if (((t_0 == actor))) { return GVS_Convert(##Disrobe,noun,0); } ! phrase 4 ! [4: stop the action with library message taking action number 6 for the owner] return GL__M(##Take,6,t_0); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_104, 104, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor removing something from ( this is the convert remove to take rule ): [ R_105 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_105, 105); ! phrase 1 ! [1: convert to the taking action on the noun] return GVS_Convert(##Take,noun,0); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_105, 105, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Dropping (B134_check_dropping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check an actor dropping ( this is the can't drop yourself rule ): ! === which is equally specific with === ! Rule 2/6 ! Check an actor dropping ( this is the can't drop what's already dropped rule ): ! === which is equally specific with === ! Rule 3/6 ! Check an actor dropping ( this is the can't drop what's not held rule ): ! === which is equally specific with === ! Rule 4/6 ! Check an actor dropping ( this is the can't drop clothes being worn rule ): ! === which is equally specific with === ! Rule 5/6 ! Check an actor dropping ( this is the can't drop if this exceeds carrying capacity rule ): ! >>> III - Action requirement >>> ! Rule 6/6 ! Check dropping ( this is the cannot drop a cursed readied weapon rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor dropping ( this is the can't drop yourself rule ): [ R_106 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_106, 106); ! phrase 1 ! [1: if the noun is the actor , stop the action with library message putting it on action number 4] if (((noun == actor))) { return GL__M(##PutOn,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_106, 106, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor dropping ( this is the can't drop what's already dropped rule ): [ R_107 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_107, 107); ! phrase 1 ! [1: if the noun is in the holder of the actor , stop the action with library message dropping action number 1 for the noun] if ((( (HolderOf(actor)) == ContainerOf(noun)))) { return GL__M(##Drop,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_107, 107, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor dropping ( this is the can't drop what's not held rule ): [ R_108 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_108, 108); ! phrase 1 ! [1: if the actor is carrying the noun , continue the action] if (((actor == CarrierOf(noun)))) { rfalse; } ! phrase 2 ! [2: if the actor is wearing the noun , continue the action] if (((actor == WearerOf(noun)))) { rfalse; } ! phrase 3 ! [3: stop the action with library message dropping action number 2 for the noun] return GL__M(##Drop,2,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_108, 108, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor dropping ( this is the can't drop clothes being worn rule ): [ R_109 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_109, 109); ! phrase 1 ! [1: if the actor is wearing the noun begin] if (((actor == WearerOf(noun)))) { ! phrase 2 ! [2: issue library message dropping action number 3 for the noun] GL__M(##Drop,3,noun); ! phrase 3 ! [3: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Disrobe, noun, 0);; @pull keep_silent; ! phrase 4 ! [4: if the actor is wearing the noun , stop the action] if (((actor == WearerOf(noun)))) { rtrue; } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_109, 109, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor dropping ( this is the can't drop if this exceeds carrying capacity rule ): [ R_110 t_0 ! Local variable e.g. 'H' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_110, 110); ! phrase 1 ! [1: let h be the holder of the actor] t_0 = (HolderOf(actor)) ; ! phrase 2 ! [2: if h is a room , continue the action] if (((t_0 ofclass K1_room))) { rfalse; } ! phrase 3 ! [3: if h provides the property carrying capacity begin] if (((WhetherProvides(t_0, false, capacity)))) { ! phrase 4 ! [4: if h is a supporter begin] if (((t_0 ofclass K6_supporter))) { ! phrase 5 ! [5: if the number of things on h is at least the carrying capacity of h begin] if ((( (Prop_156(,t_0)) >= GProperty(OBJECT_TY, t_0,capacity)))) { ! phrase 6 ! [6: if the actor is the player , issue library message dropping action number 5 for h] if (((actor == player))) { GL__M(##Drop,5,t_0); } ! phrase 7 ! [7: stop the action] rtrue; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: otherwise if h is a container] } else if (((t_0 ofclass K5_container))) { ! phrase 10 ! [10: if the number of things in h is at least the carrying capacity of h begin] if ((( (Prop_157(,t_0)) >= GProperty(OBJECT_TY, t_0,capacity)))) { ! phrase 11 ! [11: if the actor is the player , issue library message dropping action number 6 for h] if (((actor == player))) { GL__M(##Drop,6,t_0); } ! phrase 12 ! [12: stop the action] rtrue; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_110, 110, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check dropping ( this is the cannot drop a cursed readied weapon rule ): [ R_1401 ; if (actor == player) { if (debug_rules) DB_Rule(R_1401, 1401); ! phrase 1 ! [1: if the noun is a readied cursed weapon had by the player begin] if (((noun ofclass K17_weapon) && ((Adj_103_t1_v9(noun))) && ((Adj_256_t1_v9(noun))) && (player == OwnerOf(noun)))) { ! phrase 2 ! [2: say ~You cannot let go of [the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_622; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say292; .L_SayX267; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1401, 1401, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Dropping (B135_carry_out_dropping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out an actor dropping ( this is the standard dropping rule ): ! >>> III - Action requirement >>> ! Rule 2/2 ! Carry out dropping: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor dropping ( this is the standard dropping rule ): [ R_111 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_111, 111); ! phrase 1 ! [1: now the noun is in the holder of the actor] MoveObject(noun, (HolderOf(actor)) ); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_111, 111, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Carry out dropping: [ R_1311 ; if (actor == player) { if (debug_rules) DB_Rule(R_1311, 1311); ! phrase 1 ! [1: increase detection probability by 20] (Global_Vars-->89) = (Global_Vars-->89) + 20; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1311, 1311, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Dropping (B136_report_dropping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor dropping ( this is the standard report dropping rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor dropping ( this is the standard report dropping rule ): [ R_112 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_112, 112); ! phrase 1 ! [1: if the actor is the player , issue library message dropping action number 4 for the noun] if (((actor == player))) { GL__M(##Drop,4,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message dropping action number 7 for the noun] else { AGL__M(##Drop,7,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_112, 112, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Putting it on (B137_check_putting_it_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/9 ! Check putting a salve on something: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 2/9 ! Check an actor putting something on ( this is the convert put to drop where possible rule ): ! === which is equally specific with === ! Rule 3/9 ! Check an actor putting something on ( this is the can't put what's not held rule ): ! === which is equally specific with === ! Rule 4/9 ! Check an actor putting something on ( this is the can't put something on itself rule ): ! === which is equally specific with === ! Rule 5/9 ! Check an actor putting something on ( this is the can't put onto what's not a supporter rule ): ! === which is equally specific with === ! Rule 6/9 ! Check an actor putting something on ( this is the can't put onto something being carried rule ): ! === which is equally specific with === ! Rule 7/9 ! Check an actor putting something on ( this is the can't put clothes being worn rule ): ! === which is equally specific with === ! Rule 8/9 ! Check an actor putting something on ( this is the can't put if this exceeds carrying capacity rule ): ! >>> I - Number of aspects constrained >>> ! Rule 9/9 ! Check putting it on ( this is the cannot put on a cursed readied weapon rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check putting a salve on something: [ R_1374 ; if ( (actor==player) && ((noun ofclass K36_salve)) && ((second ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1374, 1374); ! phrase 1 ! [1: try applying the noun to the second noun instead] TryAction(0, player, ##A100_applying_it_to, noun, second);; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1374, 1374, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor putting something on ( this is the convert put to drop where possible rule ): [ R_113 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_113, 113); ! phrase 1 ! [1: if the second noun is down or the actor is on the second noun , convert to the dropping action on the noun] if ((((second == I55_down))) || (((second == SupporterOf(actor))))) { return GVS_Convert(##Drop,noun,0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_113, 113, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor putting something on ( this is the can't put what's not held rule ): [ R_114 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_114, 114); ! phrase 1 ! [1: if the actor is carrying the noun , continue the action] if (((actor == CarrierOf(noun)))) { rfalse; } ! phrase 2 ! [2: if the actor is wearing the noun , continue the action] if (((actor == WearerOf(noun)))) { rfalse; } ! phrase 3 ! [3: issue miscellaneous library message number 26 for the noun] GL__M(##Miscellany,26, noun); ! phrase 4 ! [4: silently try the actor taking the noun] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Take, noun, 0);; @pull keep_silent; ! phrase 5 ! [5: if the actor is carrying the noun , continue the action] if (((actor == CarrierOf(noun)))) { rfalse; } ! phrase 6 ! [6: stop the action with library message putting it on action number 1 for the noun] return GL__M(##PutOn,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_114, 114, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor putting something on ( this is the can't put something on itself rule ): [ R_115 t_0 ! Local variable e.g. 'noun-CPC' = object t_1 ! Local variable e.g. 'second-CPC' = object t_2 ! Local variable e.g. 'transfer ceiling' = object ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_115, 115); ! phrase 1 ! [1: let the noun-cpc be the component parts core of the noun] t_0 = CoreOf(noun) ; ! phrase 2 ! [2: let the second-cpc be the component parts core of the second noun] t_1 = CoreOf(second) ; ! phrase 3 ! [3: let the transfer ceiling be the common ancestor of the noun-cpc with the second-cpc] t_2 = (CommonAncestor(t_0, t_1)) ; ! phrase 4 ! [4: if the transfer ceiling is the noun-cpc , stop the action with library message putting it on action number 2 for the noun] if (((t_2 == t_0))) { return GL__M(##PutOn,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_115, 115, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor putting something on ( this is the can't put onto what's not a supporter rule ): [ R_116 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_116, 116); ! phrase 1 ! [1: if the second noun is not a supporter , stop the action with library message putting it on action number 3 for the second noun] if (((~~((second ofclass K6_supporter))))) { return GL__M(##PutOn,3,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_116, 116, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor putting something on ( this is the can't put onto something being carried rule ): [ R_117 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_117, 117); ! phrase 1 ! [1: if the actor encloses the second noun , stop the action with library message putting it on action number 4 for the second noun] if (((IndirectlyContains(actor,second)))) { return GL__M(##PutOn,4,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_117, 117, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor putting something on ( this is the can't put clothes being worn rule ): [ R_118 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_118, 118); ! phrase 1 ! [1: if the actor is wearing the noun begin] if (((actor == WearerOf(noun)))) { ! phrase 2 ! [2: issue library message putting it on action number 5 for the noun] GL__M(##PutOn,5,noun); ! phrase 3 ! [3: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Disrobe, noun, 0);; @pull keep_silent; ! phrase 4 ! [4: if the actor is wearing the noun , stop the action] if (((actor == WearerOf(noun)))) { rtrue; } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_118, 118, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor putting something on ( this is the can't put if this exceeds carrying capacity rule ): [ R_119 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_119, 119); ! phrase 1 ! [1: if the second noun provides the property carrying capacity begin] if (((WhetherProvides(second, false, capacity)))) { ! phrase 2 ! [2: if the number of things on the second noun is at least the carrying capacity of the second noun , stop the action with library message putting it on action number 6 for the second noun] if ((( (Prop_158()) >= GProperty(OBJECT_TY, second,capacity)))) { return GL__M(##PutOn,6,second); } ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_119, 119, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check putting it on ( this is the cannot put on a cursed readied weapon rule ): [ R_1402 ; if (actor == player) { if (debug_rules) DB_Rule(R_1402, 1402); ! phrase 1 ! [1: if the noun is a readied cursed weapon had by the player begin] if (((noun ofclass K17_weapon) && ((Adj_103_t1_v9(noun))) && ((Adj_256_t1_v9(noun))) && (player == OwnerOf(noun)))) { ! phrase 2 ! [2: say ~You cannot let go of [the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_622; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say293; .L_SayX268; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1402, 1402, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Putting it on (B138_carry_out_putting_it_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor putting something on ( this is the standard putting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor putting something on ( this is the standard putting rule ): [ R_120 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_120, 120); ! phrase 1 ! [1: now the noun is on the second noun] MoveObject(noun,second); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_120, 120, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Putting it on (B139_report_putting_it_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor putting something on ( this is the concise report putting rule ): ! === which is equally specific with === ! Rule 2/2 ! Report an actor putting something on ( this is the standard report putting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor putting something on ( this is the concise report putting rule ): [ R_121 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_121, 121); ! phrase 1 ! [1: if the actor is the player and the i6 parser is running multiple actions , stop the action with library message putting it on action number 7 for the noun] if ((((actor == player))) && (( (multiflag==1) ))) { return GL__M(##PutOn,7,noun); } ! phrase 2 ! [2: otherwise continue the action] else { rfalse; } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_121, 121, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor putting something on ( this is the standard report putting rule ): [ R_122 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_122, 122); ! phrase 1 ! [1: if the actor is the player , issue library message putting it on action number 8 for the noun] if (((actor == player))) { GL__M(##PutOn,8,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message putting it on action number 9 for the noun] else { AGL__M(##PutOn,9,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_122, 122, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Inserting it into (B140_check_inserting_it_into) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/10 ! Check an actor inserting something into ( this is the convert insert to drop where possible rule ): ! === which is equally specific with === ! Rule 2/10 ! Check an actor inserting something into ( this is the can't insert what's not held rule ): ! === which is equally specific with === ! Rule 3/10 ! Check an actor inserting something into ( this is the can't insert something into itself rule ): ! === which is equally specific with === ! Rule 4/10 ! Check an actor inserting something into ( this is the can't insert into closed containers rule ): ! === which is equally specific with === ! Rule 5/10 ! Check an actor inserting something into ( this is the can't insert into what's not a container rule ): ! === which is equally specific with === ! Rule 6/10 ! Check an actor inserting something into ( this is the can't insert clothes being worn rule ): ! === which is equally specific with === ! Rule 7/10 ! Check an actor inserting something into ( this is the can't insert if this exceeds carrying capacity rule ): ! >>> I - Number of aspects constrained >>> ! Rule 8/10 ! Check inserting it into ( this is the cannot insert a cursed readied weapon rule ): ! --- now the last-placed rules --- ! Rule 9/10 ! Last check inserting something into the curious machine: ! === which is equally specific with === ! Rule 10/10 ! Last check inserting something into the scroll analyser: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor inserting something into ( this is the convert insert to drop where possible rule ): [ R_123 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_123, 123); ! phrase 1 ! [1: if the second noun is down or the actor is in the second noun , convert to the dropping action on the noun] if ((((second == I55_down))) || (((second == ContainerOf(actor))))) { return GVS_Convert(##Drop,noun,0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_123, 123, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor inserting something into ( this is the can't insert what's not held rule ): [ R_124 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_124, 124); ! phrase 1 ! [1: if the actor is carrying the noun , continue the action] if (((actor == CarrierOf(noun)))) { rfalse; } ! phrase 2 ! [2: if the actor is wearing the noun , continue the action] if (((actor == WearerOf(noun)))) { rfalse; } ! phrase 3 ! [3: issue miscellaneous library message number 26 for the noun] GL__M(##Miscellany,26, noun); ! phrase 4 ! [4: silently try the actor taking the noun] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Take, noun, 0);; @pull keep_silent; ! phrase 5 ! [5: if the actor is carrying the noun , continue the action] if (((actor == CarrierOf(noun)))) { rfalse; } ! phrase 6 ! [6: stop the action] rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_124, 124, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor inserting something into ( this is the can't insert something into itself rule ): [ R_125 t_0 ! Local variable e.g. 'noun-CPC' = object t_1 ! Local variable e.g. 'second-CPC' = object t_2 ! Local variable e.g. 'transfer ceiling' = object ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_125, 125); ! phrase 1 ! [1: let the noun-cpc be the component parts core of the noun] t_0 = CoreOf(noun) ; ! phrase 2 ! [2: let the second-cpc be the component parts core of the second noun] t_1 = CoreOf(second) ; ! phrase 3 ! [3: let the transfer ceiling be the common ancestor of the noun-cpc with the second-cpc] t_2 = (CommonAncestor(t_0, t_1)) ; ! phrase 4 ! [4: if the transfer ceiling is the noun-cpc , stop the action with library message inserting it into action number 5 for the noun] if (((t_2 == t_0))) { return GL__M(##Insert,5,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_125, 125, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor inserting something into ( this is the can't insert into closed containers rule ): [ R_126 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_126, 126); ! phrase 1 ! [1: if the second noun is a closed container , stop the action with library message inserting it into action number 3 for the second noun] if (((second ofclass K5_container) && ((Adj_78_t1_v9(second))))) { return GL__M(##Insert,3,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_126, 126, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor inserting something into ( this is the can't insert into what's not a container rule ): [ R_127 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_127, 127); ! phrase 1 ! [1: if the second noun is not a container , stop the action with library message inserting it into action number 2 for the second noun] if (((~~((second ofclass K5_container))))) { return GL__M(##Insert,2,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_127, 127, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor inserting something into ( this is the can't insert clothes being worn rule ): [ R_128 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_128, 128); ! phrase 1 ! [1: if the actor is wearing the noun begin] if (((actor == WearerOf(noun)))) { ! phrase 2 ! [2: issue library message inserting it into action number 6 for the noun] GL__M(##Insert,6,noun); ! phrase 3 ! [3: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Disrobe, noun, 0);; @pull keep_silent; ! phrase 4 ! [4: if the actor is wearing the noun , stop the action] if (((actor == WearerOf(noun)))) { rtrue; } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_128, 128, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor inserting something into ( this is the can't insert if this exceeds carrying capacity rule ): [ R_129 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_129, 129); ! phrase 1 ! [1: if the second noun provides the property carrying capacity begin] if (((WhetherProvides(second, false, capacity)))) { ! phrase 2 ! [2: if the number of things in the second noun is at least the carrying capacity of the second noun , stop the action with library message inserting it into action number 7 for the second noun] if ((( (Prop_159()) >= GProperty(OBJECT_TY, second,capacity)))) { return GL__M(##Insert,7,second); } ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_129, 129, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check inserting it into ( this is the cannot insert a cursed readied weapon rule ): [ R_1403 ; if (actor == player) { if (debug_rules) DB_Rule(R_1403, 1403); ! phrase 1 ! [1: if the noun is a readied cursed weapon had by the player begin] if (((noun ofclass K17_weapon) && ((Adj_103_t1_v9(noun))) && ((Adj_256_t1_v9(noun))) && (player == OwnerOf(noun)))) { ! phrase 2 ! [2: say ~You cannot let go of [the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_622; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say294; .L_SayX269; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1403, 1403, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Last check inserting something into the curious machine: [ R_1618 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K2_thing)) && ((second == I406_curious_machine) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1618, 1618); ! phrase 1 ! [1: if the noun is a grenade begin] if (((noun ofclass K35_grenade))) { ! phrase 2 ! [2: say ~The machine beeps angrily and rejects [the noun].~] say__p=1;ParaContent(); print (PrintText) SC_623; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say295; .L_SayX270; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if more than zero grenades are off-stage begin] if ((Prop_160())) { ! phrase 5 ! [5: let chosen grenade be a random flash grenade] t_0 = (Prop_161()) ; ! phrase 6 ! [6: let m be a random number between 1 and 4] t_1 = R_DecimalNumber(1, 4) ; ! phrase 7 ! [7: if m is 2 , now chosen grenade is a random rust grenade] if (((t_1 == 2))) { t_0 = (Prop_162()) ; } ! phrase 8 ! [8: if m is 3 , now chosen grenade is a random fragmentation grenade] if (((t_1 == 3))) { t_0 = (Prop_163()) ; } ! phrase 9 ! [9: if m is 4 , now chosen grenade is a random smoke grenade] if (((t_1 == 4))) { t_0 = (Prop_164()) ; } ! phrase 10 ! [10: let item be a new object cloned from chosen grenade] t_2 = DO_CloneObject(t_0, 0); ; ! phrase 11 ! [11: move item to the location] MoveObject(t_2, real_location, 0, false); ! phrase 12 ! [12: remove the noun from play] RemoveFromPlay(noun); ! phrase 13 ! [13: say ~You put [the noun] in the curious machine. It starts clicking and beeping, and after a short while, [an item] drops on the ground.~] say__p=1;ParaContent(); print (PrintText) SC_624; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_625; ParaContent(); print (a) t_2; ParaContent(); print (PrintText) SC_626; new_line; .L_Say296; .L_SayX271; ! phrase 14 ! [14: otherwise] } else { ! phrase 15 ! [15: say ~You put [the noun] in the curious machine, but when nothing happens, you take it out again.~] say__p=1;ParaContent(); print (PrintText) SC_624; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_627; new_line; .L_Say297; .L_SayX272; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1618, 1618, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Last check inserting something into the scroll analyser: [ R_1635 t_0 ! Local variable e.g. '?-1,-1?' = scroll-effect-value t_1 ! Local variable e.g. '?-1,-1?' = scroll t_2 ! Local variable e.g. '?-1,-1?' = scroll ct_0 ct_1 ! Used for table searches ; if ( (actor==player) && ((noun ofclass K2_thing)) && ((second == I415_scroll_analyser) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1635, 1635); ! phrase 1 ! [1: if the noun is not a scroll or scroll analyser count is less than 1 begin] if ((((~~((noun ofclass K38_scroll))))) || ((((Global_Vars-->112) < 1)))) { ! phrase 2 ! [2: say ~The scroll analyser refuses to open.~] say__p=1;ParaContent(); print (PrintText) SC_628; new_line; .L_Say298; .L_SayX273; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: decrease scroll analyser count by 1] (Global_Vars-->112) = (Global_Vars-->112) - 1; ! phrase 5 ! [5: let effect be scroll-effect of the noun] t_0 = GProperty(OBJECT_TY, noun,p56_scroll_effect); ! phrase 6 ! [6: if player has-knowledge-of effect begin] if (((player == (GProperty(54, t_0, p217_having_knowledge_of))))) { ! phrase 7 ! [7: say ~The machine confirms that this is [a noun].[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_629; ParaContent(); print (a) noun; ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say299; .L_SayX274; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: repeat through table of magic scrolls begin] @push ct_0; @push ct_1; for (t_1=T18_magic_scrolls,t_2=1,ct_0=t_1,ct_1=t_2: t_2<=TableRows(t_1):t_2++,ct_0=t_1,ct_1=t_2) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 10 ! [10: if scroll-effect entry is effect and true-name entry is true begin] if ((((TableLookUpEntry(ct_0,140,ct_1) == t_0))) && ((((TableLookUpEntry(ct_0,141,ct_1) && true) == (1 && true))))) { ! phrase 11 ! [11: say ~It is a [scroll entry]![run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_630; ParaContent(); print (PrintShortName) TableLookUpEntry(ct_0,139,ct_1); ParaContent(); print (PrintText) SC_426; ParaContent(); RunParagraphOn(); .L_Say300; .L_SayX275; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end repeat] } @pull ct_1; @pull ct_0; ! phrase 14 ! [14: scroll-effect-identify effect] (PHR_1386_r56 (t_0)); ! phrase 15 ! [15: repeat with item running through scrolls carried by the player begin] for (t_1=Prop_165(0), t_2=Prop_165(t_1): t_1: t_1=t_2, t_2=Prop_165(t_2)) { ! phrase 16 ! [16: if scroll-effect of item is effect begin] if (((GProperty(9, t_1,p56_scroll_effect) == t_0))) { ! phrase 17 ! [17: have the parser notice item] (PHR_948_r57 (t_1)); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end repeat] } ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: if scroll analyser count is less than 1 begin] if ((((Global_Vars-->112) < 1))) { ! phrase 22 ! [22: say ~ As you take back your scroll, something snaps within the analyser. It will probably never work again.~] say__p=1;ParaContent(); print (PrintText) SC_631; new_line; .L_Say301; .L_SayX276; ! phrase 23 ! [23: otherwise] } else { ! phrase 24 ! [24: say ~[paragraph break]~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say302; .L_SayX277; ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1635, 1635, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Inserting it into (B141_carry_out_inserting_it_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! First carry out inserting something into the seething lake of lava: ! --- now the mid-placed rules --- ! Rule 2/2 ! Carry out an actor inserting something into ( this is the standard inserting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! First carry out inserting something into the seething lake of lava: [ R_1566 ; if ( (actor==player) && ((noun ofclass K2_thing)) && ((second == I386_seething_lake_of_lava) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1566, 1566); ! phrase 1 ! [1: remove the noun from play] RemoveFromPlay(noun); ! phrase 2 ! [2: say ~You throw [the noun] into the lava.~ instead] say__p=1;ParaContent(); print (PrintText) SC_632; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_633; new_line; rtrue; .L_Say303; .L_SayX278; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1566, 1566, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out an actor inserting something into ( this is the standard inserting rule ): [ R_130 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_130, 130); ! phrase 1 ! [1: now the noun is in the second noun] MoveObject(noun,second); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_130, 130, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Inserting it into (B142_report_inserting_it_int) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor inserting something into ( this is the concise report inserting rule ): ! === which is equally specific with === ! Rule 2/2 ! Report an actor inserting something into ( this is the standard report inserting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor inserting something into ( this is the concise report inserting rule ): [ R_131 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_131, 131); ! phrase 1 ! [1: if the actor is the player and the i6 parser is running multiple actions , stop the action with library message inserting it into action number 8 for the noun] if ((((actor == player))) && (( (multiflag==1) ))) { return GL__M(##Insert,8,noun); } ! phrase 2 ! [2: otherwise continue the action] else { rfalse; } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_131, 131, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor inserting something into ( this is the standard report inserting rule ): [ R_132 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_132, 132); ! phrase 1 ! [1: if the actor is the player , issue library message inserting it into action number 9 for the noun] if (((actor == player))) { GL__M(##Insert,9,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message inserting it into action number 10 for the noun] else { AGL__M(##Insert,10,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_132, 132, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Eating (B143_check_eating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor eating ( this is the can't eat unless edible rule ): ! === which is equally specific with === ! Rule 2/2 ! Check an actor eating ( this is the can't eat clothing without removing it first rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor eating ( this is the can't eat unless edible rule ): [ R_133 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_133, 133); ! phrase 1 ! [1: if the noun is not a thing or the noun is not edible , stop the action with library message eating action number 1 for the noun] if ((((~~((noun ofclass K2_thing))))) || (((~~(((Adj_60_t1_v9(noun)))))))) { return GL__M(##Eat,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_133, 133, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor eating ( this is the can't eat clothing without removing it first rule ): [ R_134 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_134, 134); ! phrase 1 ! [1: if the actor is wearing the noun begin] if (((actor == WearerOf(noun)))) { ! phrase 2 ! [2: issue library message dropping action number 3 for the noun] GL__M(##Drop,3,noun); ! phrase 3 ! [3: try the actor trying taking off the noun] TryAction(0, actor, ##Disrobe, noun, 0);; ! phrase 4 ! [4: if the actor is wearing the noun , stop the action] if (((actor == WearerOf(noun)))) { rtrue; } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_134, 134, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Eating (B144_carry_out_eating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor eating ( this is the standard eating rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor eating ( this is the standard eating rule ): [ R_135 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_135, 135); ! phrase 1 ! [1: remove the noun from play] RemoveFromPlay(noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_135, 135, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Eating (B145_report_eating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor eating ( this is the standard report eating rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor eating ( this is the standard report eating rule ): [ R_136 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_136, 136); ! phrase 1 ! [1: if the actor is the player , issue library message eating action number 2 for the noun] if (((actor == player))) { GL__M(##Eat,2,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message eating action number 3 for the noun] else { AGL__M(##Eat,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_136, 136, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Going (B146_check_going) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11 ! Check an actor going when the actor is on a supporter ( called the chaise ) ( this is the stand up before going rule ): ! >>> III.5.2 - Action/When/Circumstances >>> ! Rule 2/11 ! Check an actor going when the room gone to is nothing ( this is the alternative can't go that way rule ): ! >>> I - Number of aspects constrained >>> ! Rule 3/11 ! Check an actor going ( this is the can't travel in what's not a vehicle rule ): ! === which is equally specific with === ! Rule 4/11 ! Check an actor going ( this is the can't go through undescribed doors rule ): ! === which is equally specific with === ! Rule 5/11 ! Check an actor going ( this is the can't go through closed doors rule ): ! === which is equally specific with === ! Rule 6/11 ! Check an actor going ( this is the determine map connection rule ): ! >>> III - Action requirement >>> ! Rule 7/11 ! Check going ( this is the cannot go when grappled rule ): ! === which is equally specific with === ! Rule 8/11 ! Check going ( this is the cannot go as a reaction rule ): ! --- now the last-placed rules --- ! Rule 9/11 ! Last check going ( this is the do not go in combat when enraged rule ): ! === which is equally specific with === ! Rule 10/11 ! Last check going ( this is the treat going as retreat when possible rule ): ! === which is equally specific with === ! Rule 11/11 ! Last check going ( this is the going and retreating in combat rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor going when the actor is on a supporter ( called the chaise ) ( this is the stand up before going rule ): [ R_138 t_0 ! Local variable e.g. 'chaise' = supporter ; if ((act_requester==nothing) && (self=actor,true) && (((SupporterOf(actor) ofclass K6_supporter) && (t_0=(SupporterOf(actor)), true)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_138, 138); ! phrase 1 ! [1: issue library message going action number 27 for the chaise] GL__M(##Go,27,t_0); ! phrase 2 ! [2: silently try the actor exiting] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Exit, 0, 0);; @pull keep_silent; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_138, 138, true); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Check an actor going when the room gone to is nothing ( this is the alternative can't go that way rule ): [ R_1132 ; if ((act_requester==nothing) && (self=actor,true) && ((((MStack-->MstVO(20007,1)) == nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1132, 1132); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: if the door gone through is nothing begin] if ((((MStack-->MstVO(20007,2)) == nothing))) { ! phrase 3 ! [3: stop the action with library message going action number 2 for the room gone from] return GL__M(##Go,2,(MStack-->MstVO(20007,0))); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: stop the action with library message going action number 6 for the door gone through] return GL__M(##Go,6,(MStack-->MstVO(20007,2))); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1132, 1132, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor going ( this is the can't travel in what's not a vehicle rule ): [ R_139 t_0 ! Local variable e.g. 'H' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_139, 139); ! phrase 1 ! [1: let h be the holder of the actor] t_0 = (HolderOf(actor)) ; ! phrase 2 ! [2: if h is the room gone from , continue the action] if (((t_0 == (MStack-->MstVO(20007,0))))) { rfalse; } ! phrase 3 ! [3: if h is the vehicle gone by , continue the action] if (((t_0 == (MStack-->MstVO(20007,3))))) { rfalse; } ! phrase 4 ! [4: stop the action with library message going action number 1 for h] return GL__M(##Go,1,t_0); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_139, 139, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor going ( this is the can't go through undescribed doors rule ): [ R_140 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_140, 140); ! phrase 1 ! [1: if the door gone through is not nothing and the door gone through is undescribed , stop the action with library message going action number 2 for the room gone from] if ((((~~(((MStack-->MstVO(20007,2)) == nothing))))) && ((((Adj_69_t1_v9((MStack-->MstVO(20007,2)))))))) { return GL__M(##Go,2,(MStack-->MstVO(20007,0))); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_140, 140, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor going ( this is the can't go through closed doors rule ): [ R_141 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_141, 141); ! phrase 1 ! [1: if the door gone through is not nothing and the door gone through is closed begin] if ((((~~(((MStack-->MstVO(20007,2)) == nothing))))) && ((((Adj_78_t1_v9((MStack-->MstVO(20007,2)))))))) { ! phrase 2 ! [2: issue library message going action number 28 for the door gone through] GL__M(##Go,28,(MStack-->MstVO(20007,2))); ! phrase 3 ! [3: silently try the actor opening the door gone through] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Open, (MStack-->MstVO(20007,2)), 0);; @pull keep_silent; ! phrase 4 ! [4: if the door gone through is open , continue the action] if ((((Adj_77_t1_v9((MStack-->MstVO(20007,2))))))) { rfalse; } ! phrase 5 ! [5: stop the action] rtrue; ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_141, 141, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor going ( this is the determine map connection rule ): [ R_142 t_0 ! Local variable e.g. 'target' = object t_1 ! Local variable e.g. '?-1,-1?' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_142, 142); ! phrase 1 ! [1: let the target be nothing] t_0 = nothing; ! phrase 2 ! [2: if the noun is a direction begin] if (((noun ofclass K3_direction))) { ! phrase 3 ! [3: let direction d be the noun] t_1 = noun; ! phrase 4 ! [4: let the target be the room-or-door direction d from the room gone from] t_0 = (Resolver_2(t_1,(MStack-->MstVO(20007,0)),"source", 1982)); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: if the noun is a door , let the target be the noun] if (((noun ofclass K4_door))) { t_0 = noun; } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if the target is a door begin] if (((t_0 ofclass K4_door))) { ! phrase 9 ! [9: now the target is the other side of the target from the room gone from] t_0 = (Resolver_3(t_0,(MStack-->MstVO(20007,0)),"source", 1986)); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: now the room gone to is the target] (MStack-->MstVO(20007,1)) = t_0; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_142, 142, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check going ( this is the cannot go when grappled rule ): [ R_1893 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1893, 1893); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_166())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_167()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~Caught in [the X], you are unable to run away!~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_634; new_line; rtrue; .L_Say304; .L_SayX279; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1893, 1893, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check going ( this is the cannot go as a reaction rule ): [ R_2084 ; if (actor == player) { if (debug_rules) DB_Rule(R_2084, 2084); ! phrase 1 ! [1: if the combat state of the player is at-react begin] if (((GProperty(9, player,p112_combat_state) == I97_at_react))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You cannot move as a reaction--try to survive and move away on your own turn.~ instead] say__p=1;ParaContent(); print (PrintText) SC_635; new_line; rtrue; .L_Say305; .L_SayX280; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2084, 2084, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check going ( this is the do not go in combat when enraged rule ): [ R_1410 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ; if (actor == player) { if (debug_rules) DB_Rule(R_1410, 1410); ! phrase 1 ! [1: if hate is present and the player is enraged begin] if ((((PHR_833_r16 ()))) && ((((Adj_262_t1_v9(player)))))) { ! phrase 2 ! [2: let y be the player] t_0 = player; ! phrase 3 ! [3: repeat with x running through persons in the location begin] for (t_1=Prop_168(0), t_2=Prop_168(t_1): t_1: t_1=t_2, t_2=Prop_168(t_2)) { ! phrase 4 ! [4: if the faction of x hates the faction of the player begin] if ((((Relation_TestVtoV(GProperty(9, t_1,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))) { ! phrase 5 ! [5: now y is x] t_0 = t_1; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: take no time] (PHR_853_r33 ()); ! phrase 9 ! [9: say ~And allow [the Y] to live? Never!~ instead] say__p=1;ParaContent(); print (PrintText) SC_636; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_637; new_line; rtrue; .L_Say306; .L_SayX281; rtrue; ! phrase 10 ! [10: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1410, 1410, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Last check going ( this is the treat going as retreat when possible rule ): [ R_2085 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_2085, 2085); ! phrase 1 ! [1: if hate is present and the player is not retreater begin] if ((((PHR_833_r16 ()))) && (((~~(((Adj_282_t1_v9(player)))))))) { ! phrase 2 ! [2: let way be the direction from location to retreat location] t_0 = (Resolver_12(real_location,(Global_Vars-->126),"source", 77)); ! phrase 3 ! [3: if noun is way begin] if (((noun == t_0))) { ! phrase 4 ! [4: try retreating instead] TryAction(0, player, ##A128_retreating, 0, 0);; rtrue; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2085, 2085, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Last check going ( this is the going and retreating in combat rule ): [ R_2086 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (actor == player) { if (debug_rules) DB_Rule(R_2086, 2086); ! phrase 1 ! [1: if hate is present and the player is not hidden begin] if ((((PHR_833_r16 ()))) && (((~~(((Adj_221_t1_v9(player)))))))) { ! phrase 2 ! [2: if player is retreater begin] if ((((Adj_282_t1_v9(player))))) { ! phrase 3 ! [3: unless forced-action is true begin] if (~~(((((Global_Vars-->86) && true) == (1 && true))))) { ! phrase 4 ! [4: say ~Deciding that discretion is the better part of valour, you bravely run away.~] say__p=1;ParaContent(); print (PrintText) SC_638; new_line; .L_Say307; .L_SayX282; ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: repeat with x running through alive persons in the location begin] for (t_0=Prop_169(0), t_1=Prop_169(t_0): t_0: t_0=t_1, t_1=Prop_169(t_1)) { ! phrase 7 ! [7: if the player is alive and the player is not hidden begin] if (((((Adj_33_t1_v9(player))))) && (((~~(((Adj_221_t1_v9(player)))))))) { ! phrase 8 ! [8: if x presses the player or the player presses x or the concentration of x is greater than 0 begin] if (((((Relation_TestVtoV(t_0,Rel_Record_71,player,false))))) || (((((Relation_TestVtoV(player,Rel_Record_71,t_0,false))))) || (((GProperty(9, t_0,p26_concentration) > 0))))) { ! phrase 9 ! [9: now x does not press the player] (Relation_NowNVtoV(t_0,Rel_Record_71,player,false)); ! phrase 10 ! [10: now the player does not press x] (Relation_NowNVtoV(player,Rel_Record_71,t_0,false)); ! phrase 11 ! [11: if the faction of x hates the faction of the player begin] if ((((Relation_TestVtoV(GProperty(9, t_0,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))) { ! phrase 12 ! [12: unless x is non-attacker begin] if (~~((((Adj_149_t1_v9(t_0)))))) { ! phrase 13 ! [13: try x hitting the player] TryAction(0, t_0, ##A86_hitting, player, 0);; ! phrase 14 ! [14: end unless] } ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: now concentration of x is 0] WriteGProperty(9, t_0,p26_concentration,0); ! phrase 19 ! [19: end repeat] } ! phrase 20 ! [20: otherwise] } else { ! phrase 21 ! [21: unless forced-action is true begin] if (~~(((((Global_Vars-->86) && true) == (1 && true))))) { ! phrase 22 ! [22: say ~You decide to run past your enemies.~] say__p=1;ParaContent(); print (PrintText) SC_639; new_line; .L_Say308; .L_SayX283; ! phrase 23 ! [23: end unless] } ! phrase 24 ! [24: now the player is runner] (Adj_286_t2_v9(player)); ! phrase 25 ! [25: repeat with x running through alive persons in the location begin] for (t_0=Prop_170(0), t_1=Prop_170(t_0): t_0: t_0=t_1, t_1=Prop_170(t_1)) { ! phrase 26 ! [26: now x does not press the player] (Relation_NowNVtoV(t_0,Rel_Record_71,player,false)); ! phrase 27 ! [27: now the player does not press x] (Relation_NowNVtoV(player,Rel_Record_71,t_0,false)); ! phrase 28 ! [28: if the player is alive begin] if ((((Adj_33_t1_v9(player))))) { ! phrase 29 ! [29: if the faction of x hates the faction of the player begin] if ((((Relation_TestVtoV(GProperty(9, t_0,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))) { ! phrase 30 ! [30: unless x is non-attacker begin] if (~~((((Adj_149_t1_v9(t_0)))))) { ! phrase 31 ! [31: try x hitting the player] TryAction(0, t_0, ##A86_hitting, player, 0);; ! phrase 32 ! [32: end unless] } ! phrase 33 ! [33: end if] } ! phrase 34 ! [34: end if] } ! phrase 35 ! [35: now concentration of x is 0] WriteGProperty(9, t_0,p26_concentration,0); ! phrase 36 ! [36: end repeat] } ! phrase 37 ! [37: end if] } ! phrase 38 ! [38: now the player is not runner] (Adj_286_t3_v9(player)); ! phrase 39 ! [39: now the player is not retreater] (Adj_282_t3_v9(player)); ! phrase 40 ! [40: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 41 ! [41: do nothing instead] ; rtrue; ! phrase 42 ! [42: end if] } ! phrase 43 ! [43: unless the player can move begin] if (~~(((PHR_1258_r50 (player))))) { ! phrase 44 ! [44: do nothing instead] ; rtrue; ! phrase 45 ! [45: end unless] } ! phrase 46 ! [46: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2086, 2086, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Going (B147_carry_out_going) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! First carry out going ( this is the set retreat location rule ): ! === which is equally specific with === ! Rule 2/6 ! First carry out going ( this is the collapse rule ): ! --- now the mid-placed rules --- ! Rule 3/6 ! Carry out an actor going ( this is the move player and vehicle rule ): ! === which is equally specific with === ! Rule 4/6 ! Carry out an actor going ( this is the move floating objects rule ): ! === which is equally specific with === ! Rule 5/6 ! Carry out an actor going ( this is the check light in new location rule ): ! === which is equally specific with === ! Rule 6/6 ! Carry out an actor going ( this is the lose concentration on going rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! First carry out going ( this is the set retreat location rule ): [ R_2077 ; if (actor == player) { if (debug_rules) DB_Rule(R_2077, 2077); ! phrase 1 ! [1: now the retreat location is the location] (Global_Vars-->126) = real_location; if (~~((Global_Vars-->126) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->126), "now the retreat location is the location", "room");; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2077, 2077, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First carry out going ( this is the collapse rule ): [ R_1145 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1145, 1145); ! phrase 1 ! [1: if the room noun of location collapses location begin] if ((((Relation_TestVtoV((Resolver_8(noun,real_location,"source", 104)),Rel_Record_73,real_location,true))))) { ! phrase 2 ! [2: let x be room noun of location] t_0 = (Resolver_8(noun,real_location,"source", 105)); ! phrase 3 ! [3: change the noun exit of location to nothing] (Resolver_13(noun,real_location,"source", 106)); ! phrase 4 ! [4: let reverse be the opposite of noun] t_1 = GProperty(OBJECT_TY, noun,p9_opposite); ! phrase 5 ! [5: change the reverse exit of x to nothing] (Resolver_13(t_1,t_0,"source", 108)); ! phrase 6 ! [6: say ~With a huge crash, the [if noun is up or noun is down]staircase[otherwise]corridor[end if] [bold type]collapses[roman type] behind you!~] say__p=1;ParaContent(); print (PrintText) SC_640; if (~~(((((noun == I54_up))) || (((noun == I55_down)))))) jump L_Say309; ParaContent(); print (PrintText) SC_641; jump L_SayX284; .L_Say309; ParaContent(); print (PrintText) SC_642; .L_Say310; .L_SayX284; ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_643; ParaContent(); style roman; ParaContent(); print (PrintText) SC_644; new_line; .L_Say311; .L_SayX285; ! phrase 7 ! [7: now the retreat location is x] (Global_Vars-->126) = t_0; if (~~((Global_Vars-->126) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->126), "now the retreat location is X", "room");; ! phrase 8 ! [8: now x does not collapse location] (Relation_NowNVtoV(t_0,Rel_Record_73,real_location,true)); ! phrase 9 ! [9: now location does not collapse x] (Relation_NowNVtoV(real_location,Rel_Record_73,t_0,true)); ! phrase 10 ! [10: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1145, 1145, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out an actor going ( this is the move player and vehicle rule ): [ R_144 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_144, 144); ! phrase 1 ! [1: if the vehicle gone by is nothing , surreptitiously move the actor to the room gone to during going] if ((((MStack-->MstVO(20007,3)) == nothing))) { MoveDuringGoing(actor, (MStack-->MstVO(20007,1))); } ! phrase 2 ! [2: otherwise surreptitiously move the vehicle gone by to the room gone to during going] else { MoveDuringGoing((MStack-->MstVO(20007,3)), (MStack-->MstVO(20007,1))); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_144, 144, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out an actor going ( this is the move floating objects rule ): [ R_145 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_145, 145); ! phrase 1 ! [1: if the actor is the player , update backdrop positions] if (((actor == player))) { MoveFloatingObjects(); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_145, 145, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out an actor going ( this is the check light in new location rule ): [ R_146 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_146, 146); ! phrase 1 ! [1: if the actor is the player , surreptitiously reckon darkness] if (((actor == player))) { SilentlyConsiderLight(); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_146, 146, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor going ( this is the lose concentration on going rule ): [ R_1019 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1019, 1019); ! phrase 1 ! [1: now the concentration of the actor is 0] WriteGProperty(9, actor,p26_concentration,0); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1019, 1019, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Going (B148_report_going) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor going ( this is the describe room gone into rule ): ! --- now the last-placed rules --- ! Rule 2/2 ! Last report going ( this is the check whether destination reached rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor going ( this is the describe room gone into rule ): [ R_147 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = object t_2 ! Local variable e.g. '?-1,-1?' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_147, 147); ! phrase 1 ! [1: if the player is the actor begin] if (((player == actor))) { ! phrase 2 ! [2: produce a room description with going spacing conventions] LookAfterGoing(); ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if the noun is a direction begin] if (((noun ofclass K3_direction))) { ! phrase 5 ! [5: if the location is the room gone from begin] if (((real_location == (MStack-->MstVO(20007,0))))) { ! phrase 6 ! [6: if the location is the room gone to begin] if (((real_location == (MStack-->MstVO(20007,1))))) { ! phrase 7 ! [7: continue the action] rfalse; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: if the noun is up begin] if (((noun == I54_up))) { ! phrase 10 ! [10: issue actor-based library message going action number 8] AGL__M(##Go,8,noun); ! phrase 11 ! [11: otherwise if the noun is down] } else if (((noun == I55_down))) { ! phrase 12 ! [12: issue actor-based library message going action number 9] AGL__M(##Go,9,noun); ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: issue actor-based library message going action number 10 for the noun] AGL__M(##Go,10,noun); ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: otherwise] } else { ! phrase 18 ! [18: let the back way be the opposite of the noun] t_0 = GProperty(OBJECT_TY, noun,p9_opposite); ! phrase 19 ! [19: if the location is the room gone to begin] if (((real_location == (MStack-->MstVO(20007,1))))) { ! phrase 20 ! [20: let the room back the other way be the room back way from the location] t_1 = (Resolver_8(t_0,real_location,"source", 2027)); ! phrase 21 ! [21: let the room normally this way be the room noun from the room gone from] t_2 = (Resolver_14(noun,(MStack-->MstVO(20007,0)),"source", 2029)); ! phrase 22 ! [22: if the room back the other way is the room gone from or the room back the other way is the room normally this way begin] if ((((t_1 == (MStack-->MstVO(20007,0))))) || (((t_1 == t_2)))) { ! phrase 23 ! [23: if the back way is up begin] if (((t_0 == I54_up))) { ! phrase 24 ! [24: issue actor-based library message going action number 11] AGL__M(##Go,11,noun); ! phrase 25 ! [25: otherwise if the back way is down] } else if (((t_0 == I55_down))) { ! phrase 26 ! [26: issue actor-based library message going action number 12] AGL__M(##Go,12,noun); ! phrase 27 ! [27: otherwise] } else { ! phrase 28 ! [28: issue actor-based library message going action number 13 for the back way] AGL__M(##Go,13,t_0); ! phrase 29 ! [29: end if] } ! phrase 30 ! [30: otherwise] } else { ! phrase 31 ! [31: issue actor-based library message going action number 14] AGL__M(##Go,14,noun); ! phrase 32 ! [32: end if] } ! phrase 33 ! [33: otherwise] } else { ! phrase 34 ! [34: if the back way is up begin] if (((t_0 == I54_up))) { ! phrase 35 ! [35: issue actor-based library message going action number 15 for the room gone to] AGL__M(##Go,15,(MStack-->MstVO(20007,1))); ! phrase 36 ! [36: otherwise if the back way is down] } else if (((t_0 == I55_down))) { ! phrase 37 ! [37: issue actor-based library message going action number 16 for the room gone to] AGL__M(##Go,16,(MStack-->MstVO(20007,1))); ! phrase 38 ! [38: otherwise] } else { ! phrase 39 ! [39: issue actor-based library message going action number 17 for the room gone to and the back way] AGL__M(##Go,17,(MStack-->MstVO(20007,1)),t_0); ! phrase 40 ! [40: end if] } ! phrase 41 ! [41: end if] } ! phrase 42 ! [42: end if] } ! phrase 43 ! [43: otherwise if the location is the room gone from] } else if (((real_location == (MStack-->MstVO(20007,0))))) { ! phrase 44 ! [44: issue actor-based library message going action number 18 for the noun] AGL__M(##Go,18,noun); ! phrase 45 ! [45: otherwise] } else { ! phrase 46 ! [46: issue actor-based library message going action number 19 for the noun] AGL__M(##Go,19,noun); ! phrase 47 ! [47: end if] } ! phrase 48 ! [48: if the vehicle gone by is not nothing begin] if (((~~(((MStack-->MstVO(20007,3)) == nothing))))) { ! phrase 49 ! [49: say ~ ~] say__p=1;ParaContent(); print (PrintText) SC_209; .L_Say312; .L_SayX286; ! phrase 50 ! [50: if the vehicle gone by is a supporter , issue actor-based library message going action number 20 for the vehicle gone by] if ((((MStack-->MstVO(20007,3)) ofclass K6_supporter))) { AGL__M(##Go,20,(MStack-->MstVO(20007,3))); } ! phrase 51 ! [51: otherwise issue actor-based library message going action number 21 for the vehicle gone by] else { AGL__M(##Go,21,(MStack-->MstVO(20007,3))); } ! phrase 52 ! [52: end if] } ! phrase 53 ! [53: if the thing gone with is not nothing begin] if (((~~(((MStack-->MstVO(20007,4)) == nothing))))) { ! phrase 54 ! [54: if the player is within the thing gone with begin] if ((((MStack-->MstVO(20007,4)) == ContainerOf(player)))) { ! phrase 55 ! [55: issue actor-based library message going action number 22 for the thing gone with] AGL__M(##Go,22,(MStack-->MstVO(20007,4))); ! phrase 56 ! [56: otherwise if the player is within the vehicle gone by] } else if ((((MStack-->MstVO(20007,3)) == ContainerOf(player)))) { ! phrase 57 ! [57: issue actor-based library message going action number 23 for the thing gone with] AGL__M(##Go,23,(MStack-->MstVO(20007,4))); ! phrase 58 ! [58: otherwise if the location is the room gone from] } else if (((real_location == (MStack-->MstVO(20007,0))))) { ! phrase 59 ! [59: issue actor-based library message going action number 24 for the thing gone with] AGL__M(##Go,24,(MStack-->MstVO(20007,4))); ! phrase 60 ! [60: otherwise] } else { ! phrase 61 ! [61: issue actor-based library message going action number 25 for the thing gone with] AGL__M(##Go,25,(MStack-->MstVO(20007,4))); ! phrase 62 ! [62: end if] } ! phrase 63 ! [63: end if] } ! phrase 64 ! [64: if the player is within the vehicle gone by and the player is not within the thing gone with begin] if (((((MStack-->MstVO(20007,3)) == ContainerOf(player)))) && (((~~(((MStack-->MstVO(20007,4)) == ContainerOf(player))))))) { ! phrase 65 ! [65: issue actor-based library message going action number 26] AGL__M(##Go,26,noun); ! phrase 66 ! [66: say ~.~] say__p=1;ParaContent(); print (PrintText) SC_310; new_line; .L_Say313; .L_SayX287; ! phrase 67 ! [67: try looking] TryAction(0, player, ##Look, 0, 0);; ! phrase 68 ! [68: continue the action] rfalse; ! phrase 69 ! [69: end if] } ! phrase 70 ! [70: say ~.~] say__p=1;ParaContent(); print (PrintText) SC_310; new_line; .L_Say314; .L_SayX288; ! phrase 71 ! [71: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_147, 147, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Last report going ( this is the check whether destination reached rule ): [ R_2097 ; if (actor == player) { if (debug_rules) DB_Rule(R_2097, 2097); ! phrase 1 ! [1: if the location is the location-to-go begin] if (((real_location == (Global_Vars-->127)))) { ! phrase 2 ! [2: now the location-to-go is null-room] (Global_Vars-->127) = I524_null_room; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2097, 2097, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Entering (B149_check_entering) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/8 ! Check an actor entering ( this is the convert enter door into go rule ): ! === which is equally specific with === ! Rule 2/8 ! Check an actor entering ( this is the convert enter compass direction into go rule ): ! === which is equally specific with === ! Rule 3/8 ! Check an actor entering ( this is the can't enter what's already entered rule ): ! === which is equally specific with === ! Rule 4/8 ! Check an actor entering ( this is the can't enter what's not enterable rule ): ! === which is equally specific with === ! Rule 5/8 ! Check an actor entering ( this is the can't enter closed containers rule ): ! === which is equally specific with === ! Rule 6/8 ! Check an actor entering ( this is the can't enter something carried rule ): ! === which is equally specific with === ! Rule 7/8 ! Check an actor entering ( this is the implicitly pass through other barriers rule ): ! >>> III - Action requirement >>> ! Rule 8/8 ! Check entering ( this is the cannot enter when grappled rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor entering ( this is the convert enter door into go rule ): [ R_149 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_149, 149); ! phrase 1 ! [1: if the noun is a door , convert to the going action on the noun] if (((noun ofclass K4_door))) { return GVS_Convert(##Go,noun,0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_149, 149, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor entering ( this is the convert enter compass direction into go rule ): [ R_150 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_150, 150); ! phrase 1 ! [1: if the noun is a direction , convert to the going action on the noun] if (((noun ofclass K3_direction))) { return GVS_Convert(##Go,noun,0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_150, 150, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor entering ( this is the can't enter what's already entered rule ): [ R_151 t_0 ! Local variable e.g. 'local ceiling' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_151, 151); ! phrase 1 ! [1: let the local ceiling be the common ancestor of the actor with the noun] t_0 = (CommonAncestor(actor, noun)) ; ! phrase 2 ! [2: if the local ceiling is the noun , stop the action with library message entering action number 1 for the noun] if (((t_0 == noun))) { return GL__M(##Enter,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_151, 151, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor entering ( this is the can't enter what's not enterable rule ): [ R_152 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_152, 152); ! phrase 1 ! [1: if the noun is not enterable , stop the action with library message entering action number 2 for the noun] if (((~~(((Adj_74_t1_v9(noun))))))) { return GL__M(##Enter,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_152, 152, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor entering ( this is the can't enter closed containers rule ): [ R_153 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_153, 153); ! phrase 1 ! [1: if the noun is a closed container , stop the action with library message entering action number 3 for the noun] if (((noun ofclass K5_container) && ((Adj_78_t1_v9(noun))))) { return GL__M(##Enter,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_153, 153, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor entering ( this is the can't enter something carried rule ): [ R_154 t_0 ! Local variable e.g. 'local ceiling' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_154, 154); ! phrase 1 ! [1: let the local ceiling be the common ancestor of the actor with the noun] t_0 = (CommonAncestor(actor, noun)) ; ! phrase 2 ! [2: if the local ceiling is the actor , stop the action with library message entering action number 4 for the noun] if (((t_0 == actor))) { return GL__M(##Enter,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_154, 154, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor entering ( this is the implicitly pass through other barriers rule ): [ R_155 t_0 ! Local variable e.g. 'local ceiling' = object t_1 ! Local variable e.g. 'target' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_155, 155); ! phrase 1 ! [1: if the holder of the actor is the holder of the noun , continue the action] if ((( (HolderOf(actor)) == (HolderOf(noun)) ))) { rfalse; } ! phrase 2 ! [2: let the local ceiling be the common ancestor of the actor with the noun] t_0 = (CommonAncestor(actor, noun)) ; ! phrase 3 ! [3: while the holder of the actor is not the local ceiling begin] while (((~~(( (HolderOf(actor)) == t_0))))) { ! phrase 4 ! [4: let the target be the holder of the actor] t_1 = (HolderOf(actor)) ; ! phrase 5 ! [5: issue library message entering action number 6 for the target] GL__M(##Enter,6,t_1); ! phrase 6 ! [6: silently try the actor trying exiting] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Exit, 0, 0);; @pull keep_silent; ! phrase 7 ! [7: if the holder of the actor is the target , stop the action] if ((( (HolderOf(actor)) == t_1))) { rtrue; } ! phrase 8 ! [8: end while] } ! phrase 9 ! [9: if the holder of the actor is the noun , stop the action] if ((( (HolderOf(actor)) == noun))) { rtrue; } ! phrase 10 ! [10: if the holder of the actor is the holder of the noun , continue the action] if ((( (HolderOf(actor)) == (HolderOf(noun)) ))) { rfalse; } ! phrase 11 ! [11: let the target be the holder of the noun] t_1 = (HolderOf(noun)) ; ! phrase 12 ! [12: if the noun is part of the target , let the target be the holder of the target] if (((t_1 == (noun.component_parent)))) { t_1 = (HolderOf(t_1)) ; } ! phrase 13 ! [13: while the target is a thing begin] while (((t_1 ofclass K2_thing))) { ! phrase 14 ! [14: if the holder of the target is the local ceiling begin] if ((( (HolderOf(t_1)) == t_0))) { ! phrase 15 ! [15: issue library message entering action number 7 for the target] GL__M(##Enter,7,t_1); ! phrase 16 ! [16: silently try the actor trying entering the target] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Enter, t_1, 0);; @pull keep_silent; ! phrase 17 ! [17: if the holder of the actor is not the target , stop the action] if (((~~(( (HolderOf(actor)) == t_1))))) { rtrue; } ! phrase 18 ! [18: convert to the entering action on the noun] return GVS_Convert(##Enter,noun,0); ! phrase 19 ! [19: continue the action] rfalse; ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: let the target be the holder of the target] t_1 = (HolderOf(t_1)) ; ! phrase 22 ! [22: end while] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_155, 155, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check entering ( this is the cannot enter when grappled rule ): [ R_1897 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1897, 1897); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_171())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_172()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~Caught in [the X], you are unable to move.~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_645; new_line; rtrue; .L_Say315; .L_SayX289; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1897, 1897, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Entering (B150_carry_out_entering) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Carry out entering the seething lake of lava: ! === which is equally specific with === ! Rule 2/3 ! Carry out entering the huge forge: ! >>> I - Number of aspects constrained >>> ! Rule 3/3 ! Carry out an actor entering ( this is the standard entering rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Carry out entering the seething lake of lava: [ R_1563 ; if ( (actor==player) && ((noun == I386_seething_lake_of_lava) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1563, 1563); ! phrase 1 ! [1: end the story saying ~You committed suicide.~] deadflag=SC_646; story_complete=false; ! phrase 2 ! [2: say ~On a whim, you jump down into the lava.~ instead] say__p=1;ParaContent(); print (PrintText) SC_647; new_line; rtrue; .L_Say316; .L_SayX290; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1563, 1563, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Carry out entering the huge forge: [ R_1606 ; if ( (actor==player) && ((noun == I401_huge_forge) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1606, 1606); ! phrase 1 ! [1: say ~You decide to test whether the inside of the forge is truly as hot as hell. Your experience is consistent with the stories.~] say__p=1;ParaContent(); print (PrintText) SC_648; new_line; .L_Say317; .L_SayX291; ! phrase 2 ! [2: end the story saying ~Only a little carbon remains of you.~] deadflag=SC_649; story_complete=false; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1606, 1606, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out an actor entering ( this is the standard entering rule ): [ R_156 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_156, 156); ! phrase 1 ! [1: surreptitiously move the actor to the noun] move actor to noun; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_156, 156, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Entering (B151_report_entering) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor entering ( this is the standard report entering rule ): ! === which is equally specific with === ! Rule 2/2 ! Report an actor entering ( this is the describe contents entered into rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor entering ( this is the standard report entering rule ): [ R_157 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_157, 157); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message entering action number 5 for the noun] GL__M(##Enter,5,noun); ! phrase 3 ! [3: otherwise if the noun is a container] } else if (((noun ofclass K5_container))) { ! phrase 4 ! [4: issue actor-based library message entering action number 8 for the noun] AGL__M(##Enter,8,noun); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: issue actor-based library message entering action number 9 for the noun] AGL__M(##Enter,9,noun); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: continue the action] rfalse; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_157, 157, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor entering ( this is the describe contents entered into rule ): [ R_158 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_158, 158); ! phrase 1 ! [1: if the actor is the player , describe locale for the noun] if (((actor == player))) { (PHR_71_r58 (noun)); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_158, 158, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Exiting (B152_check_exiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! Check an actor exiting ( this is the convert exit into go out rule ): ! === which is equally specific with === ! Rule 2/5 ! Check an actor exiting ( this is the can't exit when not inside anything rule ): ! === which is equally specific with === ! Rule 3/5 ! Check an actor exiting ( this is the can't exit closed containers rule ): ! === which is equally specific with === ! Rule 4/5 ! Check an actor exiting ( this is the convert exit into get off rule ): ! >>> III - Action requirement >>> ! Rule 5/5 ! Check exiting ( this is the cannot exit when grappled rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor exiting ( this is the convert exit into go out rule ): [ R_160 t_0 ! Local variable e.g. 'local room' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_160, 160); ! phrase 1 ! [1: let the local room be the location of the actor] t_0 = LocationOf(actor) ; ! phrase 2 ! [2: if the container exited from is the local room begin] if ((((MStack-->MstVO(20009,0)) == t_0))) { ! phrase 3 ! [3: if the room-or-door outside from the local room is not nothing , convert to the going action on the outside] if (((~~(((Resolver_15(out_obj,t_0,"source", 2185)) == nothing))))) { return GVS_Convert(##Go,out_obj,0); } ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_160, 160, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor exiting ( this is the can't exit when not inside anything rule ): [ R_161 t_0 ! Local variable e.g. 'local room' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_161, 161); ! phrase 1 ! [1: let the local room be the location of the actor] t_0 = LocationOf(actor) ; ! phrase 2 ! [2: if the container exited from is the local room , stop the action with library message exiting action number 1 for the actor] if ((((MStack-->MstVO(20009,0)) == t_0))) { return GL__M(##Exit,1,actor); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_161, 161, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor exiting ( this is the can't exit closed containers rule ): [ R_162 t_0 ! Local variable e.g. 'cage' = container ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_162, 162); ! phrase 1 ! [1: if the actor is in a closed container ( called the cage ) , stop the action with library message exiting action number 2 for the cage] if (((ContainerOf(actor) ofclass K5_container) && (t_0=(ContainerOf(actor)), true) && ((Adj_78_t1_v9(ContainerOf(actor)))))) { return GL__M(##Exit,2,t_0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_162, 162, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor exiting ( this is the convert exit into get off rule ): [ R_163 t_0 ! Local variable e.g. 'platform' = supporter ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_163, 163); ! phrase 1 ! [1: if the actor is on a supporter ( called the platform ) , convert to the getting off action on the platform] if (((SupporterOf(actor) ofclass K6_supporter) && (t_0=(SupporterOf(actor)), true))) { return GVS_Convert(##GetOff,t_0,0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_163, 163, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check exiting ( this is the cannot exit when grappled rule ): [ R_1898 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1898, 1898); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_173())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_174()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~Caught in [the X], you are unable to move.~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_645; new_line; rtrue; .L_Say318; .L_SayX292; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1898, 1898, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Exiting (B153_carry_out_exiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor exiting ( this is the standard exiting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor exiting ( this is the standard exiting rule ): [ R_164 t_0 ! Local variable e.g. 'former exterior' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_164, 164); ! phrase 1 ! [1: let the former exterior be the not-counting-parts holder of the container exited from] t_0 = (CoreOfParentOfCoreOf((MStack-->MstVO(20009,0)))) ; ! phrase 2 ! [2: surreptitiously move the actor to the former exterior] move actor to t_0; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_164, 164, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Exiting (B154_report_exiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor exiting ( this is the standard report exiting rule ): ! === which is equally specific with === ! Rule 2/2 ! Report an actor exiting ( this is the describe room emerged into rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor exiting ( this is the standard report exiting rule ): [ R_165 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_165, 165); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message exiting action number 3 for the container exited from] GL__M(##Exit,3,(MStack-->MstVO(20009,0))); ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: issue actor-based library message exiting action number 6 for the container exited from] AGL__M(##Exit,6,(MStack-->MstVO(20009,0))); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: continue the action] rfalse; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_165, 165, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor exiting ( this is the describe room emerged into rule ): [ R_166 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_166, 166); ! phrase 1 ! [1: if the actor is the player , produce a room description with going spacing conventions] if (((actor == player))) { LookAfterGoing(); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_166, 166, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Getting off (B155_check_getting_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor getting off ( this is the can't get off things rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor getting off ( this is the can't get off things rule ): [ R_167 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_167, 167); ! phrase 1 ! [1: if the actor is on the noun , continue the action] if (((noun == SupporterOf(actor)))) { rfalse; } ! phrase 2 ! [2: if the actor is carried by the noun , continue the action] if (((noun == CarrierOf(actor)))) { rfalse; } ! phrase 3 ! [3: stop the action with library message getting off action number 1 for the noun] return GL__M(##GetOff,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_167, 167, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Getting off (B156_carry_out_getting_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor getting off ( this is the standard getting off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor getting off ( this is the standard getting off rule ): [ R_168 t_0 ! Local variable e.g. 'former exterior' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_168, 168); ! phrase 1 ! [1: let the former exterior be the not-counting-parts holder of the noun] t_0 = (CoreOfParentOfCoreOf(noun)) ; ! phrase 2 ! [2: surreptitiously move the actor to the former exterior] move actor to t_0; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_168, 168, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Getting off (B157_report_getting_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor getting off ( this is the standard report getting off rule ): ! === which is equally specific with === ! Rule 2/2 ! Report an actor getting off ( this is the describe room stood up into rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor getting off ( this is the standard report getting off rule ): [ R_169 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_169, 169); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message exiting action number 3 for the noun] GL__M(##Exit,3,noun); ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: issue actor-based library message exiting action number 5 for the noun] AGL__M(##Exit,5,noun); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: continue the action] rfalse; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_169, 169, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor getting off ( this is the describe room stood up into rule ): [ R_170 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_170, 170); ! phrase 1 ! [1: if the actor is the player , produce a room description with going spacing conventions] if (((actor == player))) { LookAfterGoing(); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_170, 170, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Looking (B158_check_looking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check looking when the player is dead: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check looking when the player is dead: [ R_2087 ; if (actor == player) { if (((((((~~Adj_33_t1_v9(player)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2087, 2087); ! phrase 1 ! [1: do nothing instead] ; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2087, 2087, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Looking (B159_carry_out_looking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Carry out looking ( this is the room description heading rule ): ! === which is equally specific with === ! Rule 2/6 ! Carry out looking ( this is the room description body text rule ): ! === which is equally specific with === ! Rule 3/6 ! Carry out looking ( this is the room description paragraphs about objects rule ): ! === which is equally specific with === ! Rule 4/6 ! Carry out looking ( this is the check new arrival rule ): ! === which is equally specific with === ! Rule 5/6 ! Carry out looking ( this is the mark items as seen when looking rule ): ! --- now the last-placed rules --- ! Rule 6/6 ! Last carry out looking when the location is a tunnel ( this is the hint about other rooms rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out looking ( this is the room description heading rule ): [ R_172 t_0 ! Local variable e.g. 'intermediate level' = object t_1 ! Local variable e.g. '?-1,-1?' = number ; if (actor == player) { if (debug_rules) DB_Rule(R_172, 172); ! phrase 1 ! [1: say bold type] say__p=1;ParaContent(); style bold; .L_Say319; .L_SayX293; ! phrase 2 ! [2: if the visibility level count is 0 begin] if ((((MStack-->MstVO(20011,2)) == 0))) { ! phrase 3 ! [3: begin the printing the name of a dark room activity] BeginActivity(V8_printing_the_name_of_a_da); ! phrase 4 ! [4: if handling the printing the name of a dark room activity , issue miscellaneous library message number 71] if (( (~~(ForActivity(V8_printing_the_name_of_a_da))) )) { GL__M(##Miscellany,71); } ! phrase 5 ! [5: end the printing the name of a dark room activity] EndActivity(V8_printing_the_name_of_a_da); ! phrase 6 ! [6: otherwise if the visibility ceiling is the location] } else if ((((MStack-->MstVO(20011,3)) == real_location))) { ! phrase 7 ! [7: say ~[visibility ceiling]~] say__p=1;ParaContent(); print (PrintShortName) (MStack-->MstVO(20011,3)); .L_Say320; .L_SayX294; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: say ~[The visibility ceiling]~] say__p=1;ParaContent(); print (The) (MStack-->MstVO(20011,3)); .L_Say321; .L_SayX295; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: say roman type] say__p=1;ParaContent(); style roman; .L_Say322; .L_SayX296; ! phrase 12 ! [12: let intermediate level be the visibility-holder of the actor] t_0 = VisibilityParent(actor) ; ! phrase 13 ! [13: repeat with intermediate level count running from 2 to the visibility level count begin] for (t_1=2: t_1<=(MStack-->MstVO(20011,2)): t_1++) { ! phrase 14 ! [14: issue library message looking action number 8 for the intermediate level] GL__M(##Look,8,t_0); ! phrase 15 ! [15: let the intermediate level be the visibility-holder of the intermediate level] t_0 = VisibilityParent(t_0) ; ! phrase 16 ! [16: end repeat] } ! phrase 17 ! [17: say line break] say__p=1;ParaContent(); new_line; .L_Say323; .L_SayX297; ! phrase 18 ! [18: say run paragraph on with special look spacing] say__p=1;ParaContent(); SpecialLookSpacingBreak(); .L_Say324; .L_SayX298; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_172, 172, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out looking ( this is the room description body text rule ): [ R_173 ; if (actor == player) { if (debug_rules) DB_Rule(R_173, 173); ! phrase 1 ! [1: if the visibility level count is 0 begin] if ((((MStack-->MstVO(20011,2)) == 0))) { ! phrase 2 ! [2: if set to abbreviated room descriptions , continue the action] if (( (lookmode == 3) )) { rfalse; } ! phrase 3 ! [3: if set to sometimes abbreviated room descriptions and abbreviated form allowed is true and darkness witnessed is true , continue the action] if ((( (lookmode == 1) )) && ((((((MStack-->MstVO(20011,1)) && true) == (1 && true)))) && (((((Global_Vars-->0) && true) == (1 && true)))))) { rfalse; } ! phrase 4 ! [4: begin the printing the description of a dark room activity] BeginActivity(V9_printing_the_description_); ! phrase 5 ! [5: if handling the printing the description of a dark room activity , issue miscellaneous library message number 17] if (( (~~(ForActivity(V9_printing_the_description_))) )) { GL__M(##Miscellany,17); } ! phrase 6 ! [6: end the printing the description of a dark room activity] EndActivity(V9_printing_the_description_); ! phrase 7 ! [7: otherwise if the visibility ceiling is the location] } else if ((((MStack-->MstVO(20011,3)) == real_location))) { ! phrase 8 ! [8: if set to abbreviated room descriptions , continue the action] if (( (lookmode == 3) )) { rfalse; } ! phrase 9 ! [9: if set to sometimes abbreviated room descriptions and abbreviated form allowed is true and the location is visited , continue the action] if ((( (lookmode == 1) )) && ((((((MStack-->MstVO(20011,1)) && true) == (1 && true)))) && ((((Adj_56_t1_v9(real_location))))))) { rfalse; } ! phrase 10 ! [10: print the location's description] PrintOrRun(location, description); ! phrase 11 ! [11: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_173, 173, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out looking ( this is the room description paragraphs about objects rule ): [ R_174 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number ; if (actor == player) { if (debug_rules) DB_Rule(R_174, 174); ! phrase 1 ! [1: if the visibility level count is greater than 0 begin] if ((((MStack-->MstVO(20011,2)) > 0))) { ! phrase 2 ! [2: let the intermediate position be the actor] t_0 = actor; ! phrase 3 ! [3: let the ip count be the visibility level count] t_1 = (MStack-->MstVO(20011,2)); ! phrase 4 ! [4: while the ip count is greater than 0 begin] while (((t_1 > 0))) { ! phrase 5 ! [5: now the intermediate position is marked for listing] (Adj_70_t2_v9(t_0)); ! phrase 6 ! [6: let the intermediate position be the visibility-holder of the intermediate position] t_0 = VisibilityParent(t_0) ; ! phrase 7 ! [7: decrease the ip count by 1] t_1 = t_1 - 1; ! phrase 8 ! [8: end while] } ! phrase 9 ! [9: let the top-down ip count be the visibility level count] t_2 = (MStack-->MstVO(20011,2)); ! phrase 10 ! [10: while the top-down ip count is greater than 0 begin] while (((t_2 > 0))) { ! phrase 11 ! [11: let the intermediate position be the actor] t_0 = actor; ! phrase 12 ! [12: let the ip count be 0] t_1 = 0; ! phrase 13 ! [13: while the ip count is less than the top-down ip count begin] while (((t_1 < t_2))) { ! phrase 14 ! [14: let the intermediate position be the visibility-holder of the intermediate position] t_0 = VisibilityParent(t_0) ; ! phrase 15 ! [15: increase the ip count by 1] t_1 = t_1 + 1; ! phrase 16 ! [16: end while] } ! phrase 17 ! [17: describe locale for the intermediate position] (PHR_71_r58 (t_0)); ! phrase 18 ! [18: decrease the top-down ip count by 1] t_2 = t_2 - 1; ! phrase 19 ! [19: end while] } ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: continue the action] rfalse; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_174, 174, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out looking ( this is the check new arrival rule ): [ R_175 ; if (actor == player) { if (debug_rules) DB_Rule(R_175, 175); ! phrase 1 ! [1: if in darkness begin] if (( (location==thedark) )) { ! phrase 2 ! [2: now the darkness witnessed is true] (Global_Vars-->0) = 1; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if the location is a room , now the location is visited] if (((real_location ofclass K1_room))) { (Adj_56_t2_v9(real_location)); } ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_175, 175, true); rfalse; ]; ! No specific request ! From "Epistemology" by Eric Eve ! Carry out looking ( this is the mark items as seen when looking rule ): [ R_769 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; if (actor == player) { if (debug_rules) DB_Rule(R_769, 769); ! phrase 1 ! [1: unless in darkness begin] if (~~(( (location==thedark) ))) { ! phrase 2 ! [2: repeat with item running through things that are enclosed by the location begin] for (t_0=Prop_175(0), t_1=Prop_175(t_0): t_0: t_0=t_1, t_1=Prop_175(t_1)) { ! phrase 3 ! [3: if the item is not enclosed by an opaque closed container , now the item is seen] if ((~~Prop_176(,t_0))) { (Adj_91_t2_v9(t_0)); } ! phrase 4 ! [4: end repeat] } ! phrase 5 ! [5: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_769, 769, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last carry out looking when the location is a tunnel ( this is the hint about other rooms rule ): [ R_1151 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD6_list_of_directions); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_11(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_11 I7BASPL t_0 ! Local variable e.g. 'K' = list of directions t_1 ! Local variable e.g. 'm' = number t_2 ! Local variable e.g. '?-1,-1?' = direction t_3 ! Local variable e.g. '?-1,-1?' = direction t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = number t_6 ! Local variable e.g. '?-1,-1?' = number t_7 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if ((((((real_location ofclass K20_tunnel)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1151, 1151); ! phrase 1 ! [1: let k be a list of directions] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: let m be 0] t_1 = 0; ! phrase 3 ! [3: repeat with way running through cardinal directions begin] for (t_2=Prop_177(0), t_3=Prop_177(t_2): t_2: t_2=t_3, t_3=Prop_177(t_3)) { ! phrase 4 ! [4: let x be the x way of location] t_4 = (Resolver_16(t_2,real_location,"source", 188)); ! phrase 5 ! [5: let y be the y way of location] t_5 = (Resolver_17(t_2,real_location,"source", 189)); ! phrase 6 ! [6: let z be the z way of location] t_6 = (Resolver_18(t_2,real_location,"source", 190)); ! phrase 7 ! [7: if not the space at x by y by z is free begin] if (~~(((PHR_1094_r38 (t_4,t_5,t_6))))) { ! phrase 8 ! [8: let place be room at x by y by z] t_7 = (PHR_1095_r39 (t_4,t_5,t_6)); ! phrase 9 ! [9: unless place is the room way from location begin] if (~~(((t_7 == (Resolver_19(t_2,real_location,"source", 194)))))) { ! phrase 10 ! [10: unless place is a tunnel begin] if (~~(((t_7 ofclass K20_tunnel)))) { ! phrase 11 ! [11: increase m by 1] t_1 = t_1 + 1; ! phrase 12 ! [12: add way to k] LIST_OF_TY_InsertItem(t_0, t_2, 0, 0, 0); ! phrase 13 ! [13: end unless] } ! phrase 14 ! [14: end unless] } ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end repeat] } ! phrase 17 ! [17: if m is greater than 0 begin] if (((t_1 > 0))) { ! phrase 18 ! [18: say ~There seems to be somewhat different stone [K].~] say__p=1;ParaContent(); print (PrintText) SC_650; ParaContent(); print (LIST_OF_TY_Say) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say325; .L_SayX299; ! phrase 19 ! [19: end if] } } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1151, 1151, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Looking (B160_report_looking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor looking ( this is the other people looking rule ): ! >>> III - Action requirement >>> ! Rule 2/2 ! Report looking: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor looking ( this is the other people looking rule ): [ R_176 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_176, 176); ! phrase 1 ! [1: if the actor is not the player , issue actor-based library message looking action number 9] if (((~~((actor == player))))) { AGL__M(##Look,9,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_176, 176, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Report looking: [ R_2126 t_0 ! Local variable e.g. 'count' = number t_1 ! Local variable e.g. '?-1,-1?' = direction t_2 ! Local variable e.g. '?-1,-1?' = direction t_3 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_2126, 2126); ! phrase 1 ! [1: let count be 0] t_0 = 0; ! phrase 2 ! [2: repeat with way running through direction begin] for (t_1=Prop_178(0), t_2=Prop_178(t_1): t_1: t_1=t_2, t_2=Prop_178(t_2)) { ! phrase 3 ! [3: let further place be the room the way from the location] t_3 = (Resolver_19(t_1,real_location,"source", 707)); ! phrase 4 ! [4: if further place is a room and further place is notnogo begin] if ((((t_3 ofclass K1_room))) && ((((Adj_126_t1_v9(t_3)))))) { ! phrase 5 ! [5: increase count by 1] t_0 = t_0 + 1; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: if count is not 0 begin] if (((~~((t_0 == 0))))) { ! phrase 9 ! [9: if count is 1 begin] if (((t_0 == 1))) { ! phrase 10 ! [10: repeat with way running through direction begin] for (t_1=Prop_179(0), t_2=Prop_179(t_1): t_1: t_1=t_2, t_2=Prop_179(t_2)) { ! phrase 11 ! [11: let further place be the room the way from the location] t_3 = (Resolver_19(t_1,real_location,"source", 713)); ! phrase 12 ! [12: if further place is a room and further place is notnogo begin] if ((((t_3 ofclass K1_room))) && ((((Adj_126_t1_v9(t_3)))))) { ! phrase 13 ! [13: say ~An exit leads [way][if further place is visited] (to [further place])[end if].~] say__p=1;ParaContent(); print (PrintText) SC_651; ParaContent(); print (PrintShortName) t_1; if (~~(((((Adj_56_t1_v9(t_3))))))) jump L_Say326; ParaContent(); print (PrintText) SC_652; ParaContent(); print (PrintShortName) t_3; ParaContent(); print (PrintText) SC_275; .L_Say326; .L_SayX300; ParaContent(); print (PrintText) SC_310; new_line; .L_Say327; .L_SayX301; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: otherwise] } else { ! phrase 17 ! [17: say ~Exits lead ~] say__p=1;ParaContent(); print (PrintText) SC_653; .L_Say328; .L_SayX302; ! phrase 18 ! [18: repeat with way running through direction begin] for (t_1=Prop_180(0), t_2=Prop_180(t_1): t_1: t_1=t_2, t_2=Prop_180(t_2)) { ! phrase 19 ! [19: let further place be the room the way from the location] t_3 = (Resolver_19(t_1,real_location,"source", 719)); ! phrase 20 ! [20: if further place is a room and further place is notnogo begin] if ((((t_3 ofclass K1_room))) && ((((Adj_126_t1_v9(t_3)))))) { ! phrase 21 ! [21: if count is greater than 1 begin] if (((t_0 > 1))) { ! phrase 22 ! [22: say ~[way][if further place is visited] (to [further place])[end if][if count is greater than 2],[end if] ~] say__p=1;ParaContent(); print (PrintShortName) t_1; if (~~(((((Adj_56_t1_v9(t_3))))))) jump L_Say329; ParaContent(); print (PrintText) SC_652; ParaContent(); print (PrintShortName) t_3; ParaContent(); print (PrintText) SC_275; .L_Say329; .L_SayX303; if (~~((((t_0 > 2))))) jump L_Say330; ParaContent(); print (PrintText) SC_590; .L_Say330; .L_SayX304; ParaContent(); print (PrintText) SC_209; .L_Say331; .L_SayX305; ! phrase 23 ! [23: decrease count by 1] t_0 = t_0 - 1; ! phrase 24 ! [24: otherwise] } else { ! phrase 25 ! [25: say ~and [way][if further place is visited] (to [further place])[end if].~] say__p=1;ParaContent(); print (PrintText) SC_654; ParaContent(); print (PrintShortName) t_1; if (~~(((((Adj_56_t1_v9(t_3))))))) jump L_Say332; ParaContent(); print (PrintText) SC_652; ParaContent(); print (PrintShortName) t_3; ParaContent(); print (PrintText) SC_275; .L_Say332; .L_SayX306; ParaContent(); print (PrintText) SC_310; new_line; .L_Say333; .L_SayX307; ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: end if] } ! phrase 28 ! [28: end repeat] } ! phrase 29 ! [29: end if] } ! phrase 30 ! [30: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2126, 2126, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Examining (B162_carry_out_examining) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/9 ! Carry out examining something visible ( this is the mark items as seen on examining rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/9 ! Carry out examining ( this is the standard examining rule ): ! === which is equally specific with === ! Rule 3/9 ! Carry out examining ( this is the examine directions rule ): ! === which is equally specific with === ! Rule 4/9 ! Carry out examining ( this is the examine containers rule ): ! === which is equally specific with === ! Rule 5/9 ! Carry out examining ( this is the examine supporters rule ): ! === which is equally specific with === ! Rule 6/9 ! Carry out examining ( this is the examine devices rule ): ! === which is equally specific with === ! Rule 7/9 ! Carry out examining ( this is the examine undescribed things rule ): ! --- now the last-placed rules --- ! Rule 8/9 ! Last carry out examining a hot thing: ! === which is equally specific with === ! Rule 9/9 ! Last carry out examining a person: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Epistemology" by Eric Eve ! Carry out examining something visible ( this is the mark items as seen on examining rule ): [ R_771 ; if ( (actor==player) && ((noun ofclass K2_thing) && ((Adj_3_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_771, 771); ! phrase 1 ! [1: now the noun is familiar] (Adj_93_t2_v9(noun)); ! phrase 2 ! [2: now the noun is seen] (Adj_91_t2_v9(noun)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_771, 771, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out examining ( this is the standard examining rule ): [ R_177 ; if (actor == player) { if (debug_rules) DB_Rule(R_177, 177); ! phrase 1 ! [1: if the noun provides the property description and the description of the noun is not ~~ begin] if ((((WhetherProvides(noun, false, description)))) && (((~~((GProperty(OBJECT_TY, noun,description) == EMPTY_TEXT_VALUE)))))) { ! phrase 2 ! [2: say ~[the description of the noun][line break]~] say__p=1;ParaContent(); @push self; print (PrintText) GProperty(OBJECT_TY, self=noun,description); @pull self; ParaContent(); new_line; .L_Say334; .L_SayX308; ! phrase 3 ! [3: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_177, 177, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out examining ( this is the examine directions rule ): [ R_178 ; if (actor == player) { if (debug_rules) DB_Rule(R_178, 178); ! phrase 1 ! [1: if the noun is a direction begin] if (((noun ofclass K3_direction))) { ! phrase 2 ! [2: issue library message examining action number 5 for the noun] GL__M(##Examine,5,noun); ! phrase 3 ! [3: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_178, 178, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out examining ( this is the examine containers rule ): [ R_179 ; if (actor == player) { if (debug_rules) DB_Rule(R_179, 179); ! phrase 1 ! [1: if the noun is a container begin] if (((noun ofclass K5_container))) { ! phrase 2 ! [2: if the noun is open or the noun is transparent begin] if (((((Adj_77_t1_v9(noun))))) || ((((Adj_76_t1_v9(noun)))))) { ! phrase 3 ! [3: if something described which is not scenery is in the noun and something which is not the player is in the noun begin] if (((Prop_181())) && ((Prop_182()))) { ! phrase 4 ! [4: issue library message searching action number 7 for the noun] GL__M(##Search,7,noun); ! phrase 5 ! [5: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; ! phrase 6 ! [6: otherwise if examine text printed is false] } else if (((((MStack-->MstVO(20012,0)) && true) == (0 && true)))) { ! phrase 7 ! [7: if the player is in the noun begin] if (((noun == ContainerOf(player)))) { ! phrase 8 ! [8: make no decision] rfalse; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: issue library message searching action number 6 for the noun] GL__M(##Search,6,noun); ! phrase 11 ! [11: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_179, 179, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out examining ( this is the examine supporters rule ): [ R_180 ; if (actor == player) { if (debug_rules) DB_Rule(R_180, 180); ! phrase 1 ! [1: if the noun is a supporter begin] if (((noun ofclass K6_supporter))) { ! phrase 2 ! [2: if something described which is not scenery is on the noun and something which is not the player is on the noun begin] if (((Prop_183())) && ((Prop_184()))) { ! phrase 3 ! [3: issue library message looking action number 4 for the noun] GL__M(##Look,4,noun); ! phrase 4 ! [4: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_180, 180, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out examining ( this is the examine devices rule ): [ R_181 ; if (actor == player) { if (debug_rules) DB_Rule(R_181, 181); ! phrase 1 ! [1: if the noun is a device begin] if (((noun ofclass K13_device))) { ! phrase 2 ! [2: issue library message examining action number 3 for the noun] GL__M(##Examine,3,noun); ! phrase 3 ! [3: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_181, 181, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out examining ( this is the examine undescribed things rule ): [ R_182 ; if (actor == player) { if (debug_rules) DB_Rule(R_182, 182); ! phrase 1 ! [1: if examine text printed is false begin] if (((((MStack-->MstVO(20012,0)) && true) == (0 && true)))) { ! phrase 2 ! [2: issue library message examining action number 2 for the noun] GL__M(##Examine,2,noun); ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_182, 182, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last carry out examining a hot thing: [ R_1211 ; if ( (actor==player) && ((noun ofclass K2_thing) && ((Adj_39_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1211, 1211); ! phrase 1 ! [1: now not-mentioning-hotness is true] (Global_Vars-->82) = 1; ! phrase 2 ! [2: say ~[The noun] is ~] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_655; .L_Say335; .L_SayX309; ! phrase 3 ! [3: now not-mentioning-hotness is false] (Global_Vars-->82) = 0; ! phrase 4 ! [4: if heat strength of noun is less than 3 begin] if (((GProperty(OBJECT_TY, noun,p50_heat_strength) < 3))) { ! phrase 5 ! [5: say ~hot.~] say__p=1;ParaContent(); print (PrintText) SC_656; new_line; .L_Say336; .L_SayX310; ! phrase 6 ! [6: otherwise if heat strength of noun is less than 6] } else if (((GProperty(OBJECT_TY, noun,p50_heat_strength) < 6))) { ! phrase 7 ! [7: say ~very hot.~] say__p=1;ParaContent(); print (PrintText) SC_657; new_line; .L_Say337; .L_SayX311; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: say ~blazingly hot.~] say__p=1;ParaContent(); print (PrintText) SC_658; new_line; .L_Say338; .L_SayX312; ! phrase 10 ! [10: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1211, 1211, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Last carry out examining a person: [ R_2101 ; if ( (actor==player) && ((noun ofclass K8_person))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2101, 2101); ! phrase 1 ! [1: unless the noun is the player begin] if (~~(((noun == player)))) { ! phrase 2 ! [2: say ~[The noun] is [if level of the noun is not 0]a level [level of the noun in words] [faction of the noun] creature[otherwise if the group level of the noun is not 0]part of a level [group level of the noun in words] group and [faction of the noun][otherwise]a levelless [faction of the noun] creature[end if].[run paragraph on]~] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_655; if (~~((((~~((GProperty(OBJECT_TY, noun,p31_level) == 0))))))) jump L_Say339; ParaContent(); print (PrintText) SC_659; ParaContent(); @push self; print (number) say__n=(GProperty(OBJECT_TY, self=noun,p31_level)); @pull self; ParaContent(); print (PrintText) SC_209; ParaContent(); @push self; print (T59) GProperty(OBJECT_TY, self=noun,p111_faction); @pull self; ParaContent(); print (PrintText) SC_660; ParaContent(); jump L_SayX313; .L_Say339; if (~~((((~~((GProperty(OBJECT_TY, noun,p32_group_level) == 0))))))) jump L_Say340; ParaContent(); print (PrintText) SC_661; ParaContent(); @push self; print (number) say__n=(GProperty(OBJECT_TY, self=noun,p32_group_level)); @pull self; ParaContent(); print (PrintText) SC_662; ParaContent(); @push self; print (T59) GProperty(OBJECT_TY, self=noun,p111_faction); @pull self; jump L_SayX313; .L_Say340; ParaContent(); print (PrintText) SC_663; ParaContent(); @push self; print (T59) GProperty(OBJECT_TY, self=noun,p111_faction); @pull self; ParaContent(); print (PrintText) SC_660; .L_Say341; .L_SayX313; ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say342; .L_SayX314; ! phrase 3 ! [3: if the number of things carried by the noun is greater than 0 begin] if ((( (Prop_185()) > 0))) { ! phrase 4 ! [4: say ~ [The noun] carries [a list of things carried by the noun].[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_664; ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && (noun == CarrierOf(subst__v)))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT); @pull subst__v; ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say343; .L_SayX315; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the number of things worn by the noun is greater than 0 begin] if ((( (Prop_186()) > 0))) { ! phrase 7 ! [7: say ~ [The noun] wears [a list of things worn by the noun].[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_665; ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && (noun == WearerOf(subst__v)))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT); @pull subst__v; ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say344; .L_SayX316; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: say ~[paragraph break]~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say345; .L_SayX317; ! phrase 10 ! [10: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2101, 2101, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Examining (B163_report_examining) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor examining ( this is the report other people examining rule ): ! --- now the last-placed rules --- ! Rule 2/2 ! Last report examining a weapon ( this is the extra weapon info rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor examining ( this is the report other people examining rule ): [ R_183 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_183, 183); ! phrase 1 ! [1: if the actor is not the player , issue actor-based library message examining action number 4 for the noun] if (((~~((actor == player))))) { AGL__M(##Examine,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_183, 183, true); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Last report examining a weapon ( this is the extra weapon info rule ): [ R_1138 ; if ( (actor==player) && ((noun ofclass K17_weapon))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1138, 1138); ! phrase 1 ! [1: say ~[italic type]Combat statistics: 1d[damage die of the noun] + [weapon damage bonus of the noun] damage; [if weapon attack bonus of the noun is less than 0]-[otherwise]+[end if][absolute value of weapon attack bonus of the noun] attack modifier[if the noun is ranged]; ranged[end if][parry and dodge info of the noun][if the noun is silver]; good against undead[end if][special weapon info of the noun][roman type].[run paragraph on][line break][paragraph break]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_666; ParaContent(); @push self; print (say__n=GProperty(OBJECT_TY, self=noun,p20_damage_die)); @pull self; ParaContent(); print (PrintText) SC_667; ParaContent(); @push self; print (say__n=GProperty(OBJECT_TY, self=noun,p21_weapon_damage_bonus)); @pull self; ParaContent(); print (PrintText) SC_668; if (~~((((GProperty(OBJECT_TY, noun,p25_weapon_attack_bonus) < 0))))) jump L_Say346; ParaContent(); print (PrintText) SC_669; jump L_SayX318; .L_Say346; ParaContent(); print (PrintText) SC_670; .L_Say347; .L_SayX318; ParaContent(); print (say__n=(PHR_1090_r41 (GProperty(OBJECT_TY, noun,p25_weapon_attack_bonus)))); ParaContent(); print (PrintText) SC_671; if (~~(((((Adj_177_t1_v9(noun))))))) jump L_Say348; ParaContent(); print (PrintText) SC_672; .L_Say348; .L_SayX319; ParaContent(); (Resolver_20(noun,"source", 203)); if (~~((((noun.p180_material == I167_silver))))) jump L_Say349; ParaContent(); print (PrintText) SC_673; .L_Say349; .L_SayX320; ParaContent(); @push self; print (PrintText) GProperty(OBJECT_TY, self=noun,p37_special_weapon_info); @pull self; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); ParaContent(); new_line; ParaContent(); DivideParagraphPoint(); new_line; .L_Say350; .L_SayX321; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1138, 1138, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Looking under (B165_carry_out_looking_under) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor looking under ( this is the standard looking under rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor looking under ( this is the standard looking under rule ): [ R_184 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_184, 184); ! phrase 1 ! [1: stop the action with library message looking under action number 2 for the noun] return GL__M(##LookUnder,2,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_184, 184, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Looking under (B166_report_looking_under) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor looking under ( this is the report other people looking under rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor looking under ( this is the report other people looking under rule ): [ R_185 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_185, 185); ! phrase 1 ! [1: if the actor is not the player , issue actor-based library message looking under action number 3 for the noun] if (((~~((actor == player))))) { AGL__M(##LookUnder,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_185, 185, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Searching (B167_check_searching) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor searching ( this is the can't search unless container or supporter rule ): ! === which is equally specific with === ! Rule 2/2 ! Check an actor searching ( this is the can't search closed opaque containers rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor searching ( this is the can't search unless container or supporter rule ): [ R_186 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_186, 186); ! phrase 1 ! [1: if the noun is not a container and the noun is not a supporter , stop the action with library message searching action number 4 for the noun] if ((((~~((noun ofclass K5_container))))) && (((~~((noun ofclass K6_supporter)))))) { return GL__M(##Search,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_186, 186, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor searching ( this is the can't search closed opaque containers rule ): [ R_187 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_187, 187); ! phrase 1 ! [1: if the noun is a closed opaque container , stop the action with library message searching action number 5 for the noun] if (((noun ofclass K5_container) && ((Adj_78_t1_v9(noun))) && ((Adj_75_t1_v9(noun))))) { return GL__M(##Search,5,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_187, 187, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Searching (B169_report_searching) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Report searching a container ( this is the standard search containers rule ): ! === which is equally specific with === ! Rule 2/3 ! Report searching a supporter ( this is the standard search supporters rule ): ! >>> I - Number of aspects constrained >>> ! Rule 3/3 ! Report an actor searching ( this is the report other people searching rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report searching a container ( this is the standard search containers rule ): [ R_188 ; if ( (actor==player) && ((noun ofclass K5_container))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_188, 188); ! phrase 1 ! [1: if the noun contains a described thing which is not scenery , issue library message searching action number 7 for the noun] if ((Prop_187())) { GL__M(##Search,7,noun); } ! phrase 2 ! [2: otherwise issue library message searching action number 6 for the noun] else { GL__M(##Search,6,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_188, 188, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report searching a supporter ( this is the standard search supporters rule ): [ R_189 ; if ( (actor==player) && ((noun ofclass K6_supporter))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_189, 189); ! phrase 1 ! [1: if the noun supports a described thing which is not scenery , issue library message searching action number 3 for the noun] if ((Prop_188())) { GL__M(##Search,3,noun); } ! phrase 2 ! [2: otherwise issue library message searching action number 2 for the noun] else { GL__M(##Search,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_189, 189, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor searching ( this is the report other people searching rule ): [ R_190 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_190, 190); ! phrase 1 ! [1: if the actor is not the player , issue actor-based library message searching action number 8 for the noun] if (((~~((actor == player))))) { AGL__M(##Search,8,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_190, 190, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Consulting it about (B172_report_consulting_it_ab) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor consulting something about ( this is the block consulting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor consulting something about ( this is the block consulting rule ): [ R_191 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_191, 191); ! phrase 1 ! [1: if the actor is the player , issue library message consulting it about action number 1 for the noun] if (((actor == player))) { GL__M(##Consult,1,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message consulting it about action number 2 for the noun] else { AGL__M(##Consult,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_191, 191, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Locking it with (B173_check_locking_it_with) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check an actor locking something with ( this is the can't lock without a lock rule ): ! === which is equally specific with === ! Rule 2/4 ! Check an actor locking something with ( this is the can't lock what's already locked rule ): ! === which is equally specific with === ! Rule 3/4 ! Check an actor locking something with ( this is the can't lock what's open rule ): ! === which is equally specific with === ! Rule 4/4 ! Check an actor locking something with ( this is the can't lock without the correct key rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor locking something with ( this is the can't lock without a lock rule ): [ R_192 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_192, 192); ! phrase 1 ! [1: if the noun provides the property lockable and the noun is lockable , continue the action] if ((((WhetherProvides(noun, true, lockable)))) && ((((Adj_81_t1_v9(noun)))))) { rfalse; } ! phrase 2 ! [2: stop the action with library message locking it with action number 1 for the noun] return GL__M(##Lock,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_192, 192, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor locking something with ( this is the can't lock what's already locked rule ): [ R_193 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_193, 193); ! phrase 1 ! [1: if the noun is locked , stop the action with library message locking it with action number 2 for the noun] if ((((Adj_82_t1_v9(noun))))) { return GL__M(##Lock,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_193, 193, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor locking something with ( this is the can't lock what's open rule ): [ R_194 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_194, 194); ! phrase 1 ! [1: if the noun is open , stop the action with library message locking it with action number 3 for the noun] if ((((Adj_77_t1_v9(noun))))) { return GL__M(##Lock,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_194, 194, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor locking something with ( this is the can't lock without the correct key rule ): [ R_195 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_195, 195); ! phrase 1 ! [1: if the holder of the second noun is not the actor or the noun does not provide the property matching key or the matching key of the noun is not the second noun , stop the action with library message locking it with action number 4 for the second noun] if ((((~~(( (HolderOf(second)) == actor))))) || ((((~~((WhetherProvides(noun, false, with_key)))))) || (((~~((GProperty(OBJECT_TY, noun,with_key) == second))))))) { return GL__M(##Lock,4,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_195, 195, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Locking it with (B174_carry_out_locking_it_wi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor locking something with ( this is the standard locking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor locking something with ( this is the standard locking rule ): [ R_196 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_196, 196); ! phrase 1 ! [1: now the noun is locked] (Adj_82_t2_v9(noun)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_196, 196, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Locking it with (B175_report_locking_it_with) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor locking something with ( this is the standard report locking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor locking something with ( this is the standard report locking rule ): [ R_197 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_197, 197); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message locking it with action number 5 for the noun] GL__M(##Lock,5,noun); ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if the actor is visible , issue actor-based library message locking it with action number 6 for the noun] if ((((Adj_3_t1_v9(actor))))) { AGL__M(##Lock,6,noun); } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_197, 197, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Unlocking it with (B176_check_unlocking_it_with) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor unlocking something with ( this is the can't unlock without a lock rule ): ! === which is equally specific with === ! Rule 2/3 ! Check an actor unlocking something with ( this is the can't unlock what's already unlocked rule ): ! === which is equally specific with === ! Rule 3/3 ! Check an actor unlocking something with ( this is the can't unlock without the correct key rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor unlocking something with ( this is the can't unlock without a lock rule ): [ R_198 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_198, 198); ! phrase 1 ! [1: if the noun provides the property lockable and the noun is lockable , continue the action] if ((((WhetherProvides(noun, true, lockable)))) && ((((Adj_81_t1_v9(noun)))))) { rfalse; } ! phrase 2 ! [2: stop the action with library message unlocking it with action number 1 for the noun] return GL__M(##Unlock,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_198, 198, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor unlocking something with ( this is the can't unlock what's already unlocked rule ): [ R_199 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_199, 199); ! phrase 1 ! [1: if the noun is not locked , stop the action with library message unlocking it with action number 2 for the noun] if (((~~(((Adj_82_t1_v9(noun))))))) { return GL__M(##Unlock,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_199, 199, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor unlocking something with ( this is the can't unlock without the correct key rule ): [ R_200 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_200, 200); ! phrase 1 ! [1: if the holder of the second noun is not the actor or the noun does not provide the property matching key or the matching key of the noun is not the second noun , stop the action with library message unlocking it with action number 3 for the second noun] if ((((~~(( (HolderOf(second)) == actor))))) || ((((~~((WhetherProvides(noun, false, with_key)))))) || (((~~((GProperty(OBJECT_TY, noun,with_key) == second))))))) { return GL__M(##Unlock,3,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_200, 200, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Unlocking it with (B177_carry_out_unlocking_it_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor unlocking something with ( this is the standard unlocking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor unlocking something with ( this is the standard unlocking rule ): [ R_201 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_201, 201); ! phrase 1 ! [1: now the noun is not locked] (Adj_82_t3_v9(noun)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_201, 201, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Unlocking it with (B178_report_unlocking_it_wit) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor unlocking something with ( this is the standard report unlocking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor unlocking something with ( this is the standard report unlocking rule ): [ R_202 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_202, 202); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message unlocking it with action number 4 for the noun] GL__M(##Unlock,4,noun); ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if the actor is visible , issue actor-based library message unlocking it with action number 5 for the noun] if ((((Adj_3_t1_v9(actor))))) { AGL__M(##Unlock,5,noun); } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_202, 202, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Switching on (B179_check_switching_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor switching on ( this is the can't switch on unless switchable rule ): ! === which is equally specific with === ! Rule 2/2 ! Check an actor switching on ( this is the can't switch on what's already on rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor switching on ( this is the can't switch on unless switchable rule ): [ R_203 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_203, 203); ! phrase 1 ! [1: if the noun provides the property switched on , continue the action] if (((WhetherProvides(noun, true, on)))) { rfalse; } ! phrase 2 ! [2: stop the action with library message switching on action number 1 for the noun] return GL__M(##SwitchOn,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_203, 203, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor switching on ( this is the can't switch on what's already on rule ): [ R_204 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_204, 204); ! phrase 1 ! [1: if the noun is switched on , stop the action with library message switching on action number 2 for the noun] if ((((Adj_87_t1_v9(noun))))) { return GL__M(##SwitchOn,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_204, 204, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching on (B180_carry_out_switching_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor switching on ( this is the standard switching on rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor switching on ( this is the standard switching on rule ): [ R_205 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_205, 205); ! phrase 1 ! [1: now the noun is switched on] (Adj_87_t2_v9(noun)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_205, 205, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Switching on (B181_report_switching_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor switching on ( this is the standard report switching on rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor switching on ( this is the standard report switching on rule ): [ R_206 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_206, 206); ! phrase 1 ! [1: if the actor is the player , issue library message switching on action number 3 for the noun] if (((actor == player))) { GL__M(##SwitchOn,3,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message switching on action number 4 for the noun] else { AGL__M(##SwitchOn,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_206, 206, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Switching off (B182_check_switching_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor switching off ( this is the can't switch off unless switchable rule ): ! === which is equally specific with === ! Rule 2/2 ! Check an actor switching off ( this is the can't switch off what's already off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor switching off ( this is the can't switch off unless switchable rule ): [ R_207 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_207, 207); ! phrase 1 ! [1: if the noun provides the property switched on , continue the action] if (((WhetherProvides(noun, true, on)))) { rfalse; } ! phrase 2 ! [2: stop the action with library message switching off action number 1 for the noun] return GL__M(##SwitchOff,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_207, 207, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor switching off ( this is the can't switch off what's already off rule ): [ R_208 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_208, 208); ! phrase 1 ! [1: if the noun is switched off , stop the action with library message switching off action number 2 for the noun] if ((((Adj_88_t1_v9(noun))))) { return GL__M(##SwitchOff,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_208, 208, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching off (B183_carry_out_switching_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor switching off ( this is the standard switching off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor switching off ( this is the standard switching off rule ): [ R_209 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_209, 209); ! phrase 1 ! [1: now the noun is switched off] (Adj_88_t2_v9(noun)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_209, 209, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Switching off (B184_report_switching_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor switching off ( this is the standard report switching off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor switching off ( this is the standard report switching off rule ): [ R_210 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_210, 210); ! phrase 1 ! [1: if the actor is the player , issue library message switching off action number 3 for the noun] if (((actor == player))) { GL__M(##SwitchOff,3,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message switching off action number 4 for the noun] else { AGL__M(##SwitchOff,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_210, 210, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Opening (B185_check_opening) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor opening ( this is the can't open unless openable rule ): ! === which is equally specific with === ! Rule 2/3 ! Check an actor opening ( this is the can't open what's locked rule ): ! === which is equally specific with === ! Rule 3/3 ! Check an actor opening ( this is the can't open what's already open rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor opening ( this is the can't open unless openable rule ): [ R_211 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_211, 211); ! phrase 1 ! [1: if the noun provides the property openable and the noun is openable , continue the action] if ((((WhetherProvides(noun, true, openable)))) && ((((Adj_79_t1_v9(noun)))))) { rfalse; } ! phrase 2 ! [2: stop the action with library message opening action number 1 for the noun] return GL__M(##Open,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_211, 211, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor opening ( this is the can't open what's locked rule ): [ R_212 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_212, 212); ! phrase 1 ! [1: if the noun provides the property lockable and the noun is locked , stop the action with library message opening action number 2 for the noun] if ((((WhetherProvides(noun, true, lockable)))) && ((((Adj_82_t1_v9(noun)))))) { return GL__M(##Open,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_212, 212, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor opening ( this is the can't open what's already open rule ): [ R_213 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_213, 213); ! phrase 1 ! [1: if the noun is open , stop the action with library message opening action number 3 for the noun] if ((((Adj_77_t1_v9(noun))))) { return GL__M(##Open,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_213, 213, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Opening (B186_carry_out_opening) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out an actor opening ( this is the standard opening rule ): ! <<< I - Number of aspects constrained <<< ! Rule 2/2 ! Carry out opening a container ( this is the mark items as seen on opening a container rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor opening ( this is the standard opening rule ): [ R_214 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_214, 214); ! phrase 1 ! [1: now the noun is open] (Adj_77_t2_v9(noun)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_214, 214, true); rfalse; ]; ! No specific request ! From "Epistemology" by Eric Eve ! Carry out opening a container ( this is the mark items as seen on opening a container rule ): [ R_770 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; if ( (actor==player) && ((noun ofclass K5_container))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_770, 770); ! phrase 1 ! [1: repeat with item running through things that are enclosed by the noun begin] for (t_0=Prop_189(0), t_1=Prop_189(t_0): t_0: t_0=t_1, t_1=Prop_189(t_1)) { ! phrase 2 ! [2: if the item is unseen and the item is visible , now the item is seen] if (((((Adj_92_t1_v9(t_0))))) && ((((Adj_3_t1_v9(t_0)))))) { (Adj_91_t2_v9(t_0)); } ! phrase 3 ! [3: end repeat] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_770, 770, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Opening (B187_report_opening) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Report opening the sarcophagus: ! >>> I - Number of aspects constrained >>> ! Rule 2/4 ! Report an actor opening ( this is the reveal any newly visible interior rule ): ! === which is equally specific with === ! Rule 3/4 ! Report an actor opening ( this is the standard report opening rule ): ! --- now the last-placed rules --- ! Rule 4/4 ! Last report opening a rust-releasing container ( called the item ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Report opening the sarcophagus: [ R_1604 ; if ( (actor==player) && ((noun == I398_sarcophagus) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1604, 1604); ! phrase 1 ! [1: if the sarcophagus-inhabitant is not yourself begin] if (((~~(((Global_Vars-->109) == selfobj))))) { ! phrase 2 ! [2: if the sarcophagus-inhabitant is not off-stage or the sarcophagus-inhabitant is dead begin] if ((((~~(((~~Adj_9_t1_v9((Global_Vars-->109)))))))) || ((((~~Adj_33_t1_v9((Global_Vars-->109))))))) { ! phrase 3 ! [3: now the sarcophagus-inhabitant is yourself] (Global_Vars-->109) = selfobj; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the sarcophagus-inhabitant is not yourself and the sarcophagus contains less than one thing begin] if ((((~~(((Global_Vars-->109) == selfobj))))) && ((Prop_190()))) { ! phrase 7 ! [7: move sarcophagus-inhabitant to the location of the sarcophagus] MoveObject((Global_Vars-->109), LocationOf(I398_sarcophagus) , 0, false); ! phrase 8 ! [8: now the player is not hidden] (Adj_221_t3_v9(player)); ! phrase 9 ! [9: say ~As you open the sarcophagus, [a sarcophagus-inhabitant] jumps out!~ instead] say__p=1;ParaContent(); print (PrintText) SC_674; ParaContent(); print (a) (Global_Vars-->109); ParaContent(); print (PrintText) SC_675; new_line; rtrue; .L_Say351; .L_SayX322; rtrue; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if the sarcophagus-inhabitant is not yourself and the sarcophagus encloses at least one things begin] if ((((~~(((Global_Vars-->109) == selfobj))))) && ((Prop_191()))) { ! phrase 12 ! [12: move sarcophagus-inhabitant to the location of the sarcophagus] MoveObject((Global_Vars-->109), LocationOf(I398_sarcophagus) , 0, false); ! phrase 13 ! [13: now the player is not hidden] (Adj_221_t3_v9(player)); ! phrase 14 ! [14: say ~As you open the sarcophagus, you see [a list of things enclosed by the sarcophagus]; but also [a sarcophagus-inhabitant] jumping out of it!~ instead] say__p=1;ParaContent(); print (PrintText) SC_676; ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && (IndirectlyContains(I398_sarcophagus,subst__v)))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT); @pull subst__v; ParaContent(); print (PrintText) SC_677; ParaContent(); print (a) (Global_Vars-->109); ParaContent(); print (PrintText) SC_678; new_line; rtrue; .L_Say352; .L_SayX323; rtrue; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: if the sarcophagus-inhabitant is yourself and the sarcophagus encloses at least one thing begin] if (((((Global_Vars-->109) == selfobj))) && ((Prop_192()))) { ! phrase 17 ! [17: say ~The sarcophagus contains [a list of things enclosed by the sarcophagus].~ instead] say__p=1;ParaContent(); print (PrintText) SC_679; ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && (IndirectlyContains(I398_sarcophagus,subst__v)))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT); @pull subst__v; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say353; .L_SayX324; rtrue; ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: if the sarcophagus-inhabitant is yourself and the sarcophagus contains less than one thing begin] if (((((Global_Vars-->109) == selfobj))) && ((Prop_193()))) { ! phrase 20 ! [20: say ~The sarcophagus is disappointingly empty. Some other grave robber must have been here before you.~ instead] say__p=1;ParaContent(); print (PrintText) SC_680; new_line; rtrue; .L_Say354; .L_SayX325; rtrue; ! phrase 21 ! [21: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1604, 1604, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor opening ( this is the reveal any newly visible interior rule ): [ R_215 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_215, 215); ! phrase 1 ! [1: if the actor is the player and the noun is an opaque container and the first thing held by the noun is not nothing and the noun does not enclose the actor , stop the action with library message opening action number 4 for the noun] if ((((actor == player))) && ((((noun ofclass K5_container) && ((Adj_75_t1_v9(noun))))) && ((((~~(( (child(noun)) == nothing))))) && (((~~((IndirectlyContains(noun,actor))))))))) { return GL__M(##Open,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_215, 215, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor opening ( this is the standard report opening rule ): [ R_216 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_216, 216); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message opening action number 5 for the noun] GL__M(##Open,5,noun); ! phrase 3 ! [3: otherwise if the player can see the actor] } else if (((TestVisibility(player,actor)))) { ! phrase 4 ! [4: issue actor-based library message opening action number 6 for the noun] AGL__M(##Open,6,noun); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: issue actor-based library message opening action number 7 for the noun] AGL__M(##Open,7,noun); ! phrase 7 ! [7: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_216, 216, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last report opening a rust-releasing container ( called the item ): [ R_1249 t_0 ! Local variable e.g. 'item' = container ; if ( (actor==player) && (t_0 = noun, (((t_0=(noun), true) && (noun ofclass K5_container) && ((Adj_211_t1_v9(noun))))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1249, 1249); ! phrase 1 ! [1: now item is not rust-releasing] (Adj_211_t3_v9(t_0)); ! phrase 2 ! [2: now location is rust-spored] (Adj_207_t2_v9(real_location)); ! phrase 3 ! [3: say ~As you open the container, a large cloud of rust spores drifts out of it.~] say__p=1;ParaContent(); print (PrintText) SC_681; new_line; .L_Say355; .L_SayX326; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1249, 1249, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Closing (B188_check_closing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor closing ( this is the can't close unless openable rule ): ! === which is equally specific with === ! Rule 2/2 ! Check an actor closing ( this is the can't close what's already closed rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor closing ( this is the can't close unless openable rule ): [ R_217 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_217, 217); ! phrase 1 ! [1: if the noun provides the property openable and the noun is openable , continue the action] if ((((WhetherProvides(noun, true, openable)))) && ((((Adj_79_t1_v9(noun)))))) { rfalse; } ! phrase 2 ! [2: stop the action with library message closing action number 1 for the noun] return GL__M(##Close,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_217, 217, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor closing ( this is the can't close what's already closed rule ): [ R_218 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_218, 218); ! phrase 1 ! [1: if the noun is closed , stop the action with library message closing action number 2 for the noun] if ((((Adj_78_t1_v9(noun))))) { return GL__M(##Close,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_218, 218, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Closing (B189_carry_out_closing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor closing ( this is the standard closing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor closing ( this is the standard closing rule ): [ R_219 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_219, 219); ! phrase 1 ! [1: now the noun is closed] (Adj_78_t2_v9(noun)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_219, 219, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Closing (B190_report_closing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor closing ( this is the standard report closing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor closing ( this is the standard report closing rule ): [ R_220 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_220, 220); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message closing action number 3 for the noun] GL__M(##Close,3,noun); ! phrase 3 ! [3: otherwise if the player can see the actor] } else if (((TestVisibility(player,actor)))) { ! phrase 4 ! [4: issue actor-based library message closing action number 4 for the noun] AGL__M(##Close,4,noun); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: issue actor-based library message closing action number 5 for the noun] AGL__M(##Close,5,noun); ! phrase 7 ! [7: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_220, 220, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Wearing (B191_check_wearing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/15 ! Check an actor wearing ( this is the can't wear what's not clothing rule ): ! === which is equally specific with === ! Rule 2/15 ! Check an actor wearing ( this is the can't wear what's not held rule ): ! === which is equally specific with === ! Rule 3/15 ! Check an actor wearing ( this is the can't wear what's already worn rule ): ! >>> III - Action requirement >>> ! Rule 4/15 ! Check wearing ( this is the vampire bat cannot wear clothing rule ): ! === which is equally specific with === ! Rule 5/15 ! Check wearing ( this is the cannot wear when grappled rule ): ! --- now the last-placed rules --- ! Rule 6/15 ! Last check wearing a necklace: ! === which is equally specific with === ! Rule 7/15 ! Last check wearing a hat: ! === which is equally specific with === ! Rule 8/15 ! Last check wearing a shirt: ! === which is equally specific with === ! Rule 9/15 ! Last check wearing a cloak: ! === which is equally specific with === ! Rule 10/15 ! Last check wearing shoes: ! === which is equally specific with === ! Rule 11/15 ! Last check wearing a trousers: ! === which is equally specific with === ! Rule 12/15 ! Last check wearing a belt: ! === which is equally specific with === ! Rule 13/15 ! Last check wearing gauntlets: ! === which is equally specific with === ! Rule 14/15 ! Last check wearing a mask: ! === which is equally specific with === ! Rule 15/15 ! Last check wearing a suit: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor wearing ( this is the can't wear what's not clothing rule ): [ R_221 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_221, 221); ! phrase 1 ! [1: if the noun is not a thing or the noun is not wearable , stop the action with library message wearing action number 1 for the noun] if ((((~~((noun ofclass K2_thing))))) || (((~~(((Adj_65_t1_v9(noun)))))))) { return GL__M(##Wear,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_221, 221, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor wearing ( this is the can't wear what's not held rule ): [ R_222 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_222, 222); ! phrase 1 ! [1: if the holder of the noun is not the actor , stop the action with library message wearing action number 2 for the noun] if (((~~(( (HolderOf(noun)) == actor))))) { return GL__M(##Wear,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_222, 222, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor wearing ( this is the can't wear what's already worn rule ): [ R_223 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_223, 223); ! phrase 1 ! [1: if the actor is wearing the noun , stop the action with library message wearing action number 3 for the noun] if (((actor == WearerOf(noun)))) { return GL__M(##Wear,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_223, 223, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check wearing ( this is the vampire bat cannot wear clothing rule ): [ R_1294 ; if (actor == player) { if (debug_rules) DB_Rule(R_1294, 1294); ! phrase 1 ! [1: if the player form of the player is vampire bat begin] if (((GProperty(9, player,p201_player_form) == I184_vampire_bat))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~In bat form, you cannot wear clothing.~ instead] say__p=1;ParaContent(); print (PrintText) SC_682; new_line; rtrue; .L_Say356; .L_SayX327; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1294, 1294, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check wearing ( this is the cannot wear when grappled rule ): [ R_1894 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1894, 1894); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_194())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_195()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~Caught in [the X], you are unable to fiddle with your clothing.~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_683; new_line; rtrue; .L_Say357; .L_SayX328; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1894, 1894, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a necklace: [ R_1358 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K25_necklace))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1358, 1358); ! phrase 1 ! [1: if the player wears a necklace begin] if ((Prop_196())) { ! phrase 2 ! [2: let item be a random necklace worn by the player] t_0 = (Prop_197()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say358; .L_SayX329; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1358, 1358, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a hat: [ R_1359 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K26_hat))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1359, 1359); ! phrase 1 ! [1: if the player wears a hat begin] if ((Prop_198())) { ! phrase 2 ! [2: let item be a random hat worn by the player] t_0 = (Prop_199()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say359; .L_SayX330; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1359, 1359, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a shirt: [ R_1360 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K27_shirt))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1360, 1360); ! phrase 1 ! [1: if the player wears a shirt begin] if ((Prop_200())) { ! phrase 2 ! [2: let item be a random shirt worn by the player] t_0 = (Prop_201()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say360; .L_SayX331; rtrue; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: abide by the suit check rule] if (ProcessRulebook(R_1368)) rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1360, 1360, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a cloak: [ R_1361 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K28_cloak))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1361, 1361); ! phrase 1 ! [1: if the player wears a cloak begin] if ((Prop_202())) { ! phrase 2 ! [2: let item be a random cloak worn by the player] t_0 = (Prop_203()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say361; .L_SayX332; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1361, 1361, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing shoes: [ R_1362 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K29_shoes))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1362, 1362); ! phrase 1 ! [1: if the player wears shoes begin] if ((Prop_204())) { ! phrase 2 ! [2: let item be a random shoes worn by the player] t_0 = (Prop_205()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say362; .L_SayX333; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1362, 1362, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a trousers: [ R_1363 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K30_trousers))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1363, 1363); ! phrase 1 ! [1: if the player wears a trousers begin] if ((Prop_206())) { ! phrase 2 ! [2: let item be a random trousers worn by the player] t_0 = (Prop_207()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say363; .L_SayX334; rtrue; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: abide by the suit check rule] if (ProcessRulebook(R_1368)) rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1363, 1363, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a belt: [ R_1364 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K31_belt))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1364, 1364); ! phrase 1 ! [1: if the player wears a belt begin] if ((Prop_208())) { ! phrase 2 ! [2: let item be a random belt worn by the player] t_0 = (Prop_209()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say364; .L_SayX335; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1364, 1364, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing gauntlets: [ R_1365 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K32_gauntlets))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1365, 1365); ! phrase 1 ! [1: if the player wears gauntlets begin] if ((Prop_210())) { ! phrase 2 ! [2: let item be a random gauntlets worn by the player] t_0 = (Prop_211()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say365; .L_SayX336; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1365, 1365, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a mask: [ R_1366 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K33_mask))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1366, 1366); ! phrase 1 ! [1: if the player wears a mask begin] if ((Prop_212())) { ! phrase 2 ! [2: let item be a random mask worn by the player] t_0 = (Prop_213()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say366; .L_SayX337; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1366, 1366, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check wearing a suit: [ R_1367 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K34_suit))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1367, 1367); ! phrase 1 ! [1: if the player wears a shirt begin] if ((Prop_214())) { ! phrase 2 ! [2: let item be a random shirt worn by the player] t_0 = (Prop_215()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say367; .L_SayX338; rtrue; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the player wears a cursed cloak begin] if ((Prop_216())) { ! phrase 7 ! [7: let item be a random cloak worn by the player] t_0 = (Prop_217()) ; ! phrase 8 ! [8: take no time] (PHR_853_r33 ()); ! phrase 9 ! [9: say ~You will first have to uncurse [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_685; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say368; .L_SayX339; rtrue; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if the player wears a trousers begin] if ((Prop_218())) { ! phrase 12 ! [12: let item be a random trousers worn by the player] t_0 = (Prop_219()) ; ! phrase 13 ! [13: take no time] (PHR_853_r33 ()); ! phrase 14 ! [14: say ~You will first have to take off [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say369; .L_SayX340; rtrue; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: if the player wears a cursed belt begin] if ((Prop_220())) { ! phrase 17 ! [17: let item be a random belt worn by the player] t_0 = (Prop_221()) ; ! phrase 18 ! [18: take no time] (PHR_853_r33 ()); ! phrase 19 ! [19: say ~You will first have to uncurse [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_685; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say370; .L_SayX341; rtrue; ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: abide by the suit check rule] if (ProcessRulebook(R_1368)) rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1367, 1367, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Wearing (B192_carry_out_wearing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor wearing ( this is the standard wearing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor wearing ( this is the standard wearing rule ): [ R_224 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_224, 224); ! phrase 1 ! [1: now the actor wears the noun] WearObject(noun,actor); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_224, 224, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Wearing (B193_report_wearing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor wearing ( this is the standard report wearing rule ): ! >>> III - Action requirement >>> ! Rule 2/2 ! Report wearing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor wearing ( this is the standard report wearing rule ): [ R_225 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_225, 225); ! phrase 1 ! [1: if the actor is the player , issue library message wearing action number 4 for the noun] if (((actor == player))) { GL__M(##Wear,4,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message wearing action number 5 for the noun] else { AGL__M(##Wear,5,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_225, 225, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Report wearing: [ R_1394 ; if (actor == player) { if (debug_rules) DB_Rule(R_1394, 1394); ! phrase 1 ! [1: unless the hidden identity of the noun is the non-thing begin] if (~~(((GProperty(OBJECT_TY, noun,p58_hidden_identity) == I270_non_thing)))) { ! phrase 2 ! [2: now the hidden identity of the noun is curse-identified] (Adj_258_t2_v9(GProperty(OBJECT_TY, noun,p58_hidden_identity))); ! phrase 3 ! [3: now the player is wearing the hidden identity of the noun] WearObject(GProperty(OBJECT_TY, noun,p58_hidden_identity),player); ! phrase 4 ! [4: set pronouns from the hidden identity of the noun] PronounNotice(GProperty(OBJECT_TY, noun,p58_hidden_identity)); ! phrase 5 ! [5: remove the noun from play] RemoveFromPlay(noun); ! phrase 6 ! [6: say ~As soon as you put on [the noun], your flesh crawls. You realise that [the noun] [is-are] actually the [hidden identity of the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_554; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_686; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_885_r49 ());ParaContent(); print (PrintText) SC_687; ParaContent(); @push self; print (PrintShortName) GProperty(OBJECT_TY, self=noun,p58_hidden_identity); @pull self; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say371; .L_SayX342; rtrue; ! phrase 7 ! [7: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1394, 1394, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Taking off (B194_check_taking_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check taking off something: ! >>> I - Number of aspects constrained >>> ! Rule 2/3 ! Check an actor taking off ( this is the can't take off what's not worn rule ): ! >>> III - Action requirement >>> ! Rule 3/3 ! Check taking off ( this is the cannot take off when grappled rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check taking off something: [ R_1395 ; if ( (actor==player) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1395, 1395); ! phrase 1 ! [1: if the noun is cursed begin] if ((((Adj_256_t1_v9(noun))))) { ! phrase 2 ! [2: say ~A curse makes the item unmovable.~ instead] say__p=1;ParaContent(); print (PrintText) SC_688; new_line; rtrue; .L_Say372; .L_SayX343; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1395, 1395, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking off ( this is the can't take off what's not worn rule ): [ R_226 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_226, 226); ! phrase 1 ! [1: if the actor is not wearing the noun , stop the action with library message taking off action number 1 for the noun] if (((~~((actor == WearerOf(noun)))))) { return GL__M(##Disrobe,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_226, 226, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check taking off ( this is the cannot take off when grappled rule ): [ R_1895 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1895, 1895); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_222())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_223()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~Caught in [the X], you are unable to fiddle with your clothing.~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_683; new_line; rtrue; .L_Say373; .L_SayX344; rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1895, 1895, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Taking off (B195_carry_out_taking_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor taking off ( this is the standard taking off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor taking off ( this is the standard taking off rule ): [ R_227 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_227, 227); ! phrase 1 ! [1: now the actor carries the noun] MoveObject(noun,actor); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_227, 227, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Taking off (B196_report_taking_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor taking off ( this is the standard report taking off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor taking off ( this is the standard report taking off rule ): [ R_228 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_228, 228); ! phrase 1 ! [1: if the actor is the player , issue library message taking off action number 2 for the noun] if (((actor == player))) { GL__M(##Disrobe,2,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message taking off action number 3 for the noun] else { AGL__M(##Disrobe,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_228, 228, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Giving it to (B197_check_giving_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! Check an actor giving something to ( this is the can't give what you haven't got rule ): ! === which is equally specific with === ! Rule 2/5 ! Check an actor giving something to ( this is the can't give to yourself rule ): ! === which is equally specific with === ! Rule 3/5 ! Check an actor giving something to ( this is the can't give to a non-person rule ): ! === which is equally specific with === ! Rule 4/5 ! Check an actor giving something to ( this is the can't give clothes being worn rule ): ! === which is equally specific with === ! Rule 5/5 ! Check an actor giving something to ( this is the block giving rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor giving something to ( this is the can't give what you haven't got rule ): [ R_229 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_229, 229); ! phrase 1 ! [1: if the actor is not the holder of the noun , stop the action with library message giving it to action number 1 for the noun] if (((~~((actor == (HolderOf(noun)) ))))) { return GL__M(##Give,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_229, 229, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor giving something to ( this is the can't give to yourself rule ): [ R_230 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_230, 230); ! phrase 1 ! [1: if the actor is the second noun , stop the action with library message giving it to action number 2 for the noun] if (((actor == second))) { return GL__M(##Give,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_230, 230, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor giving something to ( this is the can't give to a non-person rule ): [ R_231 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_231, 231); ! phrase 1 ! [1: if the second noun is not a person , stop the action with library message giving it to action number 4 for the second noun] if (((~~((second ofclass K8_person))))) { return GL__M(##Give,4,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_231, 231, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor giving something to ( this is the can't give clothes being worn rule ): [ R_232 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_232, 232); ! phrase 1 ! [1: if the actor is wearing the noun begin] if (((actor == WearerOf(noun)))) { ! phrase 2 ! [2: issue library message dropping action number 3 for the noun] GL__M(##Drop,3,noun); ! phrase 3 ! [3: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Disrobe, noun, 0);; @pull keep_silent; ! phrase 4 ! [4: if the actor is wearing the noun , stop the action] if (((actor == WearerOf(noun)))) { rtrue; } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_232, 232, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor giving something to ( this is the block giving rule ): [ R_233 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_233, 233); ! phrase 1 ! [1: stop the action with library message giving it to action number 3 for the second noun] return GL__M(##Give,3,second); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_233, 233, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Giving it to (B198_carry_out_giving_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor giving something to ( this is the standard giving rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Carry out an actor giving something to ( this is the standard giving rule ): [ R_234 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_234, 234); ! phrase 1 ! [1: move the noun to the second noun] MoveObject(noun, second, 0, false); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_234, 234, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Giving it to (B199_report_giving_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor giving something to ( this is the standard report giving rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor giving something to ( this is the standard report giving rule ): [ R_235 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_235, 235); ! phrase 1 ! [1: if the actor is the player begin] if (((actor == player))) { ! phrase 2 ! [2: issue library message giving it to action number 5 for the noun] GL__M(##Give,5,noun); ! phrase 3 ! [3: otherwise if the second noun is the player] } else if (((second == player))) { ! phrase 4 ! [4: issue actor-based library message giving it to action number 6 for the noun] AGL__M(##Give,6,noun); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: issue actor-based library message giving it to action number 7 for the noun] AGL__M(##Give,7,noun); ! phrase 7 ! [7: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_235, 235, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Showing it to (B200_check_showing_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor showing something to ( this is the can't show what you haven't got rule ): ! === which is equally specific with === ! Rule 2/3 ! Check an actor showing something to ( this is the convert show to yourself to examine rule ): ! === which is equally specific with === ! Rule 3/3 ! Check an actor showing something to ( this is the block showing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor showing something to ( this is the can't show what you haven't got rule ): [ R_236 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_236, 236); ! phrase 1 ! [1: if the actor is not the holder of the noun , stop the action with library message showing it to action number 1 for the noun] if (((~~((actor == (HolderOf(noun)) ))))) { return GL__M(##Show,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_236, 236, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor showing something to ( this is the convert show to yourself to examine rule ): [ R_237 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_237, 237); ! phrase 1 ! [1: if the actor is the second noun , convert to the examining action on the noun] if (((actor == second))) { return GVS_Convert(##Examine,noun,0); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_237, 237, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor showing something to ( this is the block showing rule ): [ R_238 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_238, 238); ! phrase 1 ! [1: stop the action with library message showing it to action number 2 for the second noun] return GL__M(##Show,2,second); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_238, 238, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waking (B203_check_waking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor waking ( this is the block waking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor waking ( this is the block waking rule ): [ R_239 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_239, 239); ! phrase 1 ! [1: stop the action with library message waking action number 1 for the noun] return GL__M(##WakeOther,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_239, 239, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Throwing it at (B206_check_throwing_it_at) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor throwing something at ( this is the implicitly remove thrown clothing rule ): ! === which is equally specific with === ! Rule 2/3 ! Check an actor throwing something at ( this is the futile to throw things at inanimate objects rule ): ! === which is equally specific with === ! Rule 3/3 ! Check an actor throwing something at ( this is the block throwing at rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor throwing something at ( this is the implicitly remove thrown clothing rule ): [ R_240 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_240, 240); ! phrase 1 ! [1: if the actor is wearing the noun begin] if (((actor == WearerOf(noun)))) { ! phrase 2 ! [2: issue library message dropping action number 3 for the noun] GL__M(##Drop,3,noun); ! phrase 3 ! [3: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; TryAction(0, actor, ##Disrobe, noun, 0);; @pull keep_silent; ! phrase 4 ! [4: if the actor is wearing the noun , stop the action] if (((actor == WearerOf(noun)))) { rtrue; } ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_240, 240, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor throwing something at ( this is the futile to throw things at inanimate objects rule ): [ R_241 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_241, 241); ! phrase 1 ! [1: if the second noun is not a person , stop the action with library message throwing it at action number 1 for the second noun] if (((~~((second ofclass K8_person))))) { return GL__M(##ThrowAt,1,second); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_241, 241, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor throwing something at ( this is the block throwing at rule ): [ R_242 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_242, 242); ! phrase 1 ! [1: stop the action with library message throwing it at action number 2 for the noun] return GL__M(##ThrowAt,2,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_242, 242, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Attacking (B209_check_attacking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/12 ! Check attacking when the noun is not a person ( this is the only attack persons rule ): ! >>> II - When/while requirement >>> ! Rule 2/12 ! Check attacking rule when the player is at-React ( this is the cannot attack as reaction rule ): ! >>> I - Number of aspects constrained >>> ! Rule 3/12 ! This is the alternative do not kill yourself rule: ! <<< I - Number of aspects constrained <<< ! Rule 4/12 ! Check attacking a dead person ( this is the only attack the living rule ): ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 5/12 ! Check Miranda attacking: ! >>> III.3.3 - Action/What/Actor Performing Action >>> ! Rule 6/12 ! Check an enslaved npc attacking ( this is the slaves may be freed from mindslug rule ): ! >>> III.3.3 - Action/What/Actor Performing Action >>> ! Rule 7/12 ! Check an actor attacking when the thorny bushes are in the location ( this is the attack with thorns in the location rule ): ! >>> I - Number of aspects constrained >>> ! Rule 8/12 ! Check an actor attacking ( this is the attack a spinning chain golem rule ): ! >>> III - Action requirement >>> ! Rule 9/12 ! This is the alternative do not attack friendly people rule: ! === which is equally specific with === ! Rule 10/12 ! This is the alternative do not attack neutral people rule: ! === which is equally specific with === ! Rule 11/12 ! Check attacking ( this is the cannot attack when grappled rule ): ! === which is equally specific with === ! Rule 12/12 ! Check attacking ( this is the attacking with the demon blade is a bad idea rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check attacking when the noun is not a person ( this is the only attack persons rule ): [ R_1000 ; if (actor == player) { if ((((((~~((noun ofclass K8_person)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1000, 1000); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~Things are not your enemies.~ instead] say__p=1;ParaContent(); print (PrintText) SC_689; new_line; rtrue; .L_Say374; .L_SayX345; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1000, 1000, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check attacking rule when the player is at-React ( this is the cannot attack as reaction rule ): [ R_1005 ; if (actor == player) { if ((((((player.p112_combat_state == I97_at_react)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1005, 1005); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~Attacking is an action, not a reaction.~ instead] say__p=1;ParaContent(); print (PrintText) SC_690; new_line; rtrue; .L_Say375; .L_SayX346; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1005, 1005, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! This is the alternative do not kill yourself rule: [ R_1578 ; if (actor == player) { if (debug_rules) DB_Rule(R_1578, 1578); ! phrase 1 ! [1: if the noun is the player and nomos bonus is false begin] if ((((noun == player))) && (((((Global_Vars-->103) && true) == (0 && true))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You are not that desperate!~ instead] say__p=1;ParaContent(); print (PrintText) SC_691; new_line; rtrue; .L_Say376; .L_SayX347; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1578, 1578, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check attacking a dead person ( this is the only attack the living rule ): [ R_1001 ; if ( (actor==player) && ((noun ofclass K8_person) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1001, 1001); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~[The noun] is already dead.~ instead] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_692; new_line; rtrue; .L_Say377; .L_SayX348; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1001, 1001, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check Miranda attacking: [ R_1755 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I446_miranda) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1755, 1755); ! phrase 1 ! [1: if the stun count of the noun is 0 and miranda is not at-stun begin] if ((((GProperty(OBJECT_TY, noun,p60_stun_count) == 0))) && (((~~(((Adj_268_t1_v9(I446_miranda)))))))) { ! phrase 2 ! [2: try miranda stunning the noun instead] TryAction(0, I446_miranda, ##A107_stunning, noun, 0);; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1755, 1755, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check an enslaved npc attacking ( this is the slaves may be freed from mindslug rule ): [ R_1856 ; if ( (actor~=player) && (act_requester==nothing) && (((Adj_271_t1_v9(actor))) && ((~~Adj_35_t1_v9(actor))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1856, 1856); ! phrase 1 ! [1: consider the free slaves of the mindslug when it is killed rule] ProcessRulebook(R_1855); ! phrase 2 ! [2: if actor is not enslaved begin] if (((~~((actor.p111_faction == I465_enslaved))))) { ! phrase 3 ! [3: do nothing instead] ; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1856, 1856, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check an actor attacking when the thorny bushes are in the location ( this is the attack with thorns in the location rule ): [ R_1964 t_0 ! Local variable e.g. '?-1,-1?' = number ; if ((act_requester==nothing) && (self=actor,true) && (((real_location == ContainerOf(I491_thorny_bushes))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1964, 1964); ! phrase 1 ! [1: unless the global attacker weapon is ranged begin] if (~~((((Adj_177_t1_v9((Global_Vars-->43))))))) { ! phrase 2 ! [2: unless the global attacker is flying begin] if (~~(((PHR_1166_r51 ((Global_Vars-->41)))))) { ! phrase 3 ! [3: unless the global attacker is bodmall begin] if (~~((((Global_Vars-->41) == I488_bodmall)))) { ! phrase 4 ! [4: unless the global attacker is the player and the power of bodmall is granted begin] if (~~(((((Global_Vars-->41) == player))) && ((((Adj_158_t1_v9(I492_power_of_bodmall))))))) { ! phrase 5 ! [5: say ~[The global attacker] must move through the thorny bushes to reach [the global defender]. [italic type]~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_693; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_506; ParaContent(); style underline; .L_Say378; .L_SayX349; ! phrase 6 ! [6: test the perception of the global attacker against 12] (PHR_1134_r60 ((Global_Vars-->41),12)); ! phrase 7 ! [7: if test result is true begin] if (((((Global_Vars-->78) && true) == (1 && true)))) { ! phrase 8 ! [8: say ~ ~] say__p=1;ParaContent(); print (PrintText) SC_209; .L_Say379; .L_SayX350; ! phrase 9 ! [9: test the dexterity of the global attacker against 12] (PHR_1135_r61 ((Global_Vars-->41),12)); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if test result is true begin] if (((((Global_Vars-->78) && true) == (1 && true)))) { ! phrase 12 ! [12: say ~[roman type] The thorns deal [bold type]no damage[roman type].~] say__p=1;ParaContent(); style roman; ParaContent(); print (PrintText) SC_694; ParaContent(); style bold; ParaContent(); print (PrintText) SC_695; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say380; .L_SayX351; ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: let n be 3] t_0 = 3; ! phrase 15 ! [15: calculate the pdr for global attacker] (PHR_1260_r62 ((Global_Vars-->41))); ! phrase 16 ! [16: decrease n by pdr] t_0 = t_0 - (Global_Vars-->87); ! phrase 17 ! [17: if n is less than 0 , now n is 0] if (((t_0 < 0))) { t_0 = 0; } ! phrase 18 ! [18: if n is 0 begin] if (((t_0 == 0))) { ! phrase 19 ! [19: say ~ [roman type]Because of damage reduction, the thorns deal [bold type]no damage[roman type] to [the global attacker].~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); style roman; ParaContent(); print (PrintText) SC_696; ParaContent(); style bold; ParaContent(); print (PrintText) SC_695; ParaContent(); style roman; ParaContent(); print (PrintText) SC_443; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; new_line; .L_Say381; .L_SayX352; ! phrase 20 ! [20: otherwise] } else { ! phrase 21 ! [21: say ~ [roman type]The thorns deal [bold type][n] damage[roman type] to [the global attacker].~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); style roman; ParaContent(); print (PrintText) SC_697; ParaContent(); style bold; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_443; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; new_line; .L_Say382; .L_SayX353; ! phrase 22 ! [22: decrease the health of the global attacker by n] WriteGProperty(9, (Global_Vars-->41),p14_health,GProperty(9, (Global_Vars-->41),p14_health) - t_0); ! phrase 23 ! [23: unless the global attacker is alive begin] if (~~((((Adj_33_t1_v9((Global_Vars-->41))))))) { ! phrase 24 ! [24: if the global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 25 ! [25: say ~Your weakened body could not handle this!~] say__p=1;ParaContent(); print (PrintText) SC_699; new_line; .L_Say383; .L_SayX354; ! phrase 26 ! [26: end the game saying ~A thorn kills a man, not by force, but by pricking often.~] deadflag=SC_700; story_complete=false; ! phrase 27 ! [27: rule fails] RulebookFails(); rtrue; ! phrase 28 ! [28: otherwise] } else { ! phrase 29 ! [29: say ~[The name of the global attacker] is killed by the thorns!~] say__p=1;ParaContent(); (PHR_830_r63 ((Global_Vars-->41)));ParaContent(); print (PrintText) SC_701; new_line; .L_Say384; .L_SayX355; ! phrase 30 ! [30: rule fails] RulebookFails(); rtrue; ! phrase 31 ! [31: end if] } ! phrase 32 ! [32: end unless] } ! phrase 33 ! [33: end if] } ! phrase 34 ! [34: end if] } ! phrase 35 ! [35: end unless] } ! phrase 36 ! [36: end unless] } ! phrase 37 ! [37: end unless] } ! phrase 38 ! [38: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1964, 1964, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check an actor attacking ( this is the attack a spinning chain golem rule ): [ R_1774 t_0 ! Local variable e.g. '?-1,-1?' = number ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1774, 1774); ! phrase 1 ! [1: if the global defender is the chain golem and the global attacker weapon is not ranged begin] if (((((Global_Vars-->42) == I451_chain_golem))) && (((~~(((Adj_177_t1_v9((Global_Vars-->43))))))))) { ! phrase 2 ! [2: if the concentration of the global defender is not 0 begin] if (((~~((GProperty(9, (Global_Vars-->42),p26_concentration) == 0))))) { ! phrase 3 ! [3: say ~[The global attacker] attempt[s] to duck under the whirling chains. ~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_702; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_703; .L_Say385; .L_SayX356; ! phrase 4 ! [4: let n be the concentration of the chain golem] t_0 = GProperty(9, I451_chain_golem,p26_concentration); ! phrase 5 ! [5: increase n by 7] t_0 = t_0 + 7; ! phrase 6 ! [6: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 7 ! [7: decrease n by 1] t_0 = t_0 - 1; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: test the dexterity of the global attacker against n] (PHR_1135_r61 ((Global_Vars-->41),t_0)); ! phrase 10 ! [10: if test result is false begin] if (((((Global_Vars-->78) && true) == (0 && true)))) { ! phrase 11 ! [11: let n be two times the concentration of the chain golem] t_0 = (2*GProperty(9, I451_chain_golem,p26_concentration)) ; ! phrase 12 ! [12: calculate the pdr for global attacker] (PHR_1260_r62 ((Global_Vars-->41))); ! phrase 13 ! [13: decrease n by pdr] t_0 = t_0 - (Global_Vars-->87); ! phrase 14 ! [14: if n is less than 0 , now n is 0] if (((t_0 < 0))) { t_0 = 0; } ! phrase 15 ! [15: unless n is 0 begin] if (~~(((t_0 == 0)))) { ! phrase 16 ! [16: say ~ One of the chains catches [the global attacker] with a loud smack, dealing [bold type][n] damage[roman type][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_704; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_705; ParaContent(); style bold; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); RunParagraphOn(); .L_Say386; .L_SayX357; ! phrase 17 ! [17: decrease the health of the global attacker by n] WriteGProperty(9, (Global_Vars-->41),p14_health,GProperty(9, (Global_Vars-->41),p14_health) - t_0); ! phrase 18 ! [18: if the global attacker is alive begin] if ((((Adj_33_t1_v9((Global_Vars-->41)))))) { ! phrase 19 ! [19: if the concentration of the global attacker is not zero begin] if (((~~((GProperty(9, (Global_Vars-->41),p26_concentration) == 0))))) { ! phrase 20 ! [20: say ~ and breaking [possessive of the global attacker] concentration.~] say__p=1;ParaContent(); print (PrintText) SC_706; ParaContent(); (PHR_940_r42 ((Global_Vars-->41)));ParaContent(); print (PrintText) SC_707; new_line; .L_Say387; .L_SayX358; ! phrase 21 ! [21: now concentration of the global attacker is 0] WriteGProperty(9, (Global_Vars-->41),p26_concentration,0); ! phrase 22 ! [22: otherwise] } else { ! phrase 23 ! [23: say ~.~] say__p=1;ParaContent(); print (PrintText) SC_310; new_line; .L_Say388; .L_SayX359; ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: otherwise] } else { ! phrase 26 ! [26: if the global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 27 ! [27: say ~ and killing you.~] say__p=1;ParaContent(); print (PrintText) SC_708; new_line; .L_Say389; .L_SayX360; ! phrase 28 ! [28: have an event of the chain golem killing the player] (PHR_1126_r64 (I451_chain_golem,player)); ! phrase 29 ! [29: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 30 ! [30: end the game saying ~You died valiantly, but in vain.~] deadflag=SC_709; story_complete=false; ! phrase 31 ! [31: end if] } ! phrase 32 ! [32: rule fails] RulebookFails(); rtrue; ! phrase 33 ! [33: otherwise] } else { ! phrase 34 ! [34: say ~. [The global attacker] immediately dies.~] say__p=1;ParaContent(); print (PrintText) SC_506; ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_710; new_line; .L_Say390; .L_SayX361; ! phrase 35 ! [35: have an event of the chain golem killing the global attacker] (PHR_1126_r64 (I451_chain_golem,(Global_Vars-->41))); ! phrase 36 ! [36: rule fails] RulebookFails(); rtrue; ! phrase 37 ! [37: end if] } ! phrase 38 ! [38: end if] } ! phrase 39 ! [39: otherwise] } else { ! phrase 40 ! [40: say ~ One of the chains catches [the global attacker] with a loud smack, but it deals no damage[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_704; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_711; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say391; .L_SayX362; ! phrase 41 ! [41: end unless] } ! phrase 42 ! [42: otherwise] } else { ! phrase 43 ! [43: say ~[paragraph break]~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say392; .L_SayX363; ! phrase 44 ! [44: end if] } ! phrase 45 ! [45: end if] } ! phrase 46 ! [46: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1774, 1774, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! This is the alternative do not attack friendly people rule: [ R_1579 ; if (actor == player) { if (debug_rules) DB_Rule(R_1579, 1579); ! phrase 1 ! [1: if the faction of the player is the faction of the noun and nomos bonus is false begin] if ((((GProperty(9, player,p111_faction) == GProperty(OBJECT_TY, noun,p111_faction)))) && (((((Global_Vars-->103) && true) == (0 && true))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~[The noun] is your friend, not your enemy!~ instead] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_712; new_line; rtrue; .L_Say393; .L_SayX364; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1579, 1579, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! This is the alternative do not attack neutral people rule: [ R_1580 ; if (actor == player) { if (debug_rules) DB_Rule(R_1580, 1580); ! phrase 1 ! [1: if the faction of the player does not hate the faction of the noun and nomos bonus is false begin] if ((((~~(((Relation_TestVtoV(GProperty(9, player,p111_faction),Rel_Record_67,GProperty(OBJECT_TY, noun,p111_faction),false))))))) && (((((Global_Vars-->103) && true) == (0 && true))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~[The noun] is not your enemy.~ instead] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_713; new_line; rtrue; .L_Say394; .L_SayX365; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1580, 1580, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check attacking ( this is the cannot attack when grappled rule ): [ R_1900 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1900, 1900); ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_224())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_225()) ; ! phrase 3 ! [3: unless the noun is x begin] if (~~(((noun == t_0)))) { ! phrase 4 ! [4: take no time] (PHR_853_r33 ()); ! phrase 5 ! [5: say ~Caught in [the X], you are unable to attack anyone else.~ instead] say__p=1;ParaContent(); print (PrintText) SC_610; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_714; new_line; rtrue; .L_Say395; .L_SayX366; rtrue; ! phrase 6 ! [6: end unless] } ! phrase 7 ! [7: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1900, 1900, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check attacking ( this is the attacking with the demon blade is a bad idea rule ): [ R_1987 ; if (actor == player) { if (debug_rules) DB_Rule(R_1987, 1987); ! phrase 1 ! [1: if the player carries the demon blade and the demon blade is readied begin] if ((((player == CarrierOf(I498_demon_blade)))) && ((((Adj_103_t1_v9(I498_demon_blade)))))) { ! phrase 2 ! [2: if a random chance of 3 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 3) )) { ! phrase 3 ! [3: say ~The [bold type]demonic blade[roman type] turns on you!~] say__p=1;ParaContent(); print (PrintText) SC_371; ParaContent(); style bold; ParaContent(); print (PrintText) SC_715; ParaContent(); style roman; ParaContent(); print (PrintText) SC_716; new_line; .L_Say396; .L_SayX367; ! phrase 4 ! [4: try the player hitting the player instead] TryAction(0, player, ##A86_hitting, player, 0);; rtrue; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1987, 1987, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Attacking (B210_carry_out_attacking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First carry out attacking the player when the combat status is peace ( this is the attack self when not in combat rule ): ! --- now the mid-placed rules --- ! Rule 2/3 ! Carry out an actor attacking ( this is the standard carry out an actor attacking rule ): ! >>> III - Action requirement >>> ! Rule 3/3 ! Carry out attacking: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! First carry out attacking the player when the combat status is peace ( this is the attack self when not in combat rule ): [ R_1067 ; if ( (actor==player) && ((noun == player) && (true)) && (self=actor,true) && ((((Global_Vars-->29) == I99_peace)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1067, 1067); ! phrase 1 ! [1: try the actor hitting the noun instead] TryAction(0, actor, ##A86_hitting, noun, 0);; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1067, 1067, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor attacking ( this is the standard carry out an actor attacking rule ): [ R_1006 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_12(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_12 I7BASPL ct_0 ct_1 ! Used for table searches ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1006, 1006); ! phrase 1 ! [1: choose a blank row in the table of delayed actions] ct_0 = T9_delayed_actions; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the action speed entry is 10] TableLookUpEntry(ct_0,118,ct_1,1,10); ! phrase 3 ! [3: now the action entry is the action of the actor hitting the noun] BlkValueCopy(TableLookUpEntry(ct_0,119,ct_1,5), TryAction(0, actor, ##A86_hitting, noun, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: now the combat state of the noun is at-react] WriteGProperty(OBJECT_TY, noun,p112_combat_state,I97_at_react); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1006, 1006, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Carry out attacking: [ R_1308 ; if (actor == player) { if (debug_rules) DB_Rule(R_1308, 1308); ! phrase 1 ! [1: increase detection probability by 70] (Global_Vars-->89) = (Global_Vars-->89) + 70; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1308, 1308, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Attacking (B211_report_attacking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/20 ! Report the swarm of daggers attacking: ! === which is equally specific with === ! Rule 2/20 ! Report the blood ape attacking: ! === which is equally specific with === ! Rule 3/20 ! Report the ravenous armadillo attacking: ! === which is equally specific with === ! Rule 4/20 ! Report Miranda attacking: ! === which is equally specific with === ! Rule 5/20 ! Report the chain golem attacking: ! === which is equally specific with === ! Rule 6/20 ! Report the bomb attacking: ! === which is equally specific with === ! Rule 7/20 ! Report the reaper attacking: ! === which is equally specific with === ! Rule 8/20 ! Report the mindslug attacking: ! === which is equally specific with === ! Rule 9/20 ! Report Fafhrd attacking: ! === which is equally specific with === ! Rule 10/20 ! Report Mouser attacking: ! === which is equally specific with === ! Rule 11/20 ! Report the giant tentacle attacking: ! === which is equally specific with === ! Rule 12/20 ! Report the healer of Aite attacking: ! === which is equally specific with === ! Rule 13/20 ! Report the tormentor of Aite attacking: ! === which is equally specific with === ! Rule 14/20 ! Report the defender of Aite attacking: ! === which is equally specific with === ! Rule 15/20 ! Report Bodmall attacking: ! === which is equally specific with === ! Rule 16/20 ! Report the corpse attacking: ! === which is equally specific with === ! Rule 17/20 ! Report the aswang attacking: ! === which is equally specific with === ! Rule 18/20 ! Report the smoke demon attacking: ! === which is equally specific with === ! Rule 19/20 ! Report the imp attacking: ! >>> III.3.3 - Action/What/Actor Performing Action >>> ! Rule 20/20 ! Report an npc attacking ( this is the standard report an actor attacking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the swarm of daggers attacking: [ R_1690 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I436_swarm_of_daggers) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1690, 1690); ! phrase 1 ! [1: say ~The swarm of daggers [one of]bears down upon[or]launches itself at[or]moves in to attack[at random] [the noun].~] say__p=1;ParaContent(); print (PrintText) SC_717; ParaContent(); I7_ST_say_one_of-->4 = i7_soo_ran(I7_ST_say_one_of-->4, 3); switch((I7_ST_say_one_of-->4)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_718; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_719; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_720; ParaContent(); } ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say397; .L_SayX368; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1690, 1690, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the blood ape attacking: [ R_1707 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I439_blood_ape) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1707, 1707); ! phrase 1 ! [1: say ~The blood ape [one of]swings at [possessive of the global defender] head[or]jumps at [global defender] with its fists ready to swing[at random].~] say__p=1;ParaContent(); print (PrintText) SC_721; ParaContent(); I7_ST_say_one_of-->5 = i7_soo_ran(I7_ST_say_one_of-->5, 2); switch((I7_ST_say_one_of-->5)%(2+1)-1) { 0: ParaContent(); print (PrintText) SC_722; ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); print (PrintText) SC_723; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_724; ParaContent(); print (PrintShortName) (Global_Vars-->42); ParaContent(); print (PrintText) SC_725; ParaContent(); } ParaContent(); print (PrintText) SC_310; new_line; .L_Say398; .L_SayX369; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1707, 1707, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the ravenous armadillo attacking: [ R_1722 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I442_ravenous_armadillo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1722, 1722); ! phrase 1 ! [1: say ~The armadillo raises its tail threateningly towards [the global defender].~] say__p=1;ParaContent(); print (PrintText) SC_726; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; new_line; .L_Say399; .L_SayX370; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1722, 1722, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Miranda attacking: [ R_1766 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I446_miranda) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1766, 1766); ! phrase 1 ! [1: say ~Miranda jumps towards [the global defender][if Miranda is at-stun], intent on stunning[end if].~] say__p=1;ParaContent(); print (PrintText) SC_727; ParaContent(); print (the) (Global_Vars-->42); if (~~(((((Adj_268_t1_v9(I446_miranda))))))) jump L_Say400; ParaContent(); print (PrintText) SC_728; .L_Say400; .L_SayX371; ParaContent(); print (PrintText) SC_310; new_line; .L_Say401; .L_SayX372; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1766, 1766, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the chain golem attacking: [ R_1782 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I451_chain_golem) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1782, 1782); ! phrase 1 ! [1: say ~Several of the [if concentration of the chain golem is 1]slowly spinning [otherwise if concentration of the chain golem is 2]spinning [otherwise if concentration of the chain golem is 3]wildly spinning [end if]chains [one of]direct themselves towards[or]lash out at[or]attempt to smash themselves into[at random] [the global defender].~] say__p=1;ParaContent(); print (PrintText) SC_729; if (~~((((GProperty(9, I451_chain_golem,p26_concentration) == 1))))) jump L_Say402; ParaContent(); print (PrintText) SC_730; ParaContent(); jump L_SayX373; .L_Say402; if (~~((((GProperty(9, I451_chain_golem,p26_concentration) == 2))))) jump L_Say403; ParaContent(); print (PrintText) SC_731; ParaContent(); jump L_SayX373; .L_Say403; if (~~((((GProperty(9, I451_chain_golem,p26_concentration) == 3))))) jump L_Say404; ParaContent(); print (PrintText) SC_732; .L_Say404; .L_SayX373; ParaContent(); print (PrintText) SC_733; ParaContent(); I7_ST_say_one_of-->6 = i7_soo_ran(I7_ST_say_one_of-->6, 3); switch((I7_ST_say_one_of-->6)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_734; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_735; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_736; ParaContent(); } ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; new_line; .L_Say405; .L_SayX374; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1782, 1782, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the bomb attacking: [ R_1805 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I454_jumping_bomb) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1805, 1805); ! phrase 1 ! [1: say ~Suddenly changing its direction, the jumping bomb launches itself towards [the noun] -- threatening instant death upon contact.~] say__p=1;ParaContent(); print (PrintText) SC_737; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_738; new_line; .L_Say406; .L_SayX375; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1805, 1805, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the reaper attacking: [ R_1821 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I457_reaper) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1821, 1821); ! phrase 1 ! [1: say ~The Reaper advances towards [the noun][one of][or], with a skulllike grin[or], saying 'Et in Arcadia ego!' in a booming voice[as decreasingly likely outcomes].~] say__p=1;ParaContent(); print (PrintText) SC_739; ParaContent(); print (the) noun; ParaContent(); I7_ST_say_one_of-->7 = i7_soo_tap(I7_ST_say_one_of-->7, 3); switch((I7_ST_say_one_of-->7)%(3+1)-1) { 0: ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_740; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_741; ParaContent(); } ParaContent(); print (PrintText) SC_310; new_line; .L_Say407; .L_SayX376; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1821, 1821, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the mindslug attacking: [ R_1846 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I463_mindslug) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1846, 1846); ! phrase 1 ! [1: say ~Raising its hideous body, the mindslug bears down on [the global defender].~] say__p=1;ParaContent(); print (PrintText) SC_742; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; new_line; .L_Say408; .L_SayX377; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1846, 1846, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Fafhrd attacking: [ R_1860 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I466_fafhrd) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1860, 1860); ! phrase 1 ! [1: say ~Fafhrd rushes towards [the noun].~] say__p=1;ParaContent(); print (PrintText) SC_743; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say409; .L_SayX378; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1860, 1860, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Mouser attacking: [ R_1866 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I469_mouser) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1866, 1866); ! phrase 1 ! [1: say ~Fast as a snake, Mouser lashes out at [the global defender].~] say__p=1;ParaContent(); print (PrintText) SC_744; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; new_line; .L_Say410; .L_SayX379; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1866, 1866, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the giant tentacle attacking: [ R_1917 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I473_giant_tentacle) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1917, 1917); ! phrase 1 ! [1: say ~The giant tentacle moves in to grab [the global defender].~] say__p=1;ParaContent(); print (PrintText) SC_745; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; new_line; .L_Say411; .L_SayX380; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1917, 1917, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the healer of Aite attacking: [ R_1930 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I478_healer_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1930, 1930); ! phrase 1 ! [1: say ~The healer pokes his sword at [the noun].~] say__p=1;ParaContent(); print (PrintText) SC_746; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say412; .L_SayX381; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1930, 1930, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the tormentor of Aite attacking: [ R_1935 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I481_tormentor_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1935, 1935); ! phrase 1 ! [1: say ~The tormentor raises her staff towards [the noun], preparing a magical attack.~] say__p=1;ParaContent(); print (PrintText) SC_747; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_748; new_line; .L_Say413; .L_SayX382; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1935, 1935, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the defender of Aite attacking: [ R_1940 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I484_defender_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1940, 1940); ! phrase 1 ! [1: say ~The defender starts lumbering towards [the noun].~] say__p=1;ParaContent(); print (PrintText) SC_749; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say414; .L_SayX383; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1940, 1940, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Bodmall attacking: [ R_1971 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I488_bodmall) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1971, 1971); ! phrase 1 ! [1: say ~Bodmall throws her hands forward, casting a lightning bolt at [the global defender].~] say__p=1;ParaContent(); print (PrintText) SC_750; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; new_line; .L_Say415; .L_SayX384; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1971, 1971, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the corpse attacking: [ R_2018 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I501_rotting_corpse) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2018, 2018); ! phrase 1 ! [1: say ~The rotting corpse [if legs of the rotting corpse is 2]walks[otherwise if legs of the rotting corpse is 1]hops[otherwise]crawls[end if] towards [the global defender], [if arms of the rotting corpse is 2]its arms raised[otherwise if arms of the rotting corpse is 1]its single arm raised[otherwise if the rotting head is part of the rotting corpse]its teeth at the ready[otherwise if legs of the rotting corpse is greater than 0]hoping to land a good kick[otherwise]with no other weapon than its smell[end if].~] say__p=1;ParaContent(); print (PrintText) SC_751; if (~~(((((PHR_2007_r65 ()) == 2))))) jump L_Say416; ParaContent(); print (PrintText) SC_752; ParaContent(); jump L_SayX385; .L_Say416; if (~~(((((PHR_2007_r65 ()) == 1))))) jump L_Say417; ParaContent(); print (PrintText) SC_753; jump L_SayX385; .L_Say417; ParaContent(); print (PrintText) SC_754; .L_Say418; .L_SayX385; ParaContent(); print (PrintText) SC_755; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_592; if (~~(((((PHR_2008_r66 ()) == 2))))) jump L_Say419; ParaContent(); print (PrintText) SC_756; ParaContent(); jump L_SayX386; .L_Say419; if (~~(((((PHR_2008_r66 ()) == 1))))) jump L_Say420; ParaContent(); print (PrintText) SC_757; ParaContent(); jump L_SayX386; .L_Say420; if (~~((((I501_rotting_corpse == (I508_rotting_head.component_parent)))))) jump L_Say421; ParaContent(); print (PrintText) SC_758; ParaContent(); jump L_SayX386; .L_Say421; if (~~(((((PHR_2007_r65 ()) > 0))))) jump L_Say422; ParaContent(); print (PrintText) SC_759; jump L_SayX386; .L_Say422; ParaContent(); print (PrintText) SC_760; .L_Say423; .L_SayX386; ParaContent(); print (PrintText) SC_310; new_line; .L_Say424; .L_SayX387; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2018, 2018, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the aswang attacking: [ R_2039 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I513_aswang) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2039, 2039); ! phrase 1 ! [1: say ~The aswang rushes at [the noun], with [if as-shape of aswang is as-witch]sharp fingernails ready[otherwise if as-shape of aswang is as-bird]talons and beak outstretched[otherwise]slavering fangs ready[end if].~] say__p=1;ParaContent(); print (PrintText) SC_761; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_762; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))))) jump L_Say425; ParaContent(); print (PrintText) SC_763; ParaContent(); jump L_SayX388; .L_Say425; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))))) jump L_Say426; ParaContent(); print (PrintText) SC_764; jump L_SayX388; .L_Say426; ParaContent(); print (PrintText) SC_765; .L_Say427; .L_SayX388; ParaContent(); print (PrintText) SC_310; new_line; .L_Say428; .L_SayX389; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2039, 2039, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the smoke demon attacking: [ R_2054 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I517_smoke_demon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2054, 2054); ! phrase 1 ! [1: say ~The smoke demon casts his vaporous tendrils towards [the noun].~] say__p=1;ParaContent(); print (PrintText) SC_766; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say429; .L_SayX390; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2054, 2054, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the imp attacking: [ R_2067 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I519_imp) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2067, 2067); ! phrase 1 ! [1: say ~The imp dives at [the noun], his tiny claws ready to strike.~] say__p=1;ParaContent(); print (PrintText) SC_767; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_768; new_line; .L_Say430; .L_SayX391; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2067, 2067, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Report an npc attacking ( this is the standard report an actor attacking rule ): [ R_1007 ; if ( (actor~=player) && (act_requester==nothing) && (((~~Adj_35_t1_v9(actor))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1007, 1007); ! phrase 1 ! [1: say ~[The actor] lung[es] towards [the noun].[paragraph break]~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_769; ParaContent(); (PHR_902_r67 ());ParaContent(); print (PrintText) SC_755; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; ParaContent(); DivideParagraphPoint(); new_line; .L_Say431; .L_SayX392; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1007, 1007, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Kissing (B212_check_kissing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor kissing ( this is the kissing yourself rule ): ! === which is equally specific with === ! Rule 2/2 ! Check an actor kissing ( this is the block kissing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor kissing ( this is the kissing yourself rule ): [ R_244 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_244, 244); ! phrase 1 ! [1: if the noun is the actor , stop the action with library message touching action number 3 for the noun] if (((noun == actor))) { return GL__M(##Touch,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_244, 244, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor kissing ( this is the block kissing rule ): [ R_245 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_245, 245); ! phrase 1 ! [1: stop the action with library message kissing action number 1 for the noun] return GL__M(##Kiss,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_245, 245, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Answering it that (B217_report_answering_it_tha) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor answering something that ( this is the block answering rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor answering something that ( this is the block answering rule ): [ R_246 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_246, 246); ! phrase 1 ! [1: stop the action with library message answering it that action number 1 for the noun] return GL__M(##Answer,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_246, 246, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Telling it about (B218_check_telling_it_about) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor telling something about ( this is the telling yourself rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor telling something about ( this is the telling yourself rule ): [ R_247 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_247, 247); ! phrase 1 ! [1: if the actor is the noun , stop the action with library message telling it about action number 1 for the noun] if (((actor == noun))) { return GL__M(##Tell,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_247, 247, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Telling it about (B220_report_telling_it_about) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor telling something about ( this is the block telling rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor telling something about ( this is the block telling rule ): [ R_248 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_248, 248); ! phrase 1 ! [1: stop the action with library message telling it about action number 2 for the noun] return GL__M(##Tell,2,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_248, 248, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Asking it about (B223_report_asking_it_about) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor asking something about ( this is the block asking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor asking something about ( this is the block asking rule ): [ R_249 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_249, 249); ! phrase 1 ! [1: stop the action with library message asking it about action number 1 for the noun] return GL__M(##Ask,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_249, 249, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Asking it for (B224_check_asking_it_for) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor asking something for ( this is the asking yourself for something rule ): ! === which is equally specific with === ! Rule 2/2 ! Check an actor asking something for ( this is the translate asking for to giving rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor asking something for ( this is the asking yourself for something rule ): [ R_250 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_250, 250); ! phrase 1 ! [1: if the actor is the noun and the actor is the player , try taking inventory instead] if ((((actor == noun))) && (((actor == player)))) { TryAction(0, player, ##Inv, 0, 0);; rtrue; } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_250, 250, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor asking something for ( this is the translate asking for to giving rule ): [ R_251 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_251, 251); ! phrase 1 ! [1: convert to request of the noun to perform giving it to action with the second noun and the actor] TryAction(true, noun, ##Give, second, actor); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_251, 251, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waiting (B227_check_waiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check the swarm of daggers waiting ( this is the daggers regroup rule ): ! === which is equally specific with === ! Rule 2/2 ! Check the abyss of the soul waiting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check the swarm of daggers waiting ( this is the daggers regroup rule ): [ R_1687 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I436_swarm_of_daggers) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1687, 1687); ! phrase 1 ! [1: if dagger-scattered is true begin] if (((((Global_Vars-->118) && true) == (1 && true)))) { ! phrase 2 ! [2: now dagger-scattered is false] (Global_Vars-->118) = 0; ! phrase 3 ! [3: say ~The swarm of daggers regroups.~ instead] say__p=1;ParaContent(); print (PrintText) SC_770; new_line; rtrue; .L_Say432; .L_SayX393; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1687, 1687, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check the abyss of the soul waiting: [ R_2043 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I515_abyss_of_the_soul) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2043, 2043); ! phrase 1 ! [1: say ~The abyss of the soul hovers in the air, nearly motionless.~ instead] say__p=1;ParaContent(); print (PrintText) SC_771; new_line; rtrue; .L_Say433; .L_SayX394; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2043, 2043, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Waiting (B228_carry_out_waiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out an actor waiting ( this is the waiting lets someone else go first rule ): ! >>> III - Action requirement >>> ! Rule 2/2 ! Carry out waiting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Carry out an actor waiting ( this is the waiting lets someone else go first rule ): [ R_878 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_878, 878); ! phrase 1 ! [1: if the combat state of the actor is at-act begin] if (((GProperty(9, actor,p112_combat_state) == I96_at_act))) { ! phrase 2 ! [2: let y be 0] t_0 = 0; ! phrase 3 ! [3: repeat with x running through all alive not passive persons enclosed by the location begin] for (t_1=Prop_226(0), t_2=Prop_226(t_1): t_1: t_1=t_2, t_2=Prop_226(t_2)) { ! phrase 4 ! [4: if x is not the actor and the initiative of x is greater than y begin] if ((((~~((t_1 == actor))))) && (((GProperty(9, t_1,p15_initiative) > t_0)))) { ! phrase 5 ! [5: now y is the initiative of x] t_0 = GProperty(9, t_1,p15_initiative); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: now the initiative of the actor is y - 2] WriteGProperty(9, actor,p15_initiative, (t_0-2) ); ! phrase 9 ! [9: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_878, 878, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out waiting: [ R_1412 ; if (actor == player) { if (debug_rules) DB_Rule(R_1412, 1412); ! phrase 1 ! [1: if player is patient begin] if ((((Adj_264_t1_v9(player))))) { ! phrase 2 ! [2: now tension is tension divided by 2] (Global_Vars-->48) = (IntegerDivide((Global_Vars-->48),2)) ; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1412, 1412, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Waiting (B229_report_waiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! First report waiting: ! --- now the mid-placed rules --- ! Rule 2/2 ! Report an actor waiting ( this is the standard report waiting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! First report waiting: [ R_1413 ; if (actor == player) { if (debug_rules) DB_Rule(R_1413, 1413); ! phrase 1 ! [1: if player is patient begin] if ((((Adj_264_t1_v9(player))))) { ! phrase 2 ! [2: say ~You wait patiently. You feel no tension.~ instead] say__p=1;ParaContent(); print (PrintText) SC_772; new_line; rtrue; .L_Say434; .L_SayX395; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1413, 1413, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor waiting ( this is the standard report waiting rule ): [ R_252 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_252, 252); ! phrase 1 ! [1: if the actor is the player , stop the action with library message waiting action number 1 for the actor] if (((actor == player))) { return GL__M(##Wait,1,actor); } ! phrase 2 ! [2: issue actor-based library message waiting action number 2] AGL__M(##Wait,2,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_252, 252, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Touching (B232_report_touching) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Report an actor touching ( this is the report touching yourself rule ): ! === which is equally specific with === ! Rule 2/3 ! Report an actor touching ( this is the report touching other people rule ): ! === which is equally specific with === ! Rule 3/3 ! Report an actor touching ( this is the report touching things rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor touching ( this is the report touching yourself rule ): [ R_253 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_253, 253); ! phrase 1 ! [1: if the noun is the actor begin] if (((noun == actor))) { ! phrase 2 ! [2: if the actor is the player , issue library message touching action number 3 for the noun] if (((actor == player))) { GL__M(##Touch,3,noun); } ! phrase 3 ! [3: otherwise issue actor-based library message touching action number 4] else { AGL__M(##Touch,4,noun); } ! phrase 4 ! [4: stop the action] rtrue; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: continue the action] rfalse; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_253, 253, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor touching ( this is the report touching other people rule ): [ R_254 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_254, 254); ! phrase 1 ! [1: if the noun is a person begin] if (((noun ofclass K8_person))) { ! phrase 2 ! [2: if the actor is the player begin] if (((actor == player))) { ! phrase 3 ! [3: issue library message touching action number 1 for the noun] GL__M(##Touch,1,noun); ! phrase 4 ! [4: otherwise if the noun is the player] } else if (((noun == player))) { ! phrase 5 ! [5: issue actor-based library message touching action number 5] AGL__M(##Touch,5,noun); ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: issue actor-based library message touching action number 6 for the noun] AGL__M(##Touch,6,noun); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: stop the action] rtrue; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: continue the action] rfalse; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_254, 254, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Report an actor touching ( this is the report touching things rule ): [ R_255 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_255, 255); ! phrase 1 ! [1: if the actor is the player , issue library message touching action number 2 for the noun] if (((actor == player))) { GL__M(##Touch,2,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message touching action number 6 for the noun] else { AGL__M(##Touch,6,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_255, 255, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waving (B233_check_waving) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor waving ( this is the can't wave what's not held rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor waving ( this is the can't wave what's not held rule ): [ R_256 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_256, 256); ! phrase 1 ! [1: if the actor is not the holder of the noun , stop the action with library message waving action number 1 for the noun] if (((~~((actor == (HolderOf(noun)) ))))) { return GL__M(##Wave,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_256, 256, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Waving (B235_report_waving) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor waving ( this is the report waving things rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor waving ( this is the report waving things rule ): [ R_257 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_257, 257); ! phrase 1 ! [1: if the actor is the player , issue library message waving action number 2 for the noun] if (((actor == player))) { GL__M(##Wave,2,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message waving action number 3 for the noun] else { AGL__M(##Wave,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_257, 257, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Pulling (B236_check_pulling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor pulling ( this is the can't pull what's fixed in place rule ): ! === which is equally specific with === ! Rule 2/3 ! Check an actor pulling ( this is the can't pull scenery rule ): ! === which is equally specific with === ! Rule 3/3 ! Check an actor pulling ( this is the can't pull people rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor pulling ( this is the can't pull what's fixed in place rule ): [ R_258 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_258, 258); ! phrase 1 ! [1: if the noun is fixed in place , stop the action with library message pulling action number 1 for the noun] if ((((Adj_62_t1_v9(noun))))) { return GL__M(##Pull,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_258, 258, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pulling ( this is the can't pull scenery rule ): [ R_259 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_259, 259); ! phrase 1 ! [1: if the noun is scenery , stop the action with library message pulling action number 2 for the noun] if ((((Adj_64_t1_v9(noun))))) { return GL__M(##Pull,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_259, 259, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pulling ( this is the can't pull people rule ): [ R_260 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_260, 260); ! phrase 1 ! [1: if the noun is a person , stop the action with library message pulling action number 4 for the noun] if (((noun ofclass K8_person))) { return GL__M(##Pull,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_260, 260, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Pulling (B238_report_pulling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor pulling ( this is the report pulling rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor pulling ( this is the report pulling rule ): [ R_261 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_261, 261); ! phrase 1 ! [1: if the actor is the player , issue library message pulling action number 3 for the noun] if (((actor == player))) { GL__M(##Pull,3,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message pulling action number 5 for the noun] else { AGL__M(##Pull,5,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_261, 261, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Pushing (B239_check_pushing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor pushing something ( this is the can't push what's fixed in place rule ): ! === which is equally specific with === ! Rule 2/3 ! Check an actor pushing something ( this is the can't push scenery rule ): ! === which is equally specific with === ! Rule 3/3 ! Check an actor pushing something ( this is the can't push people rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor pushing something ( this is the can't push what's fixed in place rule ): [ R_262 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_262, 262); ! phrase 1 ! [1: if the noun is fixed in place , stop the action with library message pushing action number 1 for the noun] if ((((Adj_62_t1_v9(noun))))) { return GL__M(##Push,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_262, 262, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pushing something ( this is the can't push scenery rule ): [ R_263 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_263, 263); ! phrase 1 ! [1: if the noun is scenery , stop the action with library message pushing action number 2 for the noun] if ((((Adj_64_t1_v9(noun))))) { return GL__M(##Push,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_263, 263, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pushing something ( this is the can't push people rule ): [ R_264 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_264, 264); ! phrase 1 ! [1: if the noun is a person , stop the action with library message pushing action number 4 for the noun] if (((noun ofclass K8_person))) { return GL__M(##Push,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_264, 264, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Pushing (B241_report_pushing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor pushing something ( this is the report pushing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor pushing something ( this is the report pushing rule ): [ R_265 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_265, 265); ! phrase 1 ! [1: if the actor is the player , issue library message pushing action number 3 for the noun] if (((actor == player))) { GL__M(##Push,3,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message pushing action number 6 for the noun] else { AGL__M(##Push,6,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_265, 265, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Turning (B242_check_turning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor turning ( this is the can't turn what's fixed in place rule ): ! === which is equally specific with === ! Rule 2/3 ! Check an actor turning ( this is the can't turn scenery rule ): ! === which is equally specific with === ! Rule 3/3 ! Check an actor turning ( this is the can't turn people rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor turning ( this is the can't turn what's fixed in place rule ): [ R_266 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_266, 266); ! phrase 1 ! [1: if the noun is fixed in place , stop the action with library message turning action number 1 for the noun] if ((((Adj_62_t1_v9(noun))))) { return GL__M(##Turn,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_266, 266, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor turning ( this is the can't turn scenery rule ): [ R_267 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_267, 267); ! phrase 1 ! [1: if the noun is scenery , stop the action with library message turning action number 2 for the noun] if ((((Adj_64_t1_v9(noun))))) { return GL__M(##Turn,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_267, 267, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor turning ( this is the can't turn people rule ): [ R_268 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_268, 268); ! phrase 1 ! [1: if the noun is a person , stop the action with library message turning action number 4 for the noun] if (((noun ofclass K8_person))) { return GL__M(##Turn,4,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_268, 268, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Turning (B244_report_turning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor turning ( this is the report turning rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor turning ( this is the report turning rule ): [ R_269 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_269, 269); ! phrase 1 ! [1: if the actor is the player , issue library message turning action number 3 for the noun] if (((actor == player))) { GL__M(##Turn,3,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message turning action number 7 for the noun] else { AGL__M(##Turn,7,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_269, 269, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Pushing it to (B245_check_pushing_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! Check an actor pushing something to ( this is the can't push unpushable things rule ): ! === which is equally specific with === ! Rule 2/5 ! Check an actor pushing something to ( this is the can't push to non-directions rule ): ! === which is equally specific with === ! Rule 3/5 ! Check an actor pushing something to ( this is the can't push vertically rule ): ! === which is equally specific with === ! Rule 4/5 ! Check an actor pushing something to ( this is the standard pushing in directions rule ): ! === which is equally specific with === ! Rule 5/5 ! Check an actor pushing something to ( this is the block pushing in directions rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor pushing something to ( this is the can't push unpushable things rule ): [ R_270 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_270, 270); ! phrase 1 ! [1: if the noun is not pushable between rooms , stop the action with library message pushing it to action number 1 for the noun] if (((~~(((Adj_66_t1_v9(noun))))))) { return GL__M(##PushDir,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_270, 270, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pushing something to ( this is the can't push to non-directions rule ): [ R_271 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_271, 271); ! phrase 1 ! [1: if the second noun is not a direction , stop the action with library message pushing it to action number 2 for the noun] if (((~~((second ofclass K3_direction))))) { return GL__M(##PushDir,2,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_271, 271, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pushing something to ( this is the can't push vertically rule ): [ R_272 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_272, 272); ! phrase 1 ! [1: if the second noun is up or the second noun is down , stop the action with library message pushing it to action number 3 for the noun] if ((((second == I54_up))) || (((second == I55_down)))) { return GL__M(##PushDir,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_272, 272, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pushing something to ( this is the standard pushing in directions rule ): [ R_273 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_273, 273); ! phrase 1 ! [1: convert to special going-with-push action] ConvertToGoingWithPush(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_273, 273, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor pushing something to ( this is the block pushing in directions rule ): [ R_274 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_274, 274); ! phrase 1 ! [1: stop the action with library message pushing it to action number 1 for the noun] return GL__M(##PushDir,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_274, 274, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Squeezing (B248_check_squeezing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor squeezing ( this is the innuendo about squeezing people rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor squeezing ( this is the innuendo about squeezing people rule ): [ R_275 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_275, 275); ! phrase 1 ! [1: if the noun is a person , stop the action with library message squeezing action number 1 for the noun] if (((noun ofclass K8_person))) { return GL__M(##Squeeze,1,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_275, 275, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Squeezing (B250_report_squeezing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor squeezing ( this is the report squeezing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Report an actor squeezing ( this is the report squeezing rule ): [ R_276 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_276, 276); ! phrase 1 ! [1: if the actor is the player , issue library message squeezing action number 2 for the noun] if (((actor == player))) { GL__M(##Squeeze,2,noun); } ! phrase 2 ! [2: otherwise issue actor-based library message squeezing action number 3 for the noun] else { AGL__M(##Squeeze,3,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_276, 276, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Saying yes (B251_check_saying_yes) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor saying yes ( this is the block saying yes rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor saying yes ( this is the block saying yes rule ): [ R_277 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_277, 277); ! phrase 1 ! [1: stop the action with library message saying yes action number 1] return GL__M(##Yes,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_277, 277, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Saying no (B254_check_saying_no) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor saying no ( this is the block saying no rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor saying no ( this is the block saying no rule ): [ R_278 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_278, 278); ! phrase 1 ! [1: stop the action with library message saying no action number 1] return GL__M(##No,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_278, 278, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Burning (B257_check_burning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor burning ( this is the block burning rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor burning ( this is the block burning rule ): [ R_279 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_279, 279); ! phrase 1 ! [1: stop the action with library message burning action number 1] return GL__M(##Burn,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_279, 279, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waking up (B260_check_waking_up) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor waking up ( this is the block waking up rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor waking up ( this is the block waking up rule ): [ R_280 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_280, 280); ! phrase 1 ! [1: stop the action with library message waking up action number 1] return GL__M(##Wake,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_280, 280, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Thinking (B263_check_thinking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor thinking ( this is the block thinking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor thinking ( this is the block thinking rule ): [ R_281 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_281, 281); ! phrase 1 ! [1: stop the action with library message thinking action number 1] return GL__M(##Think,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_281, 281, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Smelling (B266_check_smelling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor smelling ( this is the block smelling rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor smelling ( this is the block smelling rule ): [ R_282 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_282, 282); ! phrase 1 ! [1: stop the action with library message smelling action number 1 for the noun] return GL__M(##Smell,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_282, 282, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Listening to (B269_check_listening_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor listening ( this is the block listening rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor listening ( this is the block listening rule ): [ R_283 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_283, 283); ! phrase 1 ! [1: stop the action with library message listening to action number 1 for the noun] return GL__M(##Listen,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_283, 283, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Tasting (B272_check_tasting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor tasting ( this is the block tasting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor tasting ( this is the block tasting rule ): [ R_284 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_284, 284); ! phrase 1 ! [1: stop the action with library message tasting action number 1 for the noun] return GL__M(##Taste,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_284, 284, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Cutting (B275_check_cutting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor cutting ( this is the block cutting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor cutting ( this is the block cutting rule ): [ R_285 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_285, 285); ! phrase 1 ! [1: stop the action with library message cutting action number 1 for the noun] return GL__M(##Cut,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_285, 285, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Jumping (B278_check_jumping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor jumping ( this is the block jumping rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor jumping ( this is the block jumping rule ): [ R_286 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_286, 286); ! phrase 1 ! [1: stop the action with library message jumping action number 1] return GL__M(##Jump,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_286, 286, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Tying it to (B281_check_tying_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor tying something to ( this is the block tying rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor tying something to ( this is the block tying rule ): [ R_287 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_287, 287); ! phrase 1 ! [1: stop the action with library message tying it to action number 1 for the noun] return GL__M(##Tie,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_287, 287, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Drinking (B284_check_drinking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor drinking ( this is the block drinking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor drinking ( this is the block drinking rule ): [ R_288 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_288, 288); ! phrase 1 ! [1: stop the action with library message drinking action number 1 for the noun] return GL__M(##Drink,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_288, 288, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Saying sorry (B287_check_saying_sorry) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor saying sorry ( this is the block saying sorry rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor saying sorry ( this is the block saying sorry rule ): [ R_289 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_289, 289); ! phrase 1 ! [1: stop the action with library message saying sorry action number 1] return GL__M(##Sorry,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_289, 289, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Swearing obscenely (B290_check_swearing_obscenel) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor swearing obscenely ( this is the block swearing obscenely rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor swearing obscenely ( this is the block swearing obscenely rule ): [ R_290 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_290, 290); ! phrase 1 ! [1: stop the action with library message swearing obscenely action number 1] return GL__M(##Strong,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_290, 290, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Swearing mildly (B293_check_swearing_mildly) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor swearing mildly ( this is the block swearing mildly rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor swearing mildly ( this is the block swearing mildly rule ): [ R_291 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_291, 291); ! phrase 1 ! [1: stop the action with library message swearing mildly action number 1] return GL__M(##Mild,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_291, 291, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Swinging (B296_check_swinging) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor swinging ( this is the block swinging rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor swinging ( this is the block swinging rule ): [ R_292 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_292, 292); ! phrase 1 ! [1: stop the action with library message swinging action number 1 for the noun] return GL__M(##Swing,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_292, 292, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Rubbing (B299_check_rubbing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor rubbing ( this is the block rubbing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor rubbing ( this is the block rubbing rule ): [ R_293 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_293, 293); ! phrase 1 ! [1: stop the action with library message rubbing action number 1 for the noun] return GL__M(##Rub,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_293, 293, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Setting it to (B302_check_setting_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor setting something to ( this is the block setting it to rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor setting something to ( this is the block setting it to rule ): [ R_294 ; if ((act_requester==nothing) && ((noun ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_294, 294); ! phrase 1 ! [1: stop the action with library message setting it to action number 1 for the noun] return GL__M(##SetTo,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_294, 294, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waving hands (B305_check_waving_hands) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor waving hands ( this is the block waving hands rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor waving hands ( this is the block waving hands rule ): [ R_295 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_295, 295); ! phrase 1 ! [1: stop the action with library message waving hands action number 1] return GL__M(##WaveHands,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_295, 295, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Buying (B308_check_buying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor buying ( this is the block buying rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor buying ( this is the block buying rule ): [ R_296 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_296, 296); ! phrase 1 ! [1: stop the action with library message buying action number 1 for the noun] return GL__M(##Buy,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_296, 296, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Singing (B311_check_singing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor singing ( this is the block singing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor singing ( this is the block singing rule ): [ R_297 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_297, 297); ! phrase 1 ! [1: stop the action with library message singing action number 1] return GL__M(##Sing,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_297, 297, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Singing (B312_carry_out_singing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out singing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Carry out singing: [ R_1313 ; if (actor == player) { if (debug_rules) DB_Rule(R_1313, 1313); ! phrase 1 ! [1: increase detection probability by 100] (Global_Vars-->89) = (Global_Vars-->89) + 100; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1313, 1313, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Climbing (B314_check_climbing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor climbing ( this is the block climbing rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor climbing ( this is the block climbing rule ): [ R_298 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_298, 298); ! phrase 1 ! [1: stop the action with library message climbing action number 1 for the noun] return GL__M(##Climb,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_298, 298, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Sleeping (B317_check_sleeping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor sleeping ( this is the block sleeping rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From the Standard Rules ! Check an actor sleeping ( this is the block sleeping rule ): [ R_299 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_299, 299); ! phrase 1 ! [1: stop the action with library message sleeping action number 1] return GL__M(##Sleep,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_299, 299, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Saving the game (B323_check_saving_the_game) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check saving the game when roguelike mode is true ( this is the block saving rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! Check saving the game when roguelike mode is true ( this is the block saving rule ): [ R_822 ; if (actor == player) { if ((((((((Global_Vars-->23) && true) == (1 && true))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_822, 822); ! phrase 1 ! [1: say ~The game is saved and loaded automatically. There is no need to save it manually.~ instead] say__p=1;ParaContent(); print (PrintText) SC_773; new_line; rtrue; .L_Say435; .L_SayX396; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_822, 822, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Restoring the game (B326_check_restoring_the_gam) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check restoring the game when roguelike mode is true ( this is the block restore rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! Check restoring the game when roguelike mode is true ( this is the block restore rule ): [ R_823 ; if (actor == player) { if ((((((((Global_Vars-->23) && true) == (1 && true))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_823, 823); ! phrase 1 ! [1: say ~The game is saved and loaded automatically. There is no need to restore your game manually.~ instead] say__p=1;ParaContent(); print (PrintText) SC_774; new_line; rtrue; .L_Say436; .L_SayX397; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_823, 823, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Restarting the game (B330_carry_out_restarting_th) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First carry out restarting the game ( this is the reset streak on restart rule ): ! === which is equally specific with === ! Rule 2/3 ! First carry out restarting the game ( this is the delete save on restart rule ): ! --- now the mid-placed rules --- ! Rule 3/3: RESTART_THE_GAME_R ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! First carry out restarting the game ( this is the reset streak on restart rule ): [ R_2137 ct_0 ct_1 ! Used for table searches ; if (actor == player) { if (debug_rules) DB_Rule(R_2137, 2137); ! phrase 1 ! [1: unless player is victorious begin] if (~~(((PHR_2144_r31 ())))) { ! phrase 2 ! [2: now winning-streak is 0] (Global_Vars-->129) = 0; ! phrase 3 ! [3: choose row 1 in the table of victories] ct_0 = T21_victories; ct_1 = 1; ! phrase 4 ! [4: now the victories entry is number-of-victories] TableLookUpEntry(ct_0,146,ct_1,1,(Global_Vars-->128)); ! phrase 5 ! [5: now the streak entry is winning-streak] TableLookUpEntry(ct_0,147,ct_1,1,(Global_Vars-->129)); ! phrase 6 ! [6: now the best-streak entry is best-winning-streak] TableLookUpEntry(ct_0,148,ct_1,1,(Global_Vars-->130)); ! phrase 7 ! [7: write file of victories from table of victories] FileIO_PutTable(I525_file_of_victories, T21_victories); ! phrase 8 ! [8: write file of achievements from table of held achievements] FileIO_PutTable(I527_file_of_achievements, T26_held_achievements); ! phrase 9 ! [9: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2137, 2137, true); rfalse; ]; ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! First carry out restarting the game ( this is the delete save on restart rule ): [ R_825 ; if (actor == player) { if (debug_rules) DB_Rule(R_825, 825); ! phrase 1 ! [1: if roguelike mode is true begin] if (((((Global_Vars-->23) && true) == (1 && true)))) { ! phrase 2 ! [2: delete file of save data] FileIO_DeleteSavedGame(I89_file_of_save_data); ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_825, 825, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Displaying (B366_for_displaying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Rule for displaying ( this is the basic menu contents rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Menus" by Emily Short ! Rule for displaying ( this is the basic menu contents rule ): [ R_747 ; ! phrase 1 ! [1: now current menu selection is 1] (Global_Vars-->13) = 1; ! phrase 2 ! [2: show menu contents] (PHR_746_r68 ()); RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Requesting epistemic status of (B370_report_requesting_epist) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report requesting epistemic status of: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Epistemology" by Eric Eve ! Report requesting epistemic status of: [ R_774 ; if (actor == player) { if (debug_rules) DB_Rule(R_774, 774); ! phrase 1 ! [1: say ~[noun] - [if seen]seen[otherwise]unseen[end if] / [if familiar]familiar[otherwise]unfamiliar[end if] / [if known]known[otherwise]unknown[end if].~] say__p=1;ParaContent(); print (PrintShortName) noun; ParaContent(); print (PrintText) SC_775; if (~~(((((Adj_91_t1_v9(self))))))) jump L_Say437; ParaContent(); print (PrintText) SC_776; jump L_SayX398; .L_Say437; ParaContent(); print (PrintText) SC_777; .L_Say438; .L_SayX398; ParaContent(); print (PrintText) SC_778; if (~~(((((Adj_93_t1_v9(self))))))) jump L_Say439; ParaContent(); print (PrintText) SC_779; jump L_SayX399; .L_Say439; ParaContent(); print (PrintText) SC_780; .L_Say440; .L_SayX399; ParaContent(); print (PrintText) SC_778; if (~~(((((Adj_31_t1_v9(self))))))) jump L_Say441; ParaContent(); print (PrintText) SC_781; jump L_SayX400; .L_Say441; ParaContent(); print (PrintText) SC_782; .L_Say442; .L_SayX400; ParaContent(); print (PrintText) SC_310; new_line; .L_Say443; .L_SayX401; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_774, 774, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: command-counting (B384_command_counting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! A command-counting rule ( this is the ordinary checking for content rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Glulx Entry Points" by Emily Short ! A command-counting rule ( this is the ordinary checking for content rule ): [ R_794 ; ! phrase 1 ! [1: if the number of characters in the glulx replacement command is 0 , rule fails] if ((( IT_BlobAccess((Global_Vars-->22), CHR_BLOB) == 0))) { RulebookFails(); rtrue; } ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: input-cancelling (B385_input_cancelling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! An input-cancelling rule ( this is the cancelling input in the main window rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Glulx Entry Points" by Emily Short ! An input-cancelling rule ( this is the cancelling input in the main window rule ): [ R_795 ; ! phrase 1 ! [1: cancel line input in the main window] glk_cancel_line_event(gg_mainwin, GLK_NULL); ! phrase 2 ! [2: cancel character input in the main window] glk_cancel_char_event(gg_mainwin); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: command-showing (B386_command_showing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! A command-showing rule ( this is the print text to the input prompt rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Glulx Entry Points" by Emily Short ! A command-showing rule ( this is the print text to the input prompt rule ): [ R_798 ; ! phrase 1 ! [1: say input-style-for-glulx] say__p=1;ParaContent(); glk_set_style(style_Input); .L_Say444; .L_SayX402; ! phrase 2 ! [2: say glulx replacement command] say__p=1;ParaContent(); print (INDEXED_TEXT_TY_Say) (Global_Vars-->22); .L_Say445; .L_SayX403; ! phrase 3 ! [3: say roman type] say__p=1;ParaContent(); style roman; .L_Say446; .L_SayX404; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: command-pasting (B387_command_pasting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! A command-pasting rule ( this is the glue replacement command into parse buffer rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Glulx Entry Points" by Emily Short ! A command-pasting rule ( this is the glue replacement command into parse buffer rule ): [ R_800 ; ! phrase 1 ! [1: change the text of the player's command to the glulx replacement command] SetPlayersCommand((Global_Vars-->22)); ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Cloning a new object from (B388_before_cloning_a_new_ob) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! First before cloning a new object from ( this is the dynamic objects setting activity variables rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Dynamic Objects" by Jesse McGrew ! First before cloning a new object from ( this is the dynamic objects setting activity variables rule ): [ R_807 ; ! phrase 1 ! [1: initialize cloning activity variables] (MStack-->MstVO(10033,1)) = do_temp_array-->0; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Cloning a new object from (B390_after_cloning_a_new_obj) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! First after cloning a new object from a thing ( this is the dynamic objects belt loosening rule ): ! --- now the mid-placed rules --- ! Rule 2/2 ! After cloning a new object from a thing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Dynamic Objects" by Jesse McGrew ! First after cloning a new object from a thing ( this is the dynamic objects belt loosening rule ): [ R_809 t_0 ! Local variable e.g. 'NT' = number ; if (((parameter_object ofclass K2_thing))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_809, 809); ! phrase 1 ! [1: let nt be the number of things] t_0 = (Prop_227()) ; ! phrase 2 ! [2: if the number of rows in the table of locale priorities is less than nt , change the table of locale priorities to have nt + 4 rows] if ((( TableRows(T1_locale_priorities) < t_0))) { DT_ResizeTable(T1_locale_priorities, (t_0+4) ); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_809, 809, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! After cloning a new object from a thing: [ R_1383 ; if (((parameter_object ofclass K2_thing))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1383, 1383); ! phrase 1 ! [1: now new object is actual] (Adj_239_t2_v9((MStack-->MstVO(10033,0)))); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1383, 1383, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Restoring from a saved game (B392_for_restoring_from_a_sa) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! For restoring from a saved game ( this is the default roguelike restore rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! For restoring from a saved game ( this is the default roguelike restore rule ): [ R_818 ; ! phrase 1 ! [1: say ~[bracket]Game successfully restored.[close bracket][line break]~] say__p=1;ParaContent(); print "["; ParaContent(); print (PrintText) SC_783; ParaContent(); print "]"; ParaContent(); new_line; .L_Say447; .L_SayX405; ! phrase 2 ! [2: try looking] TryAction(0, player, ##Look, 0, 0);; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Failing to restore from a saved game (B395_for_failing_to_restore_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! For failing to restore from a saved game ( this is the default roguelike restore failed rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! For failing to restore from a saved game ( this is the default roguelike restore failed rule ): [ R_819 ; ! phrase 1 ! [1: say ~[bracket]Failed to restore existing game[close bracket][line break]~] say__p=1;ParaContent(); print "["; ParaContent(); print (PrintText) SC_784; ParaContent(); print "]"; ParaContent(); new_line; .L_Say448; .L_SayX406; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Failing to automatically save the game (B401_for_failing_to_automati) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! For failing to automatically save the game ( this is the default roguelike save failed rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! For failing to automatically save the game ( this is the default roguelike save failed rule ): [ R_820 ; ! phrase 1 ! [1: if automatic save boolean is true begin] if (((((Global_Vars-->24) && true) == (1 && true)))) { ! phrase 2 ! [2: say ~[bracket]Could not save the game.[close bracket][line break]~] say__p=1;ParaContent(); print "["; ParaContent(); print (PrintText) SC_785; ParaContent(); print "]"; ParaContent(); new_line; .L_Say449; .L_SayX407; ! phrase 3 ! [3: now automatic save boolean is false] (Global_Vars-->24) = 0; ! phrase 4 ! [4: end if] } RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Failing to delete a saved game (B404_for_failing_to_delete_a) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! For failing to delete a saved game ( this is the default roguelike delete save failed rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Alternative Permadeath" by Victor Gijsbers ! For failing to delete a saved game ( this is the default roguelike delete save failed rule ): [ R_821 ; ! phrase 1 ! [1: say ~Failed to delete the saved game. Please remove by hand.~] say__p=1;ParaContent(); print (PrintText) SC_786; new_line; .L_Say450; .L_SayX408; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: hate (B406_hate) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Hate rule ( this is the nonstandard hate rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Hate rule ( this is the nonstandard hate rule ): [ R_1195 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: if the player is friendly and at least one hostile alive person is enclosed by the location begin] if ((((player.p111_faction == I91_friendly))) && ((Prop_228()))) { ! phrase 2 ! [2: if friendly hates hostile begin] if ((((Relation_TestVtoV(I91_friendly,Rel_Record_67,I93_hostile,false))))) { ! phrase 3 ! [3: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: repeat with x running through alive not passive persons enclosed by the location begin] for (t_0=Prop_229(0), t_1=Prop_229(t_0): t_0: t_0=t_1, t_1=Prop_229(t_1)) { ! phrase 7 ! [7: repeat with y running through alive persons enclosed by the location begin] for (t_2=Prop_230(0), t_3=Prop_230(t_2): t_2: t_2=t_3, t_3=Prop_230(t_3)) { ! phrase 8 ! [8: if the faction of x hates the faction of y and x is not y begin] if (((((Relation_TestVtoV(GProperty(9, t_0,p111_faction),Rel_Record_67,GProperty(9, t_2,p111_faction),false))))) && (((~~((t_0 == t_2)))))) { ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end repeat] } ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: rule fails] RulebookFails(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: combat round (B407_combat_round) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/9 ! A first combat round rule ( this is the update the combat status rule ): ! --- now the mid-placed rules --- ! Rule 2/9 ! A combat round rule when the combat status is peace ( this is the business as usual rule ): ! === which is equally specific with === ! Rule 3/9 ! A combat round rule when the combat status is combat ( this is the determine the main actor rule ): ! === which is equally specific with === ! Rule 4/9 ! A combat round rule when the combat status is combat ( this is the consider the starting the combat round rules rule ): ! === which is equally specific with === ! Rule 5/9 ! A combat round rule when the combat status is combat ( this is the main actor chooses an action rule ): ! === which is equally specific with === ! Rule 6/9 ! A combat round rule when the combat status is player choosing ( this is the player chooses an action or reaction rule ): ! === which is equally specific with === ! Rule 7/9 ! A combat round rule when the combat status is reactions ( this is the reactors choose reactions rule ): ! === which is equally specific with === ! Rule 8/9 ! A combat round rule when the combat status is concluding ( this is the run delayed actions rule ): ! === which is equally specific with === ! Rule 9/9 ! A combat round rule when the combat status is concluding ( this is the conclude the combat round rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A first combat round rule ( this is the update the combat status rule ): [ R_839 ; ! phrase 1 ! [1: if the combat status is peace or the combat status is combat begin] if (((((Global_Vars-->29) == I99_peace))) || ((((Global_Vars-->29) == I100_combat)))) { ! phrase 2 ! [2: update the combat status] (PHR_835_r69 ()); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is peace ( this is the business as usual rule ): [ R_840 ; if (((((((Global_Vars-->29) == I99_peace)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_840, 840); ! phrase 1 ! [1: now the main actor is the player] (Global_Vars-->30) = player; ! phrase 2 ! [2: now the command prompt is the peaceful prompt] (Global_Vars-->1) = (Global_Vars-->25); ! phrase 3 ! [3: carry out the running the parser activity] CarryOutActivity(V39_running_the_parser); ! phrase 4 ! [4: if the meta flag is true begin] if ((((meta && true) == (1 && true)))) { ! phrase 5 ! [5: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_840, 840, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is combat ( this is the determine the main actor rule ): [ R_841 ; if (((((((Global_Vars-->29) == I100_combat)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_841, 841); ! phrase 1 ! [1: rank participants by initiative] (PHR_852_r70 ()); ! phrase 2 ! [2: now the main actor is the next participant] (Global_Vars-->30) = (PHR_836_r71 ()); ! phrase 3 ! [3: now the combat state of the main actor is at-act] WriteGProperty(9, (Global_Vars-->30),p112_combat_state,I96_at_act); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_841, 841, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is combat ( this is the consider the starting the combat round rules rule ): [ R_842 ; if (((((((Global_Vars-->29) == I100_combat)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_842, 842); ! phrase 1 ! [1: consider the starting the combat round rules] ProcessRulebook(408); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_842, 842, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is combat ( this is the main actor chooses an action rule ): [ R_843 ; if (((((((Global_Vars-->29) == I100_combat)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_843, 843); ! phrase 1 ! [1: if the main actor is the player begin] if ((((Global_Vars-->30) == player))) { ! phrase 2 ! [2: now the command prompt is the action prompt] (Global_Vars-->1) = (Global_Vars-->26); ! phrase 3 ! [3: now the combat status is player choosing] (Global_Vars-->29) = I101_player_choosing; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: run the ai rules for the main actor] (PHR_861_r72 ((Global_Vars-->30))); ! phrase 6 ! [6: now the combat status is reactions] (Global_Vars-->29) = I102_reactions; ! phrase 7 ! [7: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_843, 843, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is player choosing ( this is the player chooses an action or reaction rule ): [ R_844 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_13(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_13 I7BASPL ; if (((((((Global_Vars-->29) == I101_player_choosing)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_844, 844); ! phrase 1 ! [1: carry out the running the parser activity] CarryOutActivity(V39_running_the_parser); ! phrase 2 ! [2: if take no time boolean is false begin] if (((((Global_Vars-->34) && true) == (0 && true)))) { ! phrase 3 ! [3: if the combat state of the player is at-act begin] if (((GProperty(9, player,p112_combat_state) == I96_at_act))) { ! phrase 4 ! [4: now the main actor's action is the action name part of the current action] (Global_Vars-->31) = (STORED_ACTION_TY_Part( STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0))) , 0)) ; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: now the combat status is reactions] (Global_Vars-->29) = I102_reactions; ! phrase 7 ! [7: now the player did something is true] (Global_Vars-->32) = 1; ! phrase 8 ! [8: make no decision] rfalse; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_844, 844, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is reactions ( this is the reactors choose reactions rule ): [ R_845 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (((((((Global_Vars-->29) == I102_reactions)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_845, 845); ! phrase 1 ! [1: while the number of entries in the participants list is greater than 0 begin] while ((( LIST_OF_TY_GetLength((Global_Vars-->33)) > 0))) { ! phrase 2 ! [2: let p be the next participant] t_0 = (PHR_836_r71 ()); ! phrase 3 ! [3: if p is an alive at-react person begin] if (((t_0 ofclass K8_person) && ((Adj_33_t1_v9(t_0))) && ((Adj_100_t1_v9(t_0))))) { ! phrase 4 ! [4: if p is the player begin] if (((t_0 == player))) { ! phrase 5 ! [5: now the command prompt is the reaction prompt] (Global_Vars-->1) = (Global_Vars-->27); ! phrase 6 ! [6: now the combat status is player choosing] (Global_Vars-->29) = I101_player_choosing; ! phrase 7 ! [7: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: run the ai rules for p] (Resolver_21(t_0,"source", 259)); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end while] } ! phrase 13 ! [13: now the combat status is concluding] (Global_Vars-->29) = I103_concluding; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_845, 845, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is concluding ( this is the run delayed actions rule ): [ R_846 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_14(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_14 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; if (((((((Global_Vars-->29) == I103_concluding)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_846, 846); ! phrase 1 ! [1: sort the table of delayed actions in action speed order] TableSort(T9_delayed_actions, 118, 1); ! phrase 2 ! [2: repeat through the table of delayed actions begin] @push ct_0; @push ct_1; for (t_0=T9_delayed_actions,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 3 ! [3: try the action entry] STORED_ACTION_TY_Try(BlkValueCopy((blockv_stack-->(I7BASPL+0)), TableLookUpEntry(ct_0,119,ct_1))); ! phrase 4 ! [4: blank out the whole row] TableBlankOutRow(ct_0, ct_1); ! phrase 5 ! [5: end repeat] } @pull ct_1; @pull ct_0; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_846, 846, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A combat round rule when the combat status is concluding ( this is the conclude the combat round rule ): [ R_847 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (((((((Global_Vars-->29) == I103_concluding)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_847, 847); ! phrase 1 ! [1: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_231(0), t_1=Prop_231(t_0): t_0: t_0=t_1, t_1=Prop_231(t_1)) { ! phrase 2 ! [2: now the combat state of x is at-inactive] WriteGProperty(9, t_0,p112_combat_state,I95_at_inactive); ! phrase 3 ! [3: end repeat] } ! phrase 4 ! [4: update the combat status] (PHR_835_r69 ()); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_847, 847, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: starting the combat round (B408_starting_the_combat_rou) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! A starting the combat round rule ( this is the reset the initiative of the main actor rule ): ! === which is equally specific with === ! Rule 2/2 ! A starting the combat round rule ( this is the ready natural weapons rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A starting the combat round rule ( this is the reset the initiative of the main actor rule ): [ R_851 ; ! phrase 1 ! [1: now the initiative of the main actor is 0] WriteGProperty(9, (Global_Vars-->30),p15_initiative,0); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! A starting the combat round rule ( this is the ready natural weapons rule ): [ R_968 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_232(0), t_1=Prop_232(t_0): t_0: t_0=t_1, t_1=Prop_232(t_1)) { ! phrase 2 ! [2: if x encloses no readied weapon begin] if ((Prop_233(,t_0))) { ! phrase 3 ! [3: let item be a random natural weapon part of x] t_2 = (Prop_234(,t_0)) ; ! phrase 4 ! [4: now item is readied] (Adj_103_t2_v9(t_2)); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end repeat] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Running the parser (B409_before_running_the_pars) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Before running the parser ( this is the reset take no time boolean rule ): ! === which is equally specific with === ! Rule 2/2 ! Before running the parser: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Before running the parser ( this is the reset take no time boolean rule ): [ R_855 ; ! phrase 1 ! [1: now the take no time boolean is false] (Global_Vars-->34) = 0; rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Before running the parser: [ R_1642 ; ! phrase 1 ! [1: if the main actor is the player and the player is in the drawing room begin] if (((((Global_Vars-->30) == player))) && (((I416_drawing_room == ContainerOf(player))))) { ! phrase 2 ! [2: now adjusted scope for the drawing room is true] (Global_Vars-->113) = 1; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Running the parser (B411_after_running_the_parse) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! After running the parser ( this is the all out of world actions are fast rule ): ! === which is equally specific with === ! Rule 2/2 ! After running the parser: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! After running the parser ( this is the all out of world actions are fast rule ): [ R_857 ; ! phrase 1 ! [1: if the meta flag is true begin] if ((((meta && true) == (1 && true)))) { ! phrase 2 ! [2: now the take no time boolean is true] (Global_Vars-->34) = 1; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! After running the parser: [ R_1643 ; ! phrase 1 ! [1: now adjusted scope for the drawing room is false] (Global_Vars-->113) = 0; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: initiative update (B412_initiative_update) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11 ! First initiative update rule ( this is the no low initiative trap rule ): ! --- now the mid-placed rules --- ! Rule 2/11 ! Initiative update rule when the jumping bomb is enclosed by the location ( this is the jumping bomb has slightly less initiative rule ): ! >>> I - Number of aspects constrained >>> ! Rule 3/11 ! Initiative update rule ( this is the increase initiative every round rule ): ! === which is equally specific with === ! Rule 4/11 ! Initiative update rule ( this is the random initiative rule ): ! === which is equally specific with === ! Rule 5/11 ! Initiative update rule ( this is the sometimes loses initiative when cautious rule ): ! === which is equally specific with === ! Rule 6/11 ! Initiative update rule ( this is the boots of the war dance give initiative rule ): ! === which is equally specific with === ! Rule 7/11 ! Initiative update rule ( this is the boots of the boots of wandering give initiative rule ): ! === which is equally specific with === ! Rule 8/11 ! Initiative update rule ( this is the suit of plate mail takes away initiative rule ): ! === which is equally specific with === ! Rule 9/11 ! An initiative update rule ( this is the initiative is almost completely random in Space-Time Discontinuum rule ): ! === which is equally specific with === ! Rule 10/11 ! Initiative update rule ( this is the decrease initiative when hexed rule ): ! === which is equally specific with === ! Rule 11/11 ! Initiative update rule ( this is the player wins initiative first time in a room rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! First initiative update rule ( this is the no low initiative trap rule ): [ R_848 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_235(0), t_1=Prop_235(t_0): t_0: t_0=t_1, t_1=Prop_235(t_1)) { ! phrase 2 ! [2: if the initiative of x is less than -2 begin] if (((GProperty(9, t_0,p15_initiative) < -2))) { ! phrase 3 ! [3: now the initiative of x is -2] WriteGProperty(9, t_0,p15_initiative,-2); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Initiative update rule when the jumping bomb is enclosed by the location ( this is the jumping bomb has slightly less initiative rule ): [ R_1796 ; if ((((((IndirectlyContains(real_location,I454_jumping_bomb))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1796, 1796); ! phrase 1 ! [1: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 2 ! [2: decrease the initiative of the jumping bomb by 1] WriteGProperty(9, I454_jumping_bomb,p15_initiative,GProperty(9, I454_jumping_bomb,p15_initiative) - 1); ! phrase 3 ! [3: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1796, 1796, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Initiative update rule ( this is the increase initiative every round rule ): [ R_849 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_236(0), t_1=Prop_236(t_0): t_0: t_0=t_1, t_1=Prop_236(t_1)) { ! phrase 2 ! [2: increase the initiative of x by 2] WriteGProperty(9, t_0,p15_initiative,GProperty(9, t_0,p15_initiative) + 2); ! phrase 3 ! [3: end repeat] } rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Initiative update rule ( this is the random initiative rule ): [ R_850 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_237(0), t_1=Prop_237(t_0): t_0: t_0=t_1, t_1=Prop_237(t_1)) { ! phrase 2 ! [2: increase the initiative of x by a random number between 0 and 2] WriteGProperty(9, t_0,p15_initiative,GProperty(9, t_0,p15_initiative) + R_DecimalNumber(0, 2) ); ! phrase 3 ! [3: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Initiative update rule ( this is the sometimes loses initiative when cautious rule ): [ R_1406 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with x running through all alive cautious persons enclosed by the location begin] for (t_0=Prop_238(0), t_1=Prop_238(t_0): t_0: t_0=t_1, t_1=Prop_238(t_1)) { ! phrase 2 ! [2: if a random chance of 1 in 20 succeeds begin] if (( (GenerateRandomNumber(1, 20) <= 1) )) { ! phrase 3 ! [3: decrease the initiative of x by 4] WriteGProperty(9, t_0,p15_initiative,GProperty(9, t_0,p15_initiative) - 4); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Initiative update rule ( this is the boots of the war dance give initiative rule ): [ R_1490 ; ! phrase 1 ! [1: if the player wears the boots of the war dance begin] if (((player == WearerOf(I349_boots_of_the_war_dance)))) { ! phrase 2 ! [2: if a random chance of 1 in 13 succeeds begin] if (( (GenerateRandomNumber(1, 13) <= 1) )) { ! phrase 3 ! [3: increase the initiative of the player by 5] WriteGProperty(9, player,p15_initiative,GProperty(9, player,p15_initiative) + 5); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Initiative update rule ( this is the boots of the boots of wandering give initiative rule ): [ R_1492 ; ! phrase 1 ! [1: if the player wears the boots of wandering begin] if (((player == WearerOf(I350_boots_of_wandering)))) { ! phrase 2 ! [2: if a random chance of 1 in 13 succeeds begin] if (( (GenerateRandomNumber(1, 13) <= 1) )) { ! phrase 3 ! [3: increase the initiative of the player by 5] WriteGProperty(9, player,p15_initiative,GProperty(9, player,p15_initiative) + 5); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Initiative update rule ( this is the suit of plate mail takes away initiative rule ): [ R_1496 ; ! phrase 1 ! [1: if the player wears suit of plate mail begin] if (((player == WearerOf(I351_suit_of_plate_mail)))) { ! phrase 2 ! [2: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 3 ! [3: decrease the initiative of the player by 1] WriteGProperty(9, player,p15_initiative,GProperty(9, player,p15_initiative) - 1); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An initiative update rule ( this is the initiative is almost completely random in Space-Time Discontinuum rule ): [ R_1608 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: if location is space-time discontinuum and the location is not initiative-conferring begin] if ((((real_location == I402_space_time_discontinuum))) && (((~~(((Adj_284_t1_v9(real_location)))))))) { ! phrase 2 ! [2: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_239(0), t_1=Prop_239(t_0): t_0: t_0=t_1, t_1=Prop_239(t_1)) { ! phrase 3 ! [3: now the initiative of x is a random number between 0 and 100] WriteGProperty(9, t_0,p15_initiative, R_DecimalNumber(0, 100) ); ! phrase 4 ! [4: end repeat] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Initiative update rule ( this is the decrease initiative when hexed rule ): [ R_2029 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_240(0), t_1=Prop_240(t_0): t_0: t_0=t_1, t_1=Prop_240(t_1)) { ! phrase 2 ! [2: if x is hexed begin] if ((((Adj_278_t1_v9(t_0))))) { ! phrase 3 ! [3: if a random chance of 2 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 2) )) { ! phrase 4 ! [4: decrease the initiative of x by a random number between 0 and 2] WriteGProperty(9, t_0,p15_initiative,GProperty(9, t_0,p15_initiative) - R_DecimalNumber(0, 2) ); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Initiative update rule ( this is the player wins initiative first time in a room rule ): [ R_2083 ; ! phrase 1 ! [1: if the location is initiative-conferring begin] if ((((Adj_284_t1_v9(real_location))))) { ! phrase 2 ! [2: increase the initiative of the player by 10] WriteGProperty(9, player,p15_initiative,GProperty(9, player,p15_initiative) + 10); ! phrase 3 ! [3: now the location is not initiative-conferring] (Adj_284_t3_v9(real_location)); ! phrase 4 ! [4: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Standard AI (B413_standard_ai) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! First Standard AI rule ( this is the do nothing when all enemies hidden rule ): ! === which is equally specific with === ! Rule 2/6 ! A first Standard AI rule for a person ( called P ) ( this is the reset AI variables rule ): ! === which is equally specific with === ! Rule 3/6 ! A first Standard AI rule for an at-React person ( called P ) ( this is the reactors target the main actor rule ): ! === which is equally specific with === ! Rule 4/6 ! A first Standard AI rule for a person ( called P ) ( this is the select a target rule ): ! --- now the mid-placed rules --- ! Rule 5/6 ! A Standard AI rule for a person ( called P ) ( this is the select a weapon rule ): ! --- now the last-placed rules --- ! Rule 6/6 ! A last Standard AI rule for a person ( called P ) ( this is the select an action and do it rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! First Standard AI rule ( this is the do nothing when all enemies hidden rule ): [ R_1300 t_0 ! Local variable e.g. 'p' = truth state t_1 ! Local variable e.g. 'q' = truth state t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: let p be false] t_0 = 0; ! phrase 2 ! [2: let q be false] t_1 = 0; ! phrase 3 ! [3: repeat with x running through all alive persons enclosed by the location begin] for (t_2=Prop_241(0), t_3=Prop_241(t_2): t_2: t_2=t_3, t_3=Prop_241(t_3)) { ! phrase 4 ! [4: if the faction of the running ai hates the faction of x begin] if ((((Relation_TestVtoV(GProperty(9, (Global_Vars-->36),p111_faction),Rel_Record_67,GProperty(9, t_2,p111_faction),false))))) { ! phrase 5 ! [5: now p is true] t_0 = 1; ! phrase 6 ! [6: if x is not hidden begin] if (((~~(((Adj_221_t1_v9(t_2))))))) { ! phrase 7 ! [7: now q is true] t_1 = 1; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end repeat] } ! phrase 11 ! [11: if p is true and q is false begin] if (((((t_0 && true) == (1 && true)))) && ((((t_1 && true) == (0 && true))))) { ! phrase 12 ! [12: say ~[The running AI] [one of]remains unaware of your presence[or]does not notice you[or]does not detect your presence[at random].~] say__p=1;ParaContent(); print (The) (Global_Vars-->36); ParaContent(); print (PrintText) SC_209; ParaContent(); I7_ST_say_one_of-->8 = i7_soo_ran(I7_ST_say_one_of-->8, 3); switch((I7_ST_say_one_of-->8)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_787; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_788; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_789; ParaContent(); } ParaContent(); print (PrintText) SC_310; new_line; .L_Say451; .L_SayX409; ! phrase 13 ! [13: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 14 ! [14: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A first Standard AI rule for a person ( called P ) ( this is the reset AI variables rule ): [ R_869 t_0 ! Local variable e.g. 'P' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_869, 869); ! phrase 1 ! [1: now the running ai is p] (Global_Vars-->36) = t_0; ! phrase 2 ! [2: now the chosen target is the stand in for no one] (Global_Vars-->37) = nothing; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_869, 869, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A first Standard AI rule for an at-React person ( called P ) ( this is the reactors target the main actor rule ): [ R_868 t_0 ! Local variable e.g. 'P' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_100_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_868, 868); ! phrase 1 ! [1: now the chosen target is the main actor] (Global_Vars-->37) = (Global_Vars-->30); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_868, 868, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A first Standard AI rule for a person ( called P ) ( this is the select a target rule ): [ R_867 t_0 ! Local variable e.g. 'P' = person t_1 ! Local variable e.g. 'target count' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_867, 867); ! phrase 1 ! [1: if the chosen target is not the stand in for no one begin] if (((~~(((Global_Vars-->37) == nothing))))) { ! phrase 2 ! [2: make no decision] rfalse; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: let target count be the number of ( alive people enclosed by the location ) who are opposed by p] t_1 = (Prop_242(,t_0)) ; ! phrase 5 ! [5: if target count is 0 begin] if (((t_1 == 0))) { ! phrase 6 ! [6: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if target count is 1 begin] if (((t_1 == 1))) { ! phrase 9 ! [9: now the chosen target is a random ( alive people enclosed by the location ) who is opposed by p] (Global_Vars-->37) = (Prop_243(,t_0)) ; ! phrase 10 ! [10: make no decision] rfalse; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: blank out the whole of the table of ai target options] TableBlankOutAll(T10_ai_target_options); ! phrase 13 ! [13: repeat with target running through ( alive people enclosed by the location ) who are opposed by p begin] for (t_2=Prop_244(,t_0,0), t_3=Prop_244(,t_0,t_2): t_2: t_2=t_3, t_3=Prop_244(,t_0,t_3)) { ! phrase 14 ! [14: let weight be the number produced by the ai target selection rules for target] t_4 = ResultOfRule(420, t_2, true, NUMBER_TY) ; ! phrase 15 ! [15: choose a blank row in the table of ai target options] ct_0 = T10_ai_target_options; ct_1 = TableBlankRow(ct_0); ! phrase 16 ! [16: now the person entry is target] TableLookUpEntry(ct_0,120,ct_1,1,t_2); ! phrase 17 ! [17: now the target weight entry is weight] TableLookUpEntry(ct_0,121,ct_1,1,t_4); ! phrase 18 ! [18: end repeat] } ! phrase 19 ! [19: sort the table of ai target options in random order] TableShuffle(T10_ai_target_options); ! phrase 20 ! [20: sort the table of ai target options in reverse target weight order] TableSort(T10_ai_target_options, 121, -1); ! phrase 21 ! [21: #if debug and showing weightings] #ifdef DEBUG; if ( (Global_Vars-->38) ) { ! phrase 22 ! [22: repeat through table of ai target options begin] @push ct_0; @push ct_1; for (t_2=T10_ai_target_options,t_3=1,ct_0=t_2,ct_1=t_3: t_3<=TableRows(t_2):t_3++,ct_0=t_2,ct_1=t_3) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 23 ! [23: say ~[Target weight entry]: [Person entry][line break]~] say__p=1;ParaContent(); print (say__n=TableLookUpEntry(ct_0,121,ct_1)); ParaContent(); print (PrintText) SC_396; ParaContent(); print (PrintShortName) TableLookUpEntry(ct_0,120,ct_1); ParaContent(); new_line; .L_Say452; .L_SayX410; ! phrase 24 ! [24: end repeat] } @pull ct_1; @pull ct_0; ! phrase 25 ! [25: #endif debug and showing weightings] } #endif; ! phrase 26 ! [26: choose row 1 in the table of ai target options] ct_0 = T10_ai_target_options; ct_1 = 1; ! phrase 27 ! [27: now the chosen target is the person entry] (Global_Vars-->37) = TableLookUpEntry(ct_0,120,ct_1); if (~~((Global_Vars-->37) ofclass K8_person)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->37), "now the chosen target is the Person entry", "person");; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_867, 867, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! A Standard AI rule for a person ( called P ) ( this is the select a weapon rule ): [ R_1038 t_0 ! Local variable e.g. 'P' = person t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1038, 1038); ! phrase 1 ! [1: if exactly one weapon is enclosed by p begin] if ((Prop_245(,t_0))) { ! phrase 2 ! [2: now the chosen weapon is a random weapon enclosed by p] (Global_Vars-->47) = (Prop_246(,t_0)) ; ! phrase 3 ! [3: otherwise if exactly two weapons are enclosed by p] } else if ((Prop_247(,t_0))) { ! phrase 4 ! [4: now the chosen weapon is a random artificial weapon enclosed by p] (Global_Vars-->47) = (Prop_248(,t_0)) ; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: blank out the whole of the table of ai weapon options] TableBlankOutAll(T12_ai_weapon_options); ! phrase 7 ! [7: repeat with x running through all weapons enclosed by the p begin] for (t_1=Prop_249(,t_0,0), t_2=Prop_249(,t_0,t_1): t_1: t_1=t_2, t_2=Prop_249(,t_0,t_2)) { ! phrase 8 ! [8: let weight be the number produced by the ai weapon selection rules for x] t_3 = ResultOfRule(453, t_1, true, NUMBER_TY) ; ! phrase 9 ! [9: choose a blank row in the table of ai weapon options] ct_0 = T12_ai_weapon_options; ct_1 = TableBlankRow(ct_0); ! phrase 10 ! [10: now the weapon entry is x] TableLookUpEntry(ct_0,124,ct_1,1,t_1); ! phrase 11 ! [11: now the weapon weight entry is weight] TableLookUpEntry(ct_0,125,ct_1,1,t_3); ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: sort the table of ai weapon options in random order] TableShuffle(T12_ai_weapon_options); ! phrase 14 ! [14: sort the table of ai weapon options in reverse weapon weight order] TableSort(T12_ai_weapon_options, 125, -1); ! phrase 15 ! [15: #if debug and showing weightings] #ifdef DEBUG; if ( (Global_Vars-->38) ) { ! phrase 16 ! [16: repeat through table of ai weapon options begin] @push ct_0; @push ct_1; for (t_1=T12_ai_weapon_options,t_2=1,ct_0=t_1,ct_1=t_2: t_2<=TableRows(t_1):t_2++,ct_0=t_1,ct_1=t_2) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 17 ! [17: say ~[Weapon weight entry]: [Weapon entry][line break]~] say__p=1;ParaContent(); print (say__n=TableLookUpEntry(ct_0,125,ct_1)); ParaContent(); print (PrintText) SC_396; ParaContent(); print (PrintShortName) TableLookUpEntry(ct_0,124,ct_1); ParaContent(); new_line; .L_Say453; .L_SayX411; ! phrase 18 ! [18: end repeat] } @pull ct_1; @pull ct_0; ! phrase 19 ! [19: #endif debug and showing weightings] } #endif; ! phrase 20 ! [20: choose row 1 in the table of ai weapon options] ct_0 = T12_ai_weapon_options; ct_1 = 1; ! phrase 21 ! [21: now the chosen weapon is the weapon entry] (Global_Vars-->47) = TableLookUpEntry(ct_0,124,ct_1); if (~~((Global_Vars-->47) ofclass K17_weapon)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->47), "now the chosen weapon is the Weapon entry", "weapon");; ! phrase 22 ! [22: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1038, 1038, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A last Standard AI rule for a person ( called P ) ( this is the select an action and do it rule ): [ R_876 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_15(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_15 I7BASPL t_0 ! Local variable e.g. 'P' = person t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_876, 876); ! phrase 1 ! [1: blank out the whole of the table of ai action options] TableBlankOutAll(T11_ai_action_options); ! phrase 2 ! [2: consider the ai action selection rules for p] ProcessRulebook(421, t_0, true); ! phrase 3 ! [3: sort the table of ai action options in random order] TableShuffle(T11_ai_action_options); ! phrase 4 ! [4: sort the table of ai action options in reverse action weight order] TableSort(T11_ai_action_options, 123, -1); ! phrase 5 ! [5: choose row one in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = 1; ! phrase 6 ! [6: #if debug and showing weightings] #ifdef DEBUG; if ( (Global_Vars-->38) ) { ! phrase 7 ! [7: repeat through table of ai action options begin] @push ct_0; @push ct_1; for (t_1=T11_ai_action_options,t_2=1,ct_0=t_1,ct_1=t_2: t_2<=TableRows(t_1):t_2++,ct_0=t_1,ct_1=t_2) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 8 ! [8: say ~[Action weight entry]: [Option entry][line break]~] say__p=1;ParaContent(); print (say__n=TableLookUpEntry(ct_0,123,ct_1)); ParaContent(); print (PrintText) SC_396; ParaContent(); print (STORED_ACTION_TY_Say) TableLookUpEntry(ct_0,122,ct_1); ParaContent(); new_line; .L_Say454; .L_SayX412; ! phrase 9 ! [9: end repeat] } @pull ct_1; @pull ct_0; ! phrase 10 ! [10: #endif debug and showing weightings] } #endif; ! phrase 11 ! [11: try the option entry] STORED_ACTION_TY_Try(BlkValueCopy((blockv_stack-->(I7BASPL+0)), TableLookUpEntry(ct_0,122,ct_1))); ! phrase 12 ! [12: if p is at-act begin] if (((t_0.p112_combat_state == I96_at_act))) { ! phrase 13 ! [13: now the main actor's action is the action name part of the option entry] (Global_Vars-->31) = (STORED_ACTION_TY_Part(TableLookUpEntry(ct_0,122,ct_1), 0)) ; ! phrase 14 ! [14: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_876, 876, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching weightings on (B415_carry_out_switching_wei) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out switching weightings on ( this is the standard switching weightings on rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Carry out switching weightings on ( this is the standard switching weightings on rule ): [ R_864 ; if (actor == player) { if (debug_rules) DB_Rule(R_864, 864); ! phrase 1 ! [1: now show ai weightings is true] (Global_Vars-->38) = 1; ! phrase 2 ! [2: say ~You will now see the AI weightings.~] say__p=1;ParaContent(); print (PrintText) SC_790; new_line; .L_Say455; .L_SayX413; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_864, 864, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching weightings off (B418_carry_out_switching_wei) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out switching weightings off ( this is the standard switching weightings off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Carry out switching weightings off ( this is the standard switching weightings off rule ): [ R_865 ; if (actor == player) { if (debug_rules) DB_Rule(R_865, 865); ! phrase 1 ! [1: now show ai weightings is false] (Global_Vars-->38) = 0; ! phrase 2 ! [2: say ~You will no longer see the AI weightings.~] say__p=1;ParaContent(); print (PrintText) SC_791; new_line; .L_Say456; .L_SayX414; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_865, 865, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: AI target selection (B420_ai_target_selection) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/14 ! An AI target selection rule for a person ( called target ) when the running AI is the mindslug ( this is the mindslug prefers low willpower rule ): ! === which is equally specific with === ! Rule 2/14 ! An AI target selection rule for a person ( called target ) when the running AI is the giant tentacle ( this is the tentacle prefers the grappled person rule ): ! >>> I - Number of aspects constrained >>> ! Rule 3/14 ! An AI target selection rule for the player ( this is the prefer the player rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 4/14 ! An AI target selection rule for a passive person ( this is the do not prefer passive targets rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 5/14 ! An AI target selection rule for a person ( called target ) ( this is the prefer targets you press rule ): ! === which is equally specific with === ! Rule 6/14 ! An AI target selection rule for a person ( called target ) ( this is the prefer those who press you rule ): ! === which is equally specific with === ! Rule 7/14 ! An AI target selection rule for a person ( called target ) ( this is the prefer the severely wounded rule ): ! === which is equally specific with === ! Rule 8/14 ! An AI target selection rule for a person ( called target ) ( this is the prefer concentrated people rule ): ! === which is equally specific with === ! Rule 9/14 ! An AI target selection rule for a person ( called target ) ( this is the prefer those with good weapons rule ): ! === which is equally specific with === ! Rule 10/14 ! An AI target selection rule for a person ( called target ) ( this is the do not prefer good parriers rule ): ! === which is equally specific with === ! Rule 11/14 ! An AI target selection rule for a person ( called target ) ( this is the do not prefer high defence unless concentrated rule ): ! >>> I - Number of aspects constrained >>> ! Rule 12/14 ! An AI target selection rule ( this is the randomise the target result rule ): ! === which is equally specific with === ! Rule 13/14 ! An AI target selection rule ( this is the randomise the target result more rule ): ! --- now the last-placed rules --- ! Rule 14/14 ! A last AI target selection rule ( this is the return the target weight rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) when the running AI is the mindslug ( this is the mindslug prefers low willpower rule ): [ R_1843 t_0 ! Local variable e.g. 'target' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (((((((Global_Vars-->36) == I463_mindslug)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1843, 1843); ! phrase 1 ! [1: decrease the weight by the willpower of the target] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) - GProperty(9, t_0,p35_willpower); } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1843, 1843, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) when the running AI is the giant tentacle ( this is the tentacle prefers the grappled person rule ): [ R_1892 t_0 ! Local variable e.g. 'target' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (((((((Global_Vars-->36) == I473_giant_tentacle)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1892, 1892); ! phrase 1 ! [1: if the giant tentacle grapples the target begin] if (((I473_giant_tentacle == (t_0.p238_grappling)))) { ! phrase 2 ! [2: increase the weight by 1000] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + 1000; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1892, 1892, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! An AI target selection rule for the player ( this is the prefer the player rule ): [ R_873 ; if (((parameter_object == player) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_873, 873); ! phrase 1 ! [1: increase the weight by 1] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + 1; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_873, 873, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! An AI target selection rule for a passive person ( this is the do not prefer passive targets rule ): [ R_870 ; if (((parameter_object ofclass K8_person) && ((Adj_96_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_870, 870); ! phrase 1 ! [1: decrease the weight by 5] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) - 5; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_870, 870, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) ( this is the prefer targets you press rule ): [ R_871 t_0 ! Local variable e.g. 'target' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_871, 871); ! phrase 1 ! [1: if the running ai presses the target begin] if ((((Relation_TestVtoV((Global_Vars-->36),Rel_Record_71,t_0,false))))) { ! phrase 2 ! [2: increase the weight by 3] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + 3; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_871, 871, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) ( this is the prefer those who press you rule ): [ R_872 t_0 ! Local variable e.g. 'target' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_872, 872); ! phrase 1 ! [1: if the target presses the running ai begin] if ((((Relation_TestVtoV(t_0,Rel_Record_71,(Global_Vars-->36),false))))) { ! phrase 2 ! [2: increase the weight by 1] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + 1; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_872, 872, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) ( this is the prefer the severely wounded rule ): [ R_1033 t_0 ! Local variable e.g. 'target' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1033, 1033); ! phrase 1 ! [1: if the health of the target times 2 is less than the permanent health of the target begin] if ((( (GProperty(9, t_0,p14_health)*2) < GProperty(9, t_0,p17_permanent_health)))) { ! phrase 2 ! [2: increase the weight by 2] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + 2; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if the health of the target times 4 is less than the permanent health of the target begin] if ((( (GProperty(9, t_0,p14_health)*4) < GProperty(9, t_0,p17_permanent_health)))) { ! phrase 5 ! [5: increase the weight by 5] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + 5; ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1033, 1033, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) ( this is the prefer concentrated people rule ): [ R_1034 t_0 ! Local variable e.g. 'target' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1034, 1034); ! phrase 1 ! [1: increase the weight by the concentration of the target] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + GProperty(9, t_0,p26_concentration); ! phrase 2 ! [2: if the concentration of the target is 3 begin] if (((GProperty(9, t_0,p26_concentration) == 3))) { ! phrase 3 ! [3: increase the weight by 2] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + 2; ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1034, 1034, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) ( this is the prefer those with good weapons rule ): [ R_1035 t_0 ! Local variable e.g. 'target' = person t_1 ! Local variable e.g. 'item' = object ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1035, 1035); ! phrase 1 ! [1: let item be a random readied weapon enclosed by the target] t_1 = (Prop_250(,t_0)) ; ! phrase 2 ! [2: increase the weight by the damage die of the item divided by 2] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + (IntegerDivide(GProperty(OBJECT_TY, t_1,p20_damage_die),2)) ; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1035, 1035, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) ( this is the do not prefer good parriers rule ): [ R_1036 t_0 ! Local variable e.g. 'target' = person t_1 ! Local variable e.g. 'item' = object t_2 ! Local variable e.g. 'item2' = object t_3 ! Local variable e.g. 'n' = number ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1036, 1036); ! phrase 1 ! [1: let item be a random readied weapon enclosed by the running ai] t_1 = (Prop_251()) ; ! phrase 2 ! [2: let item2 be a random readied weapon enclosed by the target] t_2 = (Prop_252(,t_0)) ; ! phrase 3 ! [3: let n be the passive parry max of item] t_3 = GProperty(OBJECT_TY, t_1,p23_passive_parry_max); ! phrase 4 ! [4: if the active parry max of item2 is less than n begin] if (((GProperty(OBJECT_TY, t_2,p24_active_parry_max) < t_3))) { ! phrase 5 ! [5: now n is the active parry max of item2] t_3 = GProperty(OBJECT_TY, t_2,p24_active_parry_max); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if the dodgability of item is less than n begin] if (((GProperty(OBJECT_TY, t_1,p22_dodgability) < t_3))) { ! phrase 8 ! [8: now n is n minus the dodgability of item] t_3 = (t_3-GProperty(OBJECT_TY, t_1,p22_dodgability)) ; ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: now n is 0] t_3 = 0; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: decrease the weight by n] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) - t_3; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1036, 1036, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI target selection rule for a person ( called target ) ( this is the do not prefer high defence unless concentrated rule ): [ R_1037 t_0 ! Local variable e.g. 'target' = person t_1 ! Local variable e.g. 'n' = number t_2 ! Local variable e.g. 'm' = number ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1037, 1037); ! phrase 1 ! [1: let n be the defence of the target minus the melee of the running ai] t_1 = (GProperty(9, t_0,p19_defence)-GProperty(9, (Global_Vars-->36),p18_melee)) ; ! phrase 2 ! [2: if n is less than 0 begin] if (((t_1 < 0))) { ! phrase 3 ! [3: now n is 0] t_1 = 0; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: let m be the concentration of running ai minus 1] t_2 = (GProperty(9, (Global_Vars-->36),p26_concentration)-1) ; ! phrase 6 ! [6: increase the weight by n times m] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + (t_1*t_2) ; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1037, 1037, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! An AI target selection rule ( this is the randomise the target result rule ): [ R_874 ; ! phrase 1 ! [1: increase the weight by a random number between 0 and 4] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + R_DecimalNumber(0, 4) ; rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! An AI target selection rule ( this is the randomise the target result more rule ): [ R_1063 ; ! phrase 1 ! [1: increase the weight by a random number between 0 and 3] (MStack-->MstVO(420,0)) = (MStack-->MstVO(420,0)) + R_DecimalNumber(0, 3) ; rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! A last AI target selection rule ( this is the return the target weight rule ): [ R_875 ; ! phrase 1 ! [1: rule succeeds with result weight] RulebookSucceeds(10,(MStack-->MstVO(420,0))); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: AI action selection (B421_ai_action_selection) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/58 ! First AI action selection rule for a person ( called P ) ( this is the consider disintegrating rule ): ! === which is equally specific with === ! Rule 2/58 ! First AI action selection rule for an at-Act person ( called P ) ( this is the consider teleporting rule ): ! === which is equally specific with === ! Rule 3/58 ! First AI action selection rule for a person ( called P ) ( this is the consider healing rule ): ! === which is equally specific with === ! Rule 4/58 ! First AI action selection rule ( this is the calculate the chance to win rule ): ! === which is equally specific with === ! Rule 5/58 ! First AI action selection rule for a person ( called P ) when the chosen weapon is not readied ( this is the consider readying rule ): ! === which is equally specific with === ! Rule 6/58 ! First AI action selection rule for an at-React person ( called P ) ( this is the consider parrying rule ): ! === which is equally specific with === ! Rule 7/58 ! First AI action selection rule for an at-React person ( called P ) ( this is the consider dodging rule ): ! === which is equally specific with === ! Rule 8/58 ! First AI action selection rule for a person ( called P ) ( this is the consider concentrating rule ): ! === which is equally specific with === ! Rule 9/58 ! First AI action selection rule for an at-Act person ( called P ) ( this is the consider attacking rule ): ! === which is equally specific with === ! Rule 10/58 ! First AI action selection rule for a person ( called P ) ( this is the consider waiting rule ): ! --- now the mid-placed rules --- ! Rule 11/58 ! An AI action selection rule for a person ( called P ) when the chosen weapon is not readied and the running AI is not weapon user ( this is the non weapon users never ready rule ): ! >>> II - When/while requirement >>> ! Rule 12/58 ! An AI action selection rule for a person ( called P ) when the chosen weapon is not readied ( this is the don't attack or concentrate with an unreadied weapon rule ): ! >>> II - When/while requirement >>> ! Rule 13/58 ! An AI action selection rule for an at-React person ( called P ) when the location is Bridge of Doom ( this is the do not dodge on the Bridge of Doom rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 14/58 ! An AI action selection rule for a person ( called P ) when the location is Hall of Mirrors ( this is the concentration is more important in the Hall of Mirrors rule ): ! === which is equally specific with === ! Rule 15/58 ! An AI action selection rule for a person ( called P ) when the location is Phantasmagoria ( this is the concentration is often futile in Phantasmagoria rule ): ! >>> I - Number of aspects constrained >>> ! Rule 16/58 ! An AI action selection rule for the at-Act as-dog aswang ( this is the aswang as dog likes to attack rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 17/58 ! An AI action selection rule for the at-Act chain golem ( this is the chain golem considers disarming rule ): ! === which is equally specific with === ! Rule 18/58 ! An AI action selection rule for the at-Act jumping bomb ( this is the jumping bomb only attacks when highly concentrated rule ): ! === which is equally specific with === ! Rule 19/58 ! An AI action selection rule for the at-React jumping bomb ( this is the jumping bomb dislikes parrying rule ): ! === which is equally specific with === ! Rule 20/58 ! An AI action selection rule for the at-Act mindslug ( this is the mindslug considers mindblasting rule ): ! === which is equally specific with === ! Rule 21/58 ! An AI action selection rule for the at-Act mindslug ( this is the mindslug dislikes attacking rule ): ! === which is equally specific with === ! Rule 22/58 ! An AI action selection rule for the at-React mindslug ( this is the mindslug doesnt dodge rule ): ! === which is equally specific with === ! Rule 23/58 ! An AI action selection rule for the at-Act giant tentacle ( this is the tentacle attacks only when not grappling rule ): ! === which is equally specific with === ! Rule 24/58 ! An AI action selection rule for the at-Act giant tentacle ( this is the tentacle considers constricting rule ): ! === which is equally specific with === ! Rule 25/58 ! An AI action selection rule for the at-React giant tentacle ( this is the tentacle shakes when attacked and grappling rule ): ! === which is equally specific with === ! Rule 26/58 ! An AI action selection rule for the at-React Nameless Horror ( this is the Nameless Horror does not parry rule ): ! === which is equally specific with === ! Rule 27/58 ! An AI action selection rule for the at-React Nameless Horror ( this is the Nameless Horror does not dodge rule ): ! === which is equally specific with === ! Rule 28/58 ! An AI action selection rule for the as-witch aswang ( this is the aswang as witch considers hexing rule ): ! === which is equally specific with === ! Rule 29/58 ! An AI action selection rule for the as-bird aswang ( this is the aswang as bird considers fleeing rule ): ! === which is equally specific with === ! Rule 30/58 ! An AI action selection rule for the at-Act abyss of the soul ( this is the abyss of the soul pulsates rule ): ! === which is equally specific with === ! Rule 31/58 ! An AI action selection rule for the at-React abyss of the soul ( this is the abyss of the soul does not react rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 32/58 ! An AI action selection rule for the swarm of daggers ( this is the daggers do not concentrate rule ): ! === which is equally specific with === ! Rule 33/58 ! An AI action selection rule for the swarm of daggers ( this is the daggers must wait if scattered rule ): ! === which is equally specific with === ! Rule 34/58 ! An AI action selection rule for the ravenous armadillo ( this is the ravenous armadillo considers eating rule ): ! === which is equally specific with === ! Rule 35/58 ! An AI action selection rule for the chain golem ( this is the chain golem likes to concentrate rule ): ! === which is equally specific with === ! Rule 36/58 ! An AI action selection rule for the jumping bomb ( this is the jumping bomb concentration select rule ): ! === which is equally specific with === ! Rule 37/58 ! An AI action selection rule for Bodmall ( this is the Bodmall considers fogging rule ): ! === which is equally specific with === ! Rule 38/58 ! An AI action selection rule for Bodmall ( this is the Bodmall considers transmuting rule ): ! === which is equally specific with === ! Rule 39/58 ! An AI action selection rule for Bodmall ( this is the Bodmall considers barkskinning rule ): ! === which is equally specific with === ! Rule 40/58 ! An AI action selection rule for Bodmall ( this is the Bodmall considers summoning thorns rule ): ! === which is equally specific with === ! Rule 41/58 ! An AI action selection rule for Malygris ( this is the consider unghouling rule ): ! === which is equally specific with === ! Rule 42/58 ! An AI action selection rule for the Nameless Horror ( this is the Nameless Horror does not concentrate rule ): ! === which is equally specific with === ! Rule 43/58 ! An AI action selection rule for the Nameless Horror ( this is the Nameless Horror considers waiting rule ): ! === which is equally specific with === ! Rule 44/58 ! An AI action selection rule for the rotting corpse ( this is the rotting corpse without a head does not concentrate rule ): ! === which is equally specific with === ! Rule 45/58 ! An AI action selection rule for the aswang ( this is the aswang considers shape shifting rule ): ! === which is equally specific with === ! Rule 46/58 ! An AI action selection rule for the imp ( this is the imp considers imping rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 47/58 ! An AI action selection rule for an at-Act person ( called P ) ( this is the standard attack select rule ): ! === which is equally specific with === ! Rule 48/58 ! An AI action selection rule for an at-Act person ( called P ) ( this is the concentration influences attacking rule ): ! === which is equally specific with === ! Rule 49/58 ! An AI action selection rule for an at-React person ( called P ) ( this is the standard parry and dodge against attack select rule ): ! === which is equally specific with === ! Rule 50/58 ! An AI action selection rule for an at-Act person ( called P ) ( this is the tension influences attacking rule ): ! === which is equally specific with === ! Rule 51/58 ! An AI action selection rule for an at-Act person ( called P ) ( this is the teleport eagerness rule ): ! === which is equally specific with === ! Rule 52/58 ! An AI action selection rule for an at-Act person ( called P ) ( this is the robe of the dead mage discourages attacking rule ): ! === which is equally specific with === ! Rule 53/58 ! An AI action selection rule for a stunned person ( called P ) ( this is the do not concentrate when stunned rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 54/58 ! An AI action selection rule for a person ( called P ) ( this is the standard concentration select rule ): ! === which is equally specific with === ! Rule 55/58 ! An AI action selection rule for a person ( called P ) ( this is the concentrate to compensate for the suit of plate mail rule ): ! === which is equally specific with === ! Rule 56/58 ! An AI action selection rule for a person ( called P ) ( this is the concentrate to compensate for the dragon armour rule ): ! === which is equally specific with === ! Rule 57/58 ! An AI action selection rule for a person ( called P ) ( this is the concentrate more if the player has scales rule ): ! --- now the last-placed rules --- ! Rule 58/58 ! Last AI action selection rule ( this is the randomise the action result rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First AI action selection rule for a person ( called P ) ( this is the consider disintegrating rule ): [ R_1188 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_16(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_16 I7BASPL t_0 ! Local variable e.g. 'P' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1188, 1188); ! phrase 1 ! [1: if the disintegrate power of p is greater than 0 and the current disintegrate cooldown of the p is less than 1 begin] if ((((GProperty(9, t_0,p45_disintegrate_power) > 0))) && (((GProperty(9, t_0,p47_current_disintegrate_coo) < 1)))) { ! phrase 2 ! [2: repeat with guy running through alive persons enclosed by the location opposed by p begin] for (t_1=Prop_253(,t_0,0), t_2=Prop_253(,t_0,t_1): t_1: t_1=t_2, t_2=Prop_253(,t_0,t_2)) { ! phrase 3 ! [3: if guy has at least one thing begin] if ((Prop_254(,t_1))) { ! phrase 4 ! [4: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 5 ! [5: change the option entry to the action of p disintegrating] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##A95_disintegrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 6 ! [6: change the action weight entry to disintegrate power of p] TableLookUpEntry(ct_0,123,ct_1,1,GProperty(9, t_0,p45_disintegrate_power)); ! phrase 7 ! [7: if a random chance of 1 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 8 ! [8: increase action weight entry by 10] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 10); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: stop] return; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1188, 1188, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First AI action selection rule for an at-Act person ( called P ) ( this is the consider teleporting rule ): [ R_1180 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_17(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_17 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_99_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1180, 1180); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of p teleporting] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##A94_teleporting, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: if the teleport amount of the running ai is 0 begin] if (((GProperty(9, (Global_Vars-->36),p43_teleport_amount) == 0))) { ! phrase 4 ! [4: change the action weight entry to -1000] TableLookUpEntry(ct_0,123,ct_1,1,-1000); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: if p is teleport impossible aware begin] if ((((Adj_170_t1_v9(t_0))))) { ! phrase 7 ! [7: change the action weight entry to -100] TableLookUpEntry(ct_0,123,ct_1,1,-100); ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: change the action weight entry to -20] TableLookUpEntry(ct_0,123,ct_1,1,-20); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1180, 1180, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First AI action selection rule for a person ( called P ) ( this is the consider healing rule ): [ R_1176 ;blockv_stack-->(blockv_sp+2) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 3; blockv_stack-->(blockv_sp++) = R_SHELL_18(blockv_sp-3); blockv_sp = blockv_sp - 4; BlkFree(blockv_stack-->(blockv_sp+2)); BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+3); ]; [ R_SHELL_18 I7BASPL t_0 ! Local variable e.g. 'P' = person t_1 ! Local variable e.g. '?-1,-1?' = truth state t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = person t_4 ! Local variable e.g. '?-1,-1?' = person t_5 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1176, 1176); ! phrase 1 ! [1: if the heal power of p is greater than 0 and the current heal cooldown of p is less than 1 begin] if ((((GProperty(9, t_0,p40_heal_power) > 0))) && (((GProperty(9, t_0,p42_current_heal_cooldown) < 1)))) { ! phrase 2 ! [2: choose row with an option of the action of p healing in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A93_healing, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: let someone needs healing be false] t_1 = 0; ! phrase 4 ! [4: let greatest injury be 0] t_2 = 0; ! phrase 5 ! [5: repeat with x running through alive persons enclosed by the location not opposed by p begin] for (t_3=Prop_255(,t_0,0), t_4=Prop_255(,t_0,t_3): t_3: t_3=t_4, t_4=Prop_255(,t_0,t_4)) { ! phrase 6 ! [6: let injury be permanent health of x minus health of x] t_5 = (GProperty(9, t_3,p17_permanent_health)-GProperty(9, t_3,p14_health)) ; ! phrase 7 ! [7: if injury is greater than 0 begin] if (((t_5 > 0))) { ! phrase 8 ! [8: now someone needs healing is true] t_1 = 1; ! phrase 9 ! [9: if greatest injury is less than injury begin] if (((t_2 < t_5))) { ! phrase 10 ! [10: now greatest injury is injury] t_2 = t_5; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end repeat] } ! phrase 14 ! [14: if someone needs healing is true begin] if ((((t_1 && true) == (1 && true)))) { ! phrase 15 ! [15: if greatest injury is greater than heal power of the running ai begin] if (((t_2 > GProperty(9, (Global_Vars-->36),p40_heal_power)))) { ! phrase 16 ! [16: now greatest injury is heal power of the running ai] t_2 = GProperty(9, (Global_Vars-->36),p40_heal_power); ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 19 ! [19: now the option entry is the action of p healing] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##A93_healing, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+2)))) ); ! phrase 20 ! [20: now the action weight entry is 5 plus greatest injury] TableLookUpEntry(ct_0,123,ct_1,1, (5+t_2) ); ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1176, 1176, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First AI action selection rule ( this is the calculate the chance to win rule ): [ R_1050 ; ! phrase 1 ! [1: now the chance-to-win is the number produced by the chance to win rules] (MStack-->MstVO(421,0)) = ResultOfRule(454, 0, false, NUMBER_TY) ; ! phrase 2 ! [2: now the normalised chance-to-win is the chance-to-win] (MStack-->MstVO(421,1)) = (MStack-->MstVO(421,0)); ! phrase 3 ! [3: if the normalised chance-to-win is greater than 10 begin] if ((((MStack-->MstVO(421,1)) > 10))) { ! phrase 4 ! [4: now the normalised chance-to-win is 10] (MStack-->MstVO(421,1)) = 10; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the normalised chance-to-win is less than 0 begin] if ((((MStack-->MstVO(421,1)) < 0))) { ! phrase 7 ! [7: now the normalised chance-to-win is 0] (MStack-->MstVO(421,1)) = 0; ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First AI action selection rule for a person ( called P ) when the chosen weapon is not readied ( this is the consider readying rule ): [ R_1049 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_19(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_19 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if ((((((~~(((Adj_103_t1_v9((Global_Vars-->47))))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1049, 1049); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the option entry is the action of p readying the chosen weapon] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##A87_readying, (Global_Vars-->47), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: now the action weight entry is 5] TableLookUpEntry(ct_0,123,ct_1,1,5); } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1049, 1049, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First AI action selection rule for an at-React person ( called P ) ( this is the consider parrying rule ): [ R_1048 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_20(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_20 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_100_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1048, 1048); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the option entry is the action of p parrying] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##A89_parrying, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: now the action weight entry is 5] TableLookUpEntry(ct_0,123,ct_1,1,5); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1048, 1048, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First AI action selection rule for an at-React person ( called P ) ( this is the consider dodging rule ): [ R_1047 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_21(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_21 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_100_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1047, 1047); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the option entry is the action of p dodging] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##A90_dodging, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: now the action weight entry is 5] TableLookUpEntry(ct_0,123,ct_1,1,5); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1047, 1047, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First AI action selection rule for a person ( called P ) ( this is the consider concentrating rule ): [ R_1046 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_22(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_22 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1046, 1046); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the option entry is the action of p concentrating] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: now the action weight entry is 3] TableLookUpEntry(ct_0,123,ct_1,1,3); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1046, 1046, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First AI action selection rule for an at-Act person ( called P ) ( this is the consider attacking rule ): [ R_1045 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_23(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_23 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_99_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1045, 1045); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the option entry is the action of p attacking the chosen target] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: now the action weight entry is 5] TableLookUpEntry(ct_0,123,ct_1,1,5); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1045, 1045, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! First AI action selection rule for a person ( called P ) ( this is the consider waiting rule ): [ R_879 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_24(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_24 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_879, 879); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the option entry is the action of p waiting] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, t_0, ##Wait, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: now the action weight entry is -20] TableLookUpEntry(ct_0,123,ct_1,1,-20); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_879, 879, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) when the chosen weapon is not readied and the running AI is not weapon user ( this is the non weapon users never ready rule ): [ R_1156 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_25(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_25 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (((((((~~(((Adj_103_t1_v9((Global_Vars-->47)))))))) && (((~~(((Adj_150_t1_v9((Global_Vars-->36)))))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1156, 1156); ! phrase 1 ! [1: choose row with an option of the action of p readying the chosen weapon in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A87_readying, (Global_Vars-->47), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 1000); } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1156, 1156, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) when the chosen weapon is not readied ( this is the don't attack or concentrate with an unreadied weapon rule ): [ R_1059 ;blockv_stack-->(blockv_sp+3) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+2) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 4; blockv_stack-->(blockv_sp++) = R_SHELL_26(blockv_sp-4); blockv_sp = blockv_sp - 5; BlkFree(blockv_stack-->(blockv_sp+3)); BlkFree(blockv_stack-->(blockv_sp+2)); BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+4); ]; [ R_SHELL_26 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if ((((((~~(((Adj_103_t1_v9((Global_Vars-->47))))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1059, 1059); ! phrase 1 ! [1: if p is at-act begin] if (((t_0.p112_combat_state == I96_at_act))) { ! phrase 2 ! [2: choose row with an option of the action of p attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: now the action weight entry is -1000] TableLookUpEntry(ct_0,123,ct_1,1,-1000); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+2)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+3)))) )); ! phrase 6 ! [6: now the action weight entry is -100] TableLookUpEntry(ct_0,123,ct_1,1,-100); } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1059, 1059, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An AI action selection rule for an at-React person ( called P ) when the location is Bridge of Doom ( this is the do not dodge on the Bridge of Doom rule ): [ R_1560 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_27(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_27 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_100_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if ((((((real_location == I384_bridge_of_doom)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1560, 1560); ! phrase 1 ! [1: unless p is flying begin] if (~~(((PHR_1166_r51 (t_0))))) { ! phrase 2 ! [2: choose row with an option of the action of p dodging in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A90_dodging, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); ! phrase 4 ! [4: end unless] } } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1560, 1560, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) when the location is Hall of Mirrors ( this is the concentration is more important in the Hall of Mirrors rule ): [ R_1551 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_28(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_28 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if ((((((real_location == I378_hall_of_mirrors)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1551, 1551); ! phrase 1 ! [1: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: increase the action weight entry by 1] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 1); } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1551, 1551, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) when the location is Phantasmagoria ( this is the concentration is often futile in Phantasmagoria rule ): [ R_1555 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_29(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_29 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if ((((((real_location == I381_phantasmagoria)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1555, 1555); ! phrase 1 ! [1: unless p is blind begin] if (~~(((PHR_1169_r17 (t_0))))) { ! phrase 2 ! [2: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: decrease the action weight entry by 2 times the concentration of p] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - (2*GProperty(9, t_0,p26_concentration)) ); ! phrase 4 ! [4: end unless] } } ! Runs only when pattern matches } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1555, 1555, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act as-dog aswang ( this is the aswang as dog likes to attack rule ): [ R_2032 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_30(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_30 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I513_aswang) && ((Adj_99_t1_v9(parameter_object))) && ((Adj_277_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2032, 2032); ! phrase 1 ! [1: choose row with an option of the action of the aswang attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I513_aswang, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: increase action weight entry by 3] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 3); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2032, 2032, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act chain golem ( this is the chain golem considers disarming rule ): [ R_1778 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_31(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_31 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = object ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I451_chain_golem) && ((Adj_99_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1778, 1778); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of the chain golem golem-disarming the chosen target] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I451_chain_golem, ##A108_golem_disarming, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: change the action weight entry to -1000] TableLookUpEntry(ct_0,123,ct_1,1,-1000); ! phrase 4 ! [4: if chosen target is the player begin] if ((((Global_Vars-->37) == player))) { ! phrase 5 ! [5: if the player carries at least one readied weapon begin] if ((Prop_256())) { ! phrase 6 ! [6: let x be a random readied weapon carried by the player] t_0 = (Prop_257()) ; ! phrase 7 ! [7: if x is not part of the player begin] if (((~~((player == (t_0.component_parent)))))) { ! phrase 8 ! [8: increase the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 1000); ! phrase 9 ! [9: if a random chance of 1 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 10 ! [10: increase the action weight entry by 20] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 20); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1778, 1778, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act jumping bomb ( this is the jumping bomb only attacks when highly concentrated rule ): [ R_1797 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_32(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_32 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I454_jumping_bomb) && ((Adj_99_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1797, 1797); ! phrase 1 ! [1: choose row with an option of the action of the bomb attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I454_jumping_bomb, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: if concentration of the jumping bomb is less than 2 begin] if (((GProperty(9, I454_jumping_bomb,p26_concentration) < 2))) { ! phrase 3 ! [3: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if concentration of the jumping bomb is 2 begin] if (((GProperty(9, I454_jumping_bomb,p26_concentration) == 2))) { ! phrase 6 ! [6: decrease the action weight entry by 5] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 5); ! phrase 7 ! [7: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1797, 1797, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-React jumping bomb ( this is the jumping bomb dislikes parrying rule ): [ R_1799 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_33(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_33 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I454_jumping_bomb) && ((Adj_100_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1799, 1799); ! phrase 1 ! [1: choose row with an option of the action of the bomb parrying in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I454_jumping_bomb, ##A89_parrying, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1799, 1799, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act mindslug ( this is the mindslug considers mindblasting rule ): [ R_1839 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_34(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_34 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I463_mindslug) && ((Adj_99_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1839, 1839); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of the mindslug mindblasting the chosen target] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I463_mindslug, ##A111_mindblasting, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: change the action weight entry to 12] TableLookUpEntry(ct_0,123,ct_1,1,12); ! phrase 4 ! [4: if a random chance of 3 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 3) )) { ! phrase 5 ! [5: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1839, 1839, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act mindslug ( this is the mindslug dislikes attacking rule ): [ R_1840 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_35(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_35 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I463_mindslug) && ((Adj_99_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1840, 1840); ! phrase 1 ! [1: choose row with an option of the action of the mindslug attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I463_mindslug, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 3] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 3); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1840, 1840, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-React mindslug ( this is the mindslug doesnt dodge rule ): [ R_1841 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_36(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_36 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I463_mindslug) && ((Adj_100_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1841, 1841); ! phrase 1 ! [1: choose row with an option of the action of the mindslug dodging in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I463_mindslug, ##A90_dodging, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1841, 1841, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act giant tentacle ( this is the tentacle attacks only when not grappling rule ): [ R_1891 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_37(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_37 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I473_giant_tentacle) && ((Adj_99_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1891, 1891); ! phrase 1 ! [1: choose row with an option of the action of the giant tentacle attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I473_giant_tentacle, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: if the giant tentacle grapples the chosen target begin] if (((I473_giant_tentacle == ((Global_Vars-->37).p238_grappling)))) { ! phrase 3 ! [3: decrease the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 1000); ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: increase the action weight entry by 3] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 3); ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1891, 1891, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act giant tentacle ( this is the tentacle considers constricting rule ): [ R_1906 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_38(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_38 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I473_giant_tentacle) && ((Adj_99_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1906, 1906); ! phrase 1 ! [1: if the giant tentacle grapples the chosen target begin] if (((I473_giant_tentacle == ((Global_Vars-->37).p238_grappling)))) { ! phrase 2 ! [2: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 3 ! [3: change the option entry to the action of the giant tentacle tentacle-constricting] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I473_giant_tentacle, ##A113_tentacle_constricting, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: change the action weight entry to 15] TableLookUpEntry(ct_0,123,ct_1,1,15); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1906, 1906, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-React giant tentacle ( this is the tentacle shakes when attacked and grappling rule ): [ R_1909 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_39(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_39 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I473_giant_tentacle) && ((Adj_100_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1909, 1909); ! phrase 1 ! [1: if the giant tentacle grapples the main actor begin] if (((I473_giant_tentacle == ((Global_Vars-->30).p238_grappling)))) { ! phrase 2 ! [2: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 3 ! [3: change the option entry to the action of the the giant tentacle tentacle-shaking] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I473_giant_tentacle, ##A114_tentacle_shaking, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: change the action weight entry to 15 plus 5 times the concentration of the main actor] TableLookUpEntry(ct_0,123,ct_1,1, (15+ (5*GProperty(9, (Global_Vars-->30),p26_concentration)) ) ); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1909, 1909, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-React Nameless Horror ( this is the Nameless Horror does not parry rule ): [ R_1999 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_40(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_40 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I499_nameless_horror) && ((Adj_100_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1999, 1999); ! phrase 1 ! [1: choose row with an option of the action of the nameless horror parrying in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I499_nameless_horror, ##A89_parrying, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 1000); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1999, 1999, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-React Nameless Horror ( this is the Nameless Horror does not dodge rule ): [ R_2000 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_41(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_41 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I499_nameless_horror) && ((Adj_100_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2000, 2000); ! phrase 1 ! [1: choose row with an option of the action of the nameless horror dodging in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I499_nameless_horror, ##A90_dodging, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 1000); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2000, 2000, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the as-witch aswang ( this is the aswang as witch considers hexing rule ): [ R_2027 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_42(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_42 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I513_aswang) && ((Adj_275_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2027, 2027); ! phrase 1 ! [1: if the as-shape of the aswang is as-witch and the chosen target is not hexed begin] if ((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))) && (((~~(((Adj_278_t1_v9((Global_Vars-->37))))))))) { ! phrase 2 ! [2: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 3 ! [3: now the option entry is the action of the aswang aswang-hexing] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I513_aswang, ##A123_aswang_hexing, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: now the action weight entry is 10] TableLookUpEntry(ct_0,123,ct_1,1,10); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2027, 2027, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the as-bird aswang ( this is the aswang as bird considers fleeing rule ): [ R_2033 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_43(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_43 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I513_aswang) && ((Adj_276_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2033, 2033); ! phrase 1 ! [1: if a random chance of 1 in 3 succeeds and health of the aswang is less than 10 begin] if ((( (GenerateRandomNumber(1, 3) <= 1) )) && (((GProperty(9, I513_aswang,p14_health) < 10)))) { ! phrase 2 ! [2: if a random chance of 1 in 2 succeeds or aswang is follower begin] if ((( (GenerateRandomNumber(1, 2) <= 1) )) || ((((Adj_172_t1_v9(I513_aswang)))))) { ! phrase 3 ! [3: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 4 ! [4: change the option entry to the action of the aswang aswang-fleeing] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I513_aswang, ##A124_aswang_fleeing, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 5 ! [5: increase action weight entry by 20] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 20); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2033, 2033, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-Act abyss of the soul ( this is the abyss of the soul pulsates rule ): [ R_2041 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_44(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_44 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I515_abyss_of_the_soul) && ((Adj_99_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2041, 2041); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of the global attacker pulsating] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, (Global_Vars-->41), ##A125_pulsating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: change the action weight entry to 5000] TableLookUpEntry(ct_0,123,ct_1,1,5000); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2041, 2041, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the at-React abyss of the soul ( this is the abyss of the soul does not react rule ): [ R_2042 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_45(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_45 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I515_abyss_of_the_soul) && ((Adj_100_t1_v9(parameter_object))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2042, 2042); ! phrase 1 ! [1: choose row with an option of the action of the abyss of the soul waiting in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I515_abyss_of_the_soul, ##Wait, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: change the action weight entry to 5000] TableLookUpEntry(ct_0,123,ct_1,1,5000); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2042, 2042, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the swarm of daggers ( this is the daggers do not concentrate rule ): [ R_1684 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_46(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_46 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I436_swarm_of_daggers) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1684, 1684); ! phrase 1 ! [1: choose row with an option of the action of the swarm of daggers concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I436_swarm_of_daggers, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1684, 1684, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the swarm of daggers ( this is the daggers must wait if scattered rule ): [ R_1686 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_47(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_47 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I436_swarm_of_daggers) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1686, 1686); ! phrase 1 ! [1: if dagger-scattered is true begin] if (((((Global_Vars-->118) && true) == (1 && true)))) { ! phrase 2 ! [2: choose row with an option of the action of the swarm of daggers waiting in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I436_swarm_of_daggers, ##Wait, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: change the action weight entry to 1000] TableLookUpEntry(ct_0,123,ct_1,1,1000); ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1686, 1686, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the ravenous armadillo ( this is the ravenous armadillo considers eating rule ): [ R_1726 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_48(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_48 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I442_ravenous_armadillo) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1726, 1726); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of the ravenous armadillo armadillo-eating] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I442_ravenous_armadillo, ##A105_armadillo_eating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: change the action weight entry to 0] TableLookUpEntry(ct_0,123,ct_1,1,0); ! phrase 4 ! [4: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 5 ! [5: if there is a good item for the armadillo to eat begin] if (((PHR_1727_r73 ()))) { ! phrase 6 ! [6: increase action weight entry by 12] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 12); ! phrase 7 ! [7: otherwise if a random chance of 1 in 10 succeeds] } else if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 8 ! [8: increase action weight entry by 10] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 10); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1726, 1726, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the chain golem ( this is the chain golem likes to concentrate rule ): [ R_1777 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_49(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_49 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I451_chain_golem) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1777, 1777); ! phrase 1 ! [1: unless a random chance of 1 in 10 succeeds begin] if (~~(( (GenerateRandomNumber(1, 10) <= 1) ))) { ! phrase 2 ! [2: choose row with an option of the action of the chain golem concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I451_chain_golem, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: increase the action weight entry by 15] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 15); ! phrase 4 ! [4: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1777, 1777, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the jumping bomb ( this is the jumping bomb concentration select rule ): [ R_1798 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_50(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_50 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I454_jumping_bomb) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1798, 1798); ! phrase 1 ! [1: choose row with an option of the action of the bomb concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I454_jumping_bomb, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: increase the action weight entry by 5] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 5); ! phrase 3 ! [3: if the jumping bomb is at-react begin] if ((((Adj_100_t1_v9(I454_jumping_bomb))))) { ! phrase 4 ! [4: decrease action weight entry by 500] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 500); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1798, 1798, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for Bodmall ( this is the Bodmall considers fogging rule ): [ R_1953 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_51(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_51 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I488_bodmall) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1953, 1953); ! phrase 1 ! [1: if smoke timer of the location of bodmall is 0 begin] if (((GProperty(9, LocationOf(I488_bodmall) ,p54_smoke_timer) == 0))) { ! phrase 2 ! [2: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 3 ! [3: change the option entry to the action of the bodmall bodmall-fogging] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I488_bodmall, ##A116_bodmall_fogging, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: change the action weight entry to a random number between -5 and 15] TableLookUpEntry(ct_0,123,ct_1,1, R_DecimalNumber(-5, 15) ); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1953, 1953, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for Bodmall ( this is the Bodmall considers transmuting rule ): [ R_1955 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_52(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_52 I7BASPL t_0 ! Local variable e.g. 'X' = object ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I488_bodmall) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1955, 1955); ! phrase 1 ! [1: let x be a random readied weapon enclosed by the chosen target] t_0 = (Prop_258()) ; ! phrase 2 ! [2: if x is iron or x is silver begin] if ((((t_0.p180_material == I166_iron))) || (((t_0.p180_material == I167_silver)))) { ! phrase 3 ! [3: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 4 ! [4: change the option entry to the action of the bodmall bodmall-transmuting] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I488_bodmall, ##A117_bodmall_transmuting, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 5 ! [5: change the action weight entry to a random number between -50 and 20] TableLookUpEntry(ct_0,123,ct_1,1, R_DecimalNumber(-50, 20) ); ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1955, 1955, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for Bodmall ( this is the Bodmall considers barkskinning rule ): [ R_1958 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_53(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_53 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I488_bodmall) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1958, 1958); ! phrase 1 ! [1: if bodmall is not barkskinned begin] if (((~~(((Adj_273_t1_v9(I488_bodmall))))))) { ! phrase 2 ! [2: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 3 ! [3: change the option entry to the action of the bodmall bodmall-barkskinning] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I488_bodmall, ##A118_bodmall_barkskinning, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: change the action weight entry to a random number between -10 and 20] TableLookUpEntry(ct_0,123,ct_1,1, R_DecimalNumber(-10, 20) ); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1958, 1958, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for Bodmall ( this is the Bodmall considers summoning thorns rule ): [ R_1967 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_54(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_54 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I488_bodmall) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1967, 1967); ! phrase 1 ! [1: if thorny bushes are not in the location begin] if (((~~((real_location == ContainerOf(I491_thorny_bushes)))))) { ! phrase 2 ! [2: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 3 ! [3: change the option entry to the action of bodmall bodmall-summoning] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I488_bodmall, ##A119_bodmall_summoning, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: change the action weight entry to a random number between -100 and 35] TableLookUpEntry(ct_0,123,ct_1,1, R_DecimalNumber(-100, 35) ); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1967, 1967, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for Malygris ( this is the consider unghouling rule ): [ R_1984 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_55(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_55 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I493_malygris) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1984, 1984); ! phrase 1 ! [1: if the player form of the player is ghoul and at least two undead persons are in the location begin] if ((((GProperty(9, player,p201_player_form) == I182_ghoul))) && ((Prop_259()))) { ! phrase 2 ! [2: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 3 ! [3: change the option entry to the action of malygris unghouling] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I493_malygris, ##A121_unghouling, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 4 ! [4: change the action weight entry to a random number between 0 and 30] TableLookUpEntry(ct_0,123,ct_1,1, R_DecimalNumber(0, 30) ); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1984, 1984, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the Nameless Horror ( this is the Nameless Horror does not concentrate rule ): [ R_1998 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_56(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_56 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I499_nameless_horror) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1998, 1998); ! phrase 1 ! [1: choose row with an option of the action of the nameless horror concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, I499_nameless_horror, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 1000); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1998, 1998, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the Nameless Horror ( this is the Nameless Horror considers waiting rule ): [ R_2001 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_57(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_57 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I499_nameless_horror) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2001, 2001); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of the nameless horror waiting] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I499_nameless_horror, ##Wait, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: change the action weight entry to 0] TableLookUpEntry(ct_0,123,ct_1,1,0); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2001, 2001, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the rotting corpse ( this is the rotting corpse without a head does not concentrate rule ): [ R_2012 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_58(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_58 I7BASPL t_0 ! Local variable e.g. 'P' = object ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I501_rotting_corpse) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2012, 2012); ! phrase 1 ! [1: let p be the rotting corpse] t_0 = I501_rotting_corpse; ! phrase 2 ! [2: if the rotting head is not part of the rotting corpse begin] if (((~~((I501_rotting_corpse == (I508_rotting_head.component_parent)))))) { ! phrase 3 ! [3: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 4 ! [4: decrease the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 1000); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2012, 2012, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the aswang ( this is the aswang considers shape shifting rule ): [ R_2021 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_59(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_59 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I513_aswang) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2021, 2021); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of the global attacker aswang-shifting] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, (Global_Vars-->41), ##A122_aswang_shifting, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: change the action weight entry to 0] TableLookUpEntry(ct_0,123,ct_1,1,0); ! phrase 4 ! [4: now considered-shape is as-witch] (Global_Vars-->124) = I510_as_witch; ! phrase 5 ! [5: if the as-shape of the aswang is as-witch and the health of the aswang is less than 15 begin] if ((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))) && (((GProperty(9, I513_aswang,p14_health) < 15)))) { ! phrase 6 ! [6: now considered-shape is as-dog] (Global_Vars-->124) = I512_as_dog; ! phrase 7 ! [7: increase action weight entry by 10] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 10); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if the as-shape of the aswang is as-witch and the health of the aswang is less than 7 begin] if ((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))) && (((GProperty(9, I513_aswang,p14_health) < 7)))) { ! phrase 10 ! [10: now considered-shape is as-bird] (Global_Vars-->124) = I511_as_bird; ! phrase 11 ! [11: increase action weight entry by 5] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 5); ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: if the as-shape of the aswang is as-dog and the health of the aswang is less than 7 begin] if ((((GProperty(9, I513_aswang,p242_as_shape) == I512_as_dog))) && (((GProperty(9, I513_aswang,p14_health) < 7)))) { ! phrase 14 ! [14: now considered-shape is as-bird] (Global_Vars-->124) = I511_as_bird; ! phrase 15 ! [15: increase action weight entry by 12] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 12); ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: if the as-shape of the aswang is as-bird and the health of the aswang is greater than 12 begin] if ((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))) && (((GProperty(9, I513_aswang,p14_health) > 12)))) { ! phrase 18 ! [18: now considered-shape is as-witch] (Global_Vars-->124) = I510_as_witch; ! phrase 19 ! [19: increase action weight entry by 10] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 10); ! phrase 20 ! [20: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2021, 2021, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for the imp ( this is the imp considers imping rule ): [ R_2060 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_60(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_60 I7BASPL ct_0 ct_1 ! Used for table searches ; if (((parameter_object == I519_imp) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_2060, 2060); ! phrase 1 ! [1: choose a blank row in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: change the option entry to the action of the imp imping] BlkValueCopy(TableLookUpEntry(ct_0,122,ct_1,5), TryAction(0, I519_imp, ##A126_imping, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); ! phrase 3 ! [3: change the action weight entry to a random number between 0 and 80] TableLookUpEntry(ct_0,123,ct_1,1, R_DecimalNumber(0, 80) ); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2060, 2060, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI action selection rule for an at-Act person ( called P ) ( this is the standard attack select rule ): [ R_1055 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_61(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_61 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_99_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1055, 1055); ! phrase 1 ! [1: choose row with an option of the action of the main actor attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, (Global_Vars-->30), ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: if the normalised chance-to-win is 0 begin] if ((((MStack-->MstVO(421,1)) == 0))) { ! phrase 3 ! [3: now the action weight entry is -100] TableLookUpEntry(ct_0,123,ct_1,1,-100); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: decrease the action weight entry by 5] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 5); ! phrase 6 ! [6: increase the action weight entry by the normalised chance-to-win] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + (MStack-->MstVO(421,1))); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1055, 1055, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI action selection rule for an at-Act person ( called P ) ( this is the concentration influences attacking rule ): [ R_1057 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_62(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_62 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_99_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1057, 1057); ! phrase 1 ! [1: choose row with an option of the action of the main actor attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, (Global_Vars-->30), ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: increase the action weight entry by the concentration of the chosen target] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + GProperty(9, (Global_Vars-->37),p26_concentration)); ! phrase 3 ! [3: if the concentration of the chosen target is 3 begin] if (((GProperty(9, (Global_Vars-->37),p26_concentration) == 3))) { ! phrase 4 ! [4: increase the action weight entry by 2] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 2); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1057, 1057, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI action selection rule for an at-React person ( called P ) ( this is the standard parry and dodge against attack select rule ): [ R_1058 ;blockv_stack-->(blockv_sp+3) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+2) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 4; blockv_stack-->(blockv_sp++) = R_SHELL_63(blockv_sp-4); blockv_sp = blockv_sp - 5; BlkFree(blockv_stack-->(blockv_sp+3)); BlkFree(blockv_stack-->(blockv_sp+2)); BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+4); ]; [ R_SHELL_63 I7BASPL t_0 ! Local variable e.g. 'P' = person t_1 ! Local variable e.g. '?-1,-1?' = object t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_100_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1058, 1058); ! phrase 1 ! [1: if the main actor's action is the attacking action begin] if ((((Global_Vars-->31) == ##Attack))) { ! phrase 2 ! [2: let the attacker's weapon be a random readied weapon enclosed by the main actor] t_1 = (Prop_260()) ; ! phrase 3 ! [3: let the defendant's weapon be a random readied weapon enclosed by p] t_2 = (Prop_261(,t_0)) ; ! phrase 4 ! [4: let dodgability be the dodgability of the attacker's weapon] t_3 = GProperty(OBJECT_TY, t_1,p22_dodgability); ! phrase 5 ! [5: let parry rating be the passive parry max of the attacker's weapon] t_4 = GProperty(OBJECT_TY, t_1,p23_passive_parry_max); ! phrase 6 ! [6: if parry rating is greater than the active parry max of the defendant's weapon begin] if (((t_4 > GProperty(OBJECT_TY, t_2,p24_active_parry_max)))) { ! phrase 7 ! [7: now parry rating is the active parry max of the defendant's weapon] t_4 = GProperty(OBJECT_TY, t_2,p24_active_parry_max); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: choose row with an option of the action of p dodging in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A90_dodging, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 10 ! [10: increase the action weight entry by dodgability] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + t_3); ! phrase 11 ! [11: if parry rating is greater than dodgability begin] if (((t_4 > t_3))) { ! phrase 12 ! [12: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: choose row with an option of the action of p parrying in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+2)), TryAction(0, t_0, ##A89_parrying, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+3)))) )); ! phrase 15 ! [15: increase the action weight entry by parry rating] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + t_4); ! phrase 16 ! [16: if parry rating is 0 begin] if (((t_4 == 0))) { ! phrase 17 ! [17: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: if dodgability is greater than parry rating begin] if (((t_3 > t_4))) { ! phrase 20 ! [20: decrease the action weight entry by 100] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 100); ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1058, 1058, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI action selection rule for an at-Act person ( called P ) ( this is the tension influences attacking rule ): [ R_1073 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_64(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_64 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_99_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1073, 1073); ! phrase 1 ! [1: choose row with an option of the action of p attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: increase the action weight entry by the tension divided by 4] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + (IntegerDivide((Global_Vars-->48),4)) ); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1073, 1073, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An AI action selection rule for an at-Act person ( called P ) ( this is the teleport eagerness rule ): [ R_1181 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_65(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_65 I7BASPL t_0 ! Local variable e.g. 'P' = person t_1 ! Local variable e.g. 'n' = number ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_99_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1181, 1181); ! phrase 1 ! [1: let n be the teleport eagerness of p] t_1 = GProperty(9, t_0,p44_teleport_eagerness); ! phrase 2 ! [2: if a random chance of n in 100 succeeds begin] if (( (GenerateRandomNumber(1, 100) <= t_1) )) { ! phrase 3 ! [3: choose row with an option of the action of p teleporting in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A94_teleporting, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 4 ! [4: increase the action weight entry by 35] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 35); ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1181, 1181, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An AI action selection rule for an at-Act person ( called P ) ( this is the robe of the dead mage discourages attacking rule ): [ R_1514 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_66(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_66 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_99_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1514, 1514); ! phrase 1 ! [1: if chosen target wears the robe of the dead mage begin] if ((((Global_Vars-->37) == WearerOf(I355_robe_of_the_dead_mage)))) { ! phrase 2 ! [2: choose row with an option of the action of p attacking the chosen target in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##Attack, (Global_Vars-->37), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: decrease the action weight entry by the concentration of the chosen target] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - GProperty(9, (Global_Vars-->37),p26_concentration)); ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1514, 1514, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for a stunned person ( called P ) ( this is the do not concentrate when stunned rule ): [ R_1762 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_67(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_67 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person) && ((Adj_43_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1762, 1762); ! phrase 1 ! [1: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: decrease the action weight entry by 1000] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - 1000); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1762, 1762, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) ( this is the standard concentration select rule ): [ R_1056 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_68(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_68 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1056, 1056); ! phrase 1 ! [1: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 2 ! [2: increase the action weight entry by 5] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 5); ! phrase 3 ! [3: decrease the action weight entry by the chance-to-win] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) - (MStack-->MstVO(421,0))); ! phrase 4 ! [4: if the concentration of p is 3 begin] if (((GProperty(9, t_0,p26_concentration) == 3))) { ! phrase 5 ! [5: now the action weight entry is -100] TableLookUpEntry(ct_0,123,ct_1,1,-100); ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1056, 1056, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) ( this is the concentrate to compensate for the suit of plate mail rule ): [ R_1500 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_69(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_69 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1500, 1500); ! phrase 1 ! [1: if the chosen target is wearing the suit of plate mail begin] if ((((Global_Vars-->37) == WearerOf(I351_suit_of_plate_mail)))) { ! phrase 2 ! [2: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: increase the action weight entry by 3] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 3); ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1500, 1500, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) ( this is the concentrate to compensate for the dragon armour rule ): [ R_1522 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_70(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_70 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1522, 1522); ! phrase 1 ! [1: if the chosen target is wearing the suit of dragon armour begin] if ((((Global_Vars-->37) == WearerOf(I358_suit_of_dragon_armour)))) { ! phrase 2 ! [2: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: increase the action weight entry by 4] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + 4); ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1522, 1522, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI action selection rule for a person ( called P ) ( this is the concentrate more if the player has scales rule ): [ R_1747 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_71(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_71 I7BASPL t_0 ! Local variable e.g. 'P' = person ct_0 ct_1 ! Used for table searches ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1747, 1747); ! phrase 1 ! [1: if the chosen target is the player begin] if ((((Global_Vars-->37) == player))) { ! phrase 2 ! [2: choose row with an option of the action of p concentrating in the table of ai action options] ct_0 = T11_ai_action_options; ct_1 = TableRowCorr(ct_0, 122, BlkValueCopy((blockv_stack-->(I7BASPL+0)), TryAction(0, t_0, ##A88_concentrating, 0, 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+1)))) )); ! phrase 3 ! [3: increase the action weight entry by scales number] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + (Global_Vars-->120)); ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1747, 1747, true); rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Last AI action selection rule ( this is the randomise the action result rule ): [ R_877 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through the table of ai action options begin] @push ct_0; @push ct_1; for (t_0=T11_ai_action_options,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: increase the action weight entry by a random number between 0 and 5] TableLookUpEntry(ct_0,123,ct_1,1,TableLookUpEntry(ct_0,123,ct_1) + R_DecimalNumber(0, 5) ); ! phrase 3 ! [3: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Checking the numbers boolean (B423_carry_out_checking_the_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out checking the numbers boolean ( this is the standard checking the numbers boolean rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out checking the numbers boolean ( this is the standard checking the numbers boolean rule ): [ R_950 ; if (actor == player) { if (debug_rules) DB_Rule(R_950, 950); ! phrase 1 ! [1: say ~Combat-related numbers will be [if the numbers boolean is true]displayed[otherwise]hidden[end if].~] say__p=1;ParaContent(); print (PrintText) SC_792; if (~~((((((Global_Vars-->40) && true) == (1 && true)))))) jump L_Say457; ParaContent(); print (PrintText) SC_793; jump L_SayX415; .L_Say457; ParaContent(); print (PrintText) SC_794; .L_Say458; .L_SayX415; ParaContent(); print (PrintText) SC_310; new_line; .L_Say459; .L_SayX416; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_950, 950, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Switching the numbers off (B425_check_switching_the_num) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check switching the numbers off: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Check switching the numbers off: [ R_1064 ; if (actor == player) { if (debug_rules) DB_Rule(R_1064, 1064); ! phrase 1 ! [1: say ~The numerical representation of combat cannot be switched off in this game.~ instead] say__p=1;ParaContent(); print (PrintText) SC_795; new_line; rtrue; .L_Say460; .L_SayX417; rtrue; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1064, 1064, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching the numbers off (B426_carry_out_switching_the) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out switching the numbers off ( this is the standard switching the numbers off rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out switching the numbers off ( this is the standard switching the numbers off rule ): [ R_951 ; if (actor == player) { if (debug_rules) DB_Rule(R_951, 951); ! phrase 1 ! [1: now the numbers boolean is false] (Global_Vars-->40) = 0; ! phrase 2 ! [2: say ~You will no longer see combat-related numbers.~] say__p=1;ParaContent(); print (PrintText) SC_796; new_line; .L_Say461; .L_SayX418; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_951, 951, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching the numbers on (B429_carry_out_switching_the) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out switching the numbers on ( this is the standard switching the numbers on rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out switching the numbers on ( this is the standard switching the numbers on rule ): [ R_952 ; if (actor == player) { if (debug_rules) DB_Rule(R_952, 952); ! phrase 1 ! [1: now the numbers boolean is true] (Global_Vars-->40) = 1; ! phrase 2 ! [2: say ~You will now see combat-related numbers.~] say__p=1;ParaContent(); print (PrintText) SC_797; new_line; .L_Say462; .L_SayX419; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_952, 952, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after reporting (B431_after_reporting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! After reporting an actor hitting ( this is the consider the aftereffects rules rule ): ! === which is equally specific with === ! Rule 2/2 ! After reporting an actor dodging ( this is the thorns hurt the dodger rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! After reporting an actor hitting ( this is the consider the aftereffects rules rule ): [ R_988 ; if ((action ==##A86_hitting) && (act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_988, 988); ! phrase 1 ! [1: if the player is alive begin] if ((((Adj_33_t1_v9(player))))) { ! phrase 2 ! [2: consider the aftereffects rules] ProcessRulebook(439); ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_988, 988, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! After reporting an actor dodging ( this is the thorns hurt the dodger rule ): [ R_1965 t_0 ! Local variable e.g. '?-1,-1?' = number ; if ((action ==##A90_dodging) && (act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1965, 1965); ! phrase 1 ! [1: if the thorny bushes are in the location begin] if (((real_location == ContainerOf(I491_thorny_bushes)))) { ! phrase 2 ! [2: unless the actor is flying begin] if (~~(((PHR_1166_r51 (actor))))) { ! phrase 3 ! [3: unless the actor is bodmall begin] if (~~(((actor == I488_bodmall)))) { ! phrase 4 ! [4: unless the actor is the player and the power of bodmall is granted begin] if (~~((((actor == player))) && ((((Adj_158_t1_v9(I492_power_of_bodmall))))))) { ! phrase 5 ! [5: let n be 1] t_0 = 1; ! phrase 6 ! [6: calculate the pdr for the actor] (PHR_1260_r62 (actor)); ! phrase 7 ! [7: decrease n by pdr] t_0 = t_0 - (Global_Vars-->87); ! phrase 8 ! [8: if n is less than 0 , now n is 0] if (((t_0 < 0))) { t_0 = 0; } ! phrase 9 ! [9: unless n is 0 begin] if (~~(((t_0 == 0)))) { ! phrase 10 ! [10: say ~Dodging is dangerous with so many thorns around; the bushes deal [bold type]1 damage[roman type] to [the actor].~] say__p=1;ParaContent(); print (PrintText) SC_798; ParaContent(); style bold; ParaContent(); print (PrintText) SC_799; ParaContent(); style roman; ParaContent(); print (PrintText) SC_443; ParaContent(); print (the) actor; ParaContent(); print (PrintText) SC_310; new_line; .L_Say463; .L_SayX420; ! phrase 11 ! [11: decrease the health of the actor by 1] WriteGProperty(9, actor,p14_health,GProperty(9, actor,p14_health) - 1); ! phrase 12 ! [12: unless the actor is alive begin] if (~~((((Adj_33_t1_v9(actor)))))) { ! phrase 13 ! [13: if the actor is the player begin] if (((actor == player))) { ! phrase 14 ! [14: say ~Your weakened body could not handle this!~] say__p=1;ParaContent(); print (PrintText) SC_699; new_line; .L_Say464; .L_SayX421; ! phrase 15 ! [15: end the game saying ~A thorn kills a man, not by force, but by continuously pricking.~] deadflag=SC_800; story_complete=false; ! phrase 16 ! [16: rule fails] RulebookFails(); rtrue; ! phrase 17 ! [17: otherwise] } else { ! phrase 18 ! [18: say ~[The name of the actor] is killed by the thorns!~] say__p=1;ParaContent(); (PHR_830_r63 (actor));ParaContent(); print (PrintText) SC_701; new_line; .L_Say465; .L_SayX422; ! phrase 19 ! [19: rule fails] RulebookFails(); rtrue; ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: end unless] } ! phrase 22 ! [22: end unless] } ! phrase 23 ! [23: end unless] } ! phrase 24 ! [24: end unless] } ! phrase 25 ! [25: end unless] } ! phrase 26 ! [26: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1965, 1965, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Hitting (B432_check_hitting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor hitting when the location is Hall of Mirrors ( this is the sometimes attack a mirror image in Hall of Mirrors rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/2 ! Check an actor hitting ( this is the stop hitting if the target has teleported rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Check an actor hitting when the location is Hall of Mirrors ( this is the sometimes attack a mirror image in Hall of Mirrors rule ): [ R_1549 ; if ((act_requester==nothing) && (self=actor,true) && (((real_location == I378_hall_of_mirrors)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1549, 1549); ! phrase 1 ! [1: unless the global attacker is blind begin] if (~~(((PHR_1169_r17 ((Global_Vars-->41)))))) { ! phrase 2 ! [2: unless the global attacker grapples the global defender begin] if (~~((((Global_Vars-->41) == ((Global_Vars-->42).p238_grappling))))) { ! phrase 3 ! [3: unless the global defender grapples the global attacker begin] if (~~((((Global_Vars-->42) == ((Global_Vars-->41).p238_grappling))))) { ! phrase 4 ! [4: test the perception of global attacker against 10] (PHR_1134_r60 ((Global_Vars-->41),10)); ! phrase 5 ! [5: if test result is false begin] if (((((Global_Vars-->78) && true) == (0 && true)))) { ! phrase 6 ! [6: say ~ Confused by the mirrors, [if global attacker is the player]you start[otherwise][the global attacker] starts[end if] attacking a reflection before realising [if global attacker is the player]your[otherwise]its[end if] mistake.~] say__p=1;ParaContent(); print (PrintText) SC_801; if (~~(((((Global_Vars-->41) == player))))) jump L_Say466; ParaContent(); print (PrintText) SC_802; jump L_SayX423; .L_Say466; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_803; .L_Say467; .L_SayX423; ParaContent(); print (PrintText) SC_804; if (~~(((((Global_Vars-->41) == player))))) jump L_Say468; ParaContent(); print (PrintText) SC_805; jump L_SayX424; .L_Say468; ParaContent(); print (PrintText) SC_806; .L_Say469; .L_SayX424; ParaContent(); print (PrintText) SC_807; new_line; .L_Say470; .L_SayX425; ! phrase 7 ! [7: if the concentration of the global attacker is greater than 1 begin] if (((GProperty(9, (Global_Vars-->41),p26_concentration) > 1))) { ! phrase 8 ! [8: now the concentration of the global attacker is 1] WriteGProperty(9, (Global_Vars-->41),p26_concentration,1); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: rule fails] RulebookFails(); rtrue; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~ Seeing through the illusion created by the mirrors, [if global attacker is the player]you attack[otherwise][the global attacker] attacks[end if] the real [if global defender is not the player][global defender][otherwise]you[end if].~] say__p=1;ParaContent(); print (PrintText) SC_808; if (~~(((((Global_Vars-->41) == player))))) jump L_Say471; ParaContent(); print (PrintText) SC_809; jump L_SayX426; .L_Say471; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_810; .L_Say472; .L_SayX426; ParaContent(); print (PrintText) SC_811; if (~~((((~~(((Global_Vars-->42) == player))))))) jump L_Say473; ParaContent(); print (PrintShortName) (Global_Vars-->42); jump L_SayX427; .L_Say473; ParaContent(); print (PrintText) SC_284; .L_Say474; .L_SayX427; ParaContent(); print (PrintText) SC_310; new_line; .L_Say475; .L_SayX428; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end unless] } ! phrase 15 ! [15: end unless] } ! phrase 16 ! [16: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1549, 1549, true); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Check an actor hitting ( this is the stop hitting if the target has teleported rule ): [ R_1066 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1066, 1066); ! phrase 1 ! [1: unless the location of the actor is the location of the noun begin] if (~~((( LocationOf(actor) == LocationOf(noun) )))) { ! phrase 2 ! [2: stop the action] rtrue; ! phrase 3 ! [3: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1066, 1066, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Hitting (B433_carry_out_hitting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! First carry out a hidden pc hitting ( this is the set up from the shadows I come rule ): ! --- now the mid-placed rules --- ! Rule 2/6 ! Carry out an actor hitting ( this is the consider the attack modifier rules rule ): ! === which is equally specific with === ! Rule 3/6 ! Carry out an actor hitting ( this is the abide by the contact rules rule ): ! === which is equally specific with === ! Rule 4/6 ! Carry out an actor hitting ( this is the consider the damage modifier rules rule ): ! === which is equally specific with === ! Rule 5/6 ! Carry out an actor hitting ( this is the consider the damage multiplier rules rule ): ! === which is equally specific with === ! Rule 6/6 ! Carry out an actor hitting ( this is the subtract damage from health rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! First carry out a hidden pc hitting ( this is the set up from the shadows I come rule ): [ R_2165 ; if ( (actor~=player) && (act_requester==nothing) && (((Adj_221_t1_v9(actor))) && ((Adj_35_t1_v9(actor))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2165, 2165); ! phrase 1 ! [1: if health of the global defender is not less than permanent health of the global defender begin] if (((~~((GProperty(9, (Global_Vars-->42),p14_health) < GProperty(9, (Global_Vars-->42),p17_permanent_health)))))) { ! phrase 2 ! [2: now from-the-shadows boolean is true] (Global_Vars-->133) = 1; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2165, 2165, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor hitting ( this is the consider the attack modifier rules rule ): [ R_973 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_973, 973); ! phrase 1 ! [1: consider the attack modifier rules] ProcessRulebook(435); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_973, 973, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor hitting ( this is the abide by the contact rules rule ): [ R_977 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_977, 977); ! phrase 1 ! [1: abide by the contact rules] if (ProcessRulebook(436)) rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_977, 977, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor hitting ( this is the consider the damage modifier rules rule ): [ R_979 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_979, 979); ! phrase 1 ! [1: consider the damage modifier rules] ProcessRulebook(437); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_979, 979, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor hitting ( this is the consider the damage multiplier rules rule ): [ R_981 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_981, 981); ! phrase 1 ! [1: consider the damage multiplier rules] ProcessRulebook(438); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_981, 981, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor hitting ( this is the subtract damage from health rule ): [ R_984 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_984, 984); ! phrase 1 ! [1: decrease the health of the global defender by the attack damage] WriteGProperty(9, (Global_Vars-->42),p14_health,GProperty(9, (Global_Vars-->42),p14_health) - (Global_Vars-->46)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_984, 984, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Hitting (B434_report_hitting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/41 ! Report an actor hitting the dead swarm of daggers: ! === which is equally specific with === ! Rule 2/41 ! Report an actor hitting the dead blood ape: ! === which is equally specific with === ! Rule 3/41 ! Report an actor hitting the dead ravenous armadillo: ! === which is equally specific with === ! Rule 4/41 ! Report an actor hitting the dead Miranda: ! === which is equally specific with === ! Rule 5/41 ! Report an actor hitting the dead chain golem: ! === which is equally specific with === ! Rule 6/41 ! Report an actor hitting the dead jumping bomb: ! === which is equally specific with === ! Rule 7/41 ! Report an actor hitting the dead Reaper: ! === which is equally specific with === ! Rule 8/41 ! Report an actor hitting the dead mindslug: ! === which is equally specific with === ! Rule 9/41 ! Report an actor hitting the dead Fafhrd: ! === which is equally specific with === ! Rule 10/41 ! Report an actor hitting the dead Mouser: ! === which is equally specific with === ! Rule 11/41 ! Report an actor hitting the dead giant tentacle: ! === which is equally specific with === ! Rule 12/41 ! Report an actor hitting the dead healer of Aite: ! === which is equally specific with === ! Rule 13/41 ! Report an actor hitting the dead tormentor of Aite: ! === which is equally specific with === ! Rule 14/41 ! Report an actor hitting the dead defender of Aite: ! === which is equally specific with === ! Rule 15/41 ! Report an actor hitting the dead Bodmall: ! === which is equally specific with === ! Rule 16/41 ! Report an actor hitting the dead demonic assassin: ! === which is equally specific with === ! Rule 17/41 ! Report an actor hitting the dead rotting corpse: ! === which is equally specific with === ! Rule 18/41 ! Report an actor hitting the dead aswang: ! === which is equally specific with === ! Rule 19/41 ! Report an actor hitting the dead abyss of the soul: ! === which is equally specific with === ! Rule 20/41 ! Report an actor hitting the dead smoke demon: ! === which is equally specific with === ! Rule 21/41 ! Report an actor hitting the dead imp: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 22/41 ! Report the swarm of daggers hitting a dead pc: ! === which is equally specific with === ! Rule 23/41 ! Report the blood ape hitting a dead pc: ! === which is equally specific with === ! Rule 24/41 ! Report the ravenous armadillo hitting a dead pc: ! === which is equally specific with === ! Rule 25/41 ! Report Miranda hitting a dead pc: ! === which is equally specific with === ! Rule 26/41 ! Report the chain golem hitting a dead pc: ! === which is equally specific with === ! Rule 27/41 ! Report the Reaper hitting a dead pc: ! === which is equally specific with === ! Rule 28/41 ! Report the mindslug hitting a dead pc: ! === which is equally specific with === ! Rule 29/41 ! Report Fafhrd hitting a dead pc: ! === which is equally specific with === ! Rule 30/41 ! Report Mouser hitting a dead pc: ! === which is equally specific with === ! Rule 31/41 ! Report the giant tentacle hitting a dead pc: ! === which is equally specific with === ! Rule 32/41 ! Report the healer of Aite hitting a dead pc: ! === which is equally specific with === ! Rule 33/41 ! Report the tormentor of Aite hitting a dead pc: ! === which is equally specific with === ! Rule 34/41 ! Report the defender of Aite hitting a dead pc: ! === which is equally specific with === ! Rule 35/41 ! Report Bodmall hitting a dead pc: ! === which is equally specific with === ! Rule 36/41 ! Report the demonic assassin hitting a dead pc: ! === which is equally specific with === ! Rule 37/41 ! Report the corpse hitting a dead pc: ! === which is equally specific with === ! Rule 38/41 ! Report the aswang hitting a dead pc: ! === which is equally specific with === ! Rule 39/41 ! Report the smoke demon hitting a dead pc: ! === which is equally specific with === ! Rule 40/41 ! Report the imp hitting a dead pc: ! >>> III.3.3 - Action/What/Actor Performing Action >>> ! Rule 41/41 ! Report the player hitting a dead pc ( this is the report player suicide rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead swarm of daggers: [ R_1688 ; if ((act_requester==nothing) && ((noun == I436_swarm_of_daggers) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1688, 1688); ! phrase 1 ! [1: say ~All life suddenly goes out of the daggers. For a moment they hang still in the air, but then the planet below pulls them inexorably downwards.~] say__p=1;ParaContent(); print (PrintText) SC_812; new_line; .L_Say476; .L_SayX429; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1688, 1688, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead blood ape: [ R_1705 ; if ((act_requester==nothing) && ((noun == I439_blood_ape) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1705, 1705); ! phrase 1 ! [1: say ~[if the blood ape is small or the blood ape is medium]The blood ape topples over with a small grunt[otherwise]The blood ape crashes down with a huge smack[end if].~] say__p=1; if (~~((((((Adj_153_t1_v9(I439_blood_ape))))) || ((((Adj_154_t1_v9(I439_blood_ape)))))))) jump L_Say477; ParaContent(); print (PrintText) SC_813; jump L_SayX430; .L_Say477; ParaContent(); print (PrintText) SC_814; .L_Say478; .L_SayX430; ParaContent(); print (PrintText) SC_310; new_line; .L_Say479; .L_SayX431; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1705, 1705, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead ravenous armadillo: [ R_1720 ; if ((act_requester==nothing) && ((noun == I442_ravenous_armadillo) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1720, 1720); ! phrase 1 ! [1: say ~As the armadillo dies, its body splits open, revealing [if at least one thing is in the armadillo stomach][a list of things in the armadillo stomach][otherwise]nothing at all[end if].~] say__p=1;ParaContent(); print (PrintText) SC_815; if (~~(((Prop_262())))) jump L_Say480; ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && (I444_armadillo_stomach == ContainerOf(subst__v)))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT); @pull subst__v; jump L_SayX432; .L_Say480; ParaContent(); print (PrintText) SC_816; .L_Say481; .L_SayX432; ParaContent(); print (PrintText) SC_310; new_line; .L_Say482; .L_SayX433; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1720, 1720, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead Miranda: [ R_1764 ; if ((act_requester==nothing) && ((noun == I446_miranda) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1764, 1764); ! phrase 1 ! [1: say ~'But... my adventure was only just beginning!' cries Miranda.~] say__p=1;ParaContent(); print (PrintText) SC_817; new_line; .L_Say483; .L_SayX434; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1764, 1764, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead chain golem: [ R_1780 ; if ((act_requester==nothing) && ((noun == I451_chain_golem) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1780, 1780); ! phrase 1 ! [1: say ~The chains lash out one final time, blindly seeking prey -- but fall down limply before they can hit anyone. With thousands of hard metal clicks they start falling asunder.~] say__p=1;ParaContent(); print (PrintText) SC_818; new_line; .L_Say484; .L_SayX435; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1780, 1780, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead jumping bomb: [ R_1804 ; if ((act_requester==nothing) && ((noun == I454_jumping_bomb) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1804, 1804); ! phrase 1 ! [1: say ~As the last of its blood flows out of the jumping bomb, it goes limp and falls to the floor like a punctured balloon.~] say__p=1;ParaContent(); print (PrintText) SC_819; new_line; .L_Say485; .L_SayX436; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1804, 1804, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead Reaper: [ R_1819 ; if ((act_requester==nothing) && ((noun == I457_reaper) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1819, 1819); ! phrase 1 ! [1: say ~'This -- but this is impossible! Death is me!' the Reaper shouts as the bony hands of disillusion pull him to the underworld.~] say__p=1;ParaContent(); print (PrintText) SC_820; new_line; .L_Say486; .L_SayX437; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1819, 1819, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead mindslug: [ R_1844 ; if ((act_requester==nothing) && ((noun == I463_mindslug) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1844, 1844); ! phrase 1 ! [1: say ~A mental oppression falls from your mind as the mindslug succumbs to its injuries, its evil intelligence snuffed.~] say__p=1;ParaContent(); print (PrintText) SC_821; new_line; .L_Say487; .L_SayX438; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1844, 1844, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead Fafhrd: [ R_1857 ; if ((act_requester==nothing) && ((noun == I466_fafhrd) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1857, 1857); ! phrase 1 ! [1: say ~Cursing his fate, Fafhrd falls down[if Mouser is alive and the faction of Mouser is not enslaved and Mouser is in the location]. 'Fafhrd!' screams Mouser[do the mouser rage][end if].~] say__p=1;ParaContent(); print (PrintText) SC_822; if (~~((((((Adj_33_t1_v9(I469_mouser))))) && ((((~~((GProperty(9, I469_mouser,p111_faction) == I465_enslaved))))) && (((real_location == ContainerOf(I469_mouser)))))))) jump L_Say488; ParaContent(); print (PrintText) SC_823; ParaContent(); (PHR_1858_r74 ()); .L_Say488; .L_SayX439; ParaContent(); print (PrintText) SC_310; new_line; .L_Say489; .L_SayX440; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1857, 1857, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead Mouser: [ R_1863 ; if ((act_requester==nothing) && ((noun == I469_mouser) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1863, 1863); ! phrase 1 ! [1: say ~Mouser staggers backwards, mortally wounded. He tries to say something, but no sound ever passes his lips again[if Fafhrd is alive and the faction of Fafhrd is not enslaved and Fafhrd is in the location]. 'Vengeance!' screams Fafhrd[do the fafhrd rage][end if].~] say__p=1;ParaContent(); print (PrintText) SC_824; if (~~((((((Adj_33_t1_v9(I466_fafhrd))))) && ((((~~((GProperty(9, I466_fafhrd,p111_faction) == I465_enslaved))))) && (((real_location == ContainerOf(I466_fafhrd)))))))) jump L_Say490; ParaContent(); print (PrintText) SC_825; ParaContent(); (PHR_1864_r75 ()); .L_Say490; .L_SayX441; ParaContent(); print (PrintText) SC_310; new_line; .L_Say491; .L_SayX442; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1863, 1863, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead giant tentacle: [ R_1915 ; if ((act_requester==nothing) && ((noun == I473_giant_tentacle) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1915, 1915); ! phrase 1 ! [1: say ~The giant tentacle crashes down, never to rise again.~] say__p=1;ParaContent(); print (PrintText) SC_826; new_line; .L_Say492; .L_SayX443; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1915, 1915, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead healer of Aite: [ R_1928 ; if ((act_requester==nothing) && ((noun == I478_healer_of_aite) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1928, 1928); ! phrase 1 ! [1: say ~The healer stares in disbelief at his fatal wounds before he topples over.~] say__p=1;ParaContent(); print (PrintText) SC_827; new_line; .L_Say493; .L_SayX444; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1928, 1928, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead tormentor of Aite: [ R_1933 ; if ((act_requester==nothing) && ((noun == I481_tormentor_of_aite) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1933, 1933); ! phrase 1 ! [1: say ~The tormentor cries in pain and rage as her body's vital functions fail.~] say__p=1;ParaContent(); print (PrintText) SC_828; new_line; .L_Say494; .L_SayX445; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1933, 1933, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead defender of Aite: [ R_1938 ; if ((act_requester==nothing) && ((noun == I484_defender_of_aite) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1938, 1938); ! phrase 1 ! [1: say ~The defender falls to the ground with a smash, never to stand up again.~] say__p=1;ParaContent(); print (PrintText) SC_829; new_line; .L_Say495; .L_SayX446; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1938, 1938, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead Bodmall: [ R_1969 ; if ((act_requester==nothing) && ((noun == I488_bodmall) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1969, 1969); ! phrase 1 ! [1: say ~'I will haunt you come Samhain!', whispers Bodmall as her body returns to the earth.~] say__p=1;ParaContent(); print (PrintText) SC_830; new_line; .L_Say496; .L_SayX447; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1969, 1969, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead demonic assassin: [ R_1988 ; if ((act_requester==nothing) && ((noun == I496_demonic_assassin) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1988, 1988); ! phrase 1 ! [1: say ~With a thunderous explosion, the demonic assassin is pulled back to Hell.~] say__p=1;ParaContent(); print (PrintText) SC_831; new_line; .L_Say497; .L_SayX448; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1988, 1988, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead rotting corpse: [ R_2016 ; if ((act_requester==nothing) && ((noun == I501_rotting_corpse) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2016, 2016); ! phrase 1 ! [1: say ~The rotting corpse disintegrates slimily.~] say__p=1;ParaContent(); print (PrintText) SC_832; new_line; .L_Say498; .L_SayX449; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2016, 2016, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead aswang: [ R_2037 ; if ((act_requester==nothing) && ((noun == I513_aswang) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2037, 2037); ! phrase 1 ! [1: say ~The aswang [if as-shape of aswang is as-witch]dies screaming[otherwise if as-shape of aswang is as-bird]dies screeching[otherwise]dies howling[end if].~] say__p=1;ParaContent(); print (PrintText) SC_833; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))))) jump L_Say499; ParaContent(); print (PrintText) SC_834; ParaContent(); jump L_SayX450; .L_Say499; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))))) jump L_Say500; ParaContent(); print (PrintText) SC_835; jump L_SayX450; .L_Say500; ParaContent(); print (PrintText) SC_836; .L_Say501; .L_SayX450; ParaContent(); print (PrintText) SC_310; new_line; .L_Say502; .L_SayX451; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2037, 2037, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead abyss of the soul: [ R_2046 ; if ((act_requester==nothing) && ((noun == I515_abyss_of_the_soul) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2046, 2046); ! phrase 1 ! [1: say ~The abyss of the soul collapses in on itself and disappears with a soft 'plop'.~] say__p=1;ParaContent(); print (PrintText) SC_837; new_line; .L_Say503; .L_SayX452; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2046, 2046, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead smoke demon: [ R_2052 ; if ((act_requester==nothing) && ((noun == I517_smoke_demon) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2052, 2052); ! phrase 1 ! [1: say ~The smoke demon drifts apart[if the smoke timer of the location is greater than 0]. Though there are still clouds of smoke here, they no longer seem to be sentient[end if].~] say__p=1;ParaContent(); print (PrintText) SC_838; if (~~((((GProperty(OBJECT_TY, real_location,p54_smoke_timer) > 0))))) jump L_Say504; ParaContent(); print (PrintText) SC_839; .L_Say504; .L_SayX453; ParaContent(); print (PrintText) SC_310; new_line; .L_Say505; .L_SayX454; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2052, 2052, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report an actor hitting the dead imp: [ R_2065 ; if ((act_requester==nothing) && ((noun == I519_imp) && ((~~Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2065, 2065); ! phrase 1 ! [1: say ~The imp dies with a sad screech.~] say__p=1;ParaContent(); print (PrintText) SC_840; new_line; .L_Say506; .L_SayX455; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2065, 2065, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the swarm of daggers hitting a dead pc: [ R_1689 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I436_swarm_of_daggers) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1689, 1689); ! phrase 1 ! [1: say ~You desperately attempt to fend off the flying daggers, but there are too many of them. One by one the daggers sink into your flesh, and your soul flees through a thousand mouths.~] say__p=1;ParaContent(); print (PrintText) SC_841; new_line; .L_Say507; .L_SayX456; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1689, 1689, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the blood ape hitting a dead pc: [ R_1706 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I439_blood_ape) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1706, 1706); ! phrase 1 ! [1: say ~The blood ape pounds you into a pulp with its fists, then feasts on your body.~] say__p=1;ParaContent(); print (PrintText) SC_842; new_line; .L_Say508; .L_SayX457; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1706, 1706, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the ravenous armadillo hitting a dead pc: [ R_1721 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I442_ravenous_armadillo) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1721, 1721); ! phrase 1 ! [1: say ~The ravenous armadillo smashes your head in with its tail club.~] say__p=1;ParaContent(); print (PrintText) SC_843; new_line; .L_Say509; .L_SayX458; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1721, 1721, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Miranda hitting a dead pc: [ R_1765 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I446_miranda) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1765, 1765); ! phrase 1 ! [1: say ~Miranda dances on your corpse. 'This is my first step towards fame!'~] say__p=1;ParaContent(); print (PrintText) SC_844; new_line; .L_Say510; .L_SayX459; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1765, 1765, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the chain golem hitting a dead pc: [ R_1781 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I451_chain_golem) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1781, 1781); ! phrase 1 ! [1: say ~Smashed by the chains, your broken body is slowly dragged towards the core of the golem -- where an unmentionable fate awaits it.~] say__p=1;ParaContent(); print (PrintText) SC_845; new_line; .L_Say511; .L_SayX460; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1781, 1781, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the Reaper hitting a dead pc: [ R_1820 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I457_reaper) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1820, 1820); ! phrase 1 ! [1: say ~'Now go to sleep, my child,' says the Reaper. 'You have suffered enough.'~] say__p=1;ParaContent(); print (PrintText) SC_846; new_line; .L_Say512; .L_SayX461; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1820, 1820, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the mindslug hitting a dead pc: [ R_1845 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I463_mindslug) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1845, 1845); ! phrase 1 ! [1: say ~The mindslug crashes on top of you, burying your body under tons of oozing gastropod flesh.~] say__p=1;ParaContent(); print (PrintText) SC_847; new_line; .L_Say513; .L_SayX462; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1845, 1845, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Fafhrd hitting a dead pc: [ R_1859 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I466_fafhrd) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1859, 1859); ! phrase 1 ! [1: say ~The contemplative northern barbarian ends your life, with what seems to be a hint of sadness in his face.~] say__p=1;ParaContent(); print (PrintText) SC_848; new_line; .L_Say514; .L_SayX463; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1859, 1859, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Mouser hitting a dead pc: [ R_1865 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I469_mouser) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1865, 1865); ! phrase 1 ! [1: say ~As you fall down, Mouser shrugs somewhat apologetically.~] say__p=1;ParaContent(); print (PrintText) SC_849; new_line; .L_Say515; .L_SayX464; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1865, 1865, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the giant tentacle hitting a dead pc: [ R_1916 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I473_giant_tentacle) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1916, 1916); ! phrase 1 ! [1: say ~Even though Tooloo was slain in times immemorial, his appendages still claim victims today.~] say__p=1;ParaContent(); print (PrintText) SC_850; new_line; .L_Say516; .L_SayX465; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1916, 1916, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the healer of Aite hitting a dead pc: [ R_1929 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I478_healer_of_aite) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1929, 1929); ! phrase 1 ! [1: say ~'Aite be praised!' These are the last words you hear as the healer's sword penetrates your heart.~] say__p=1;ParaContent(); print (PrintText) SC_851; new_line; .L_Say517; .L_SayX466; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1929, 1929, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the tormentor of Aite hitting a dead pc: [ R_1934 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I481_tormentor_of_aite) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1934, 1934); ! phrase 1 ! [1: say ~'Aite be praised!' These are the last words you hear as magical pain racks your body.~] say__p=1;ParaContent(); print (PrintText) SC_852; new_line; .L_Say518; .L_SayX467; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1934, 1934, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the defender of Aite hitting a dead pc: [ R_1939 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I484_defender_of_aite) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1939, 1939); ! phrase 1 ! [1: say ~'Aite be praised!' These are the last words you hear as the defender hacks you apart.~] say__p=1;ParaContent(); print (PrintText) SC_853; new_line; .L_Say519; .L_SayX468; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1939, 1939, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Bodmall hitting a dead pc: [ R_1970 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I488_bodmall) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1970, 1970); ! phrase 1 ! [1: if the player is undead begin] if (((player.p111_faction == I158_undead))) { ! phrase 2 ! [2: say ~Bodmall kneels over your corpse. 'The undead are a blight on this world, and they will be destroyed,' she says.~] say__p=1;ParaContent(); print (PrintText) SC_854; new_line; .L_Say520; .L_SayX469; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~Bodmall kneels over your corpse. 'Death is but a stage in the cycle of Nature,' she says.~] say__p=1;ParaContent(); print (PrintText) SC_855; new_line; .L_Say521; .L_SayX470; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1970, 1970, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the demonic assassin hitting a dead pc: [ R_1989 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I496_demonic_assassin) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1989, 1989); ! phrase 1 ! [1: say ~The assassin's laugh as you fall down is the most evil thing you have ever heard. It is also the last.~] say__p=1;ParaContent(); print (PrintText) SC_856; new_line; .L_Say522; .L_SayX471; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1989, 1989, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the corpse hitting a dead pc: [ R_2017 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I501_rotting_corpse) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2017, 2017); ! phrase 1 ! [1: say ~Your last sensation is the rotting corpse falling on top of you and oozing its way into your nostrils.~] say__p=1;ParaContent(); print (PrintText) SC_857; new_line; .L_Say523; .L_SayX472; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2017, 2017, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the aswang hitting a dead pc: [ R_2038 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I513_aswang) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2038, 2038); ! phrase 1 ! [1: say ~You are torn apart by the [if as-shape of aswang is as-witch]witch[otherwise if as-shape of aswang is as-bird]bird[otherwise]hound[end if].~] say__p=1;ParaContent(); print (PrintText) SC_858; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))))) jump L_Say524; ParaContent(); print (PrintText) SC_859; ParaContent(); jump L_SayX473; .L_Say524; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))))) jump L_Say525; ParaContent(); print (PrintText) SC_860; jump L_SayX473; .L_Say525; ParaContent(); print (PrintText) SC_861; .L_Say526; .L_SayX473; ParaContent(); print (PrintText) SC_310; new_line; .L_Say527; .L_SayX474; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2038, 2038, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the smoke demon hitting a dead pc: [ R_2053 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I517_smoke_demon) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2053, 2053); ! phrase 1 ! [1: say ~You attempt to breathe, but your lungs are only filled with smoke and more smoke. The murderous vapours seem to become as thick as wool as you desperately try to exhale, inhale, anything -- all in vain. As you suffocate, tendrils of smoke softly close your eyelids.~] say__p=1;ParaContent(); print (PrintText) SC_862; new_line; .L_Say528; .L_SayX475; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2053, 2053, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the imp hitting a dead pc: [ R_2066 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I519_imp) && (true)) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2066, 2066); ! phrase 1 ! [1: say ~The imp's claws open your jugular vein, and hot blood spurts all around.~] say__p=1;ParaContent(); print (PrintText) SC_863; new_line; .L_Say529; .L_SayX476; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2066, 2066, true); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Report the player hitting a dead pc ( this is the report player suicide rule ): [ R_1062 ; if ( (actor==player) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1062, 1062); ! phrase 1 ! [1: say ~Your attack ends your own life.~] say__p=1;ParaContent(); print (PrintText) SC_864; new_line; .L_Say530; .L_SayX477; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1062, 1062, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: attack modifier (B435_attack_modifier) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/58 ! First attack modifier rule: ! === which is equally specific with === ! Rule 2/58 ! First attack modifier rule: ! === which is equally specific with === ! Rule 3/58 ! An attack modifier rule ( this is the alternative attack roll rule ): ! --- now the mid-placed rules --- ! Rule 4/58 ! An attack modifier rule when the global attacker is a ghoul pc ( this is the ghoul has less chance to hit rule ): ! === which is equally specific with === ! Rule 5/58 ! An attack modifier rule when the global attacker is a vampire pc ( this is the vampire has more chance to hit rule ): ! === which is equally specific with === ! Rule 6/58 ! An attack modifier rule when the global defender is a vampire pc ( this is the vampire has more chance to be hit rule ): ! === which is equally specific with === ! Rule 7/58 ! An attack modifier rule when the global defender is a vampire bat pc ( this is the vampire bat has less chance to be hit rule ): ! === which is equally specific with === ! Rule 8/58 ! An attack modifier rule when the global attacker is a vampire bat pc ( this is the vampire bat has less chance to hit rule ): ! === which is equally specific with === ! Rule 9/58 ! An attack modifier rule when the global defender is a runner pc ( this is the running is risky rule ): ! >>> II - When/while requirement >>> ! Rule 10/58 ! An attack modifier rule when the global defender is at parry ( this is the parry defence bonus rule ): ! === which is equally specific with === ! Rule 11/58 ! An attack modifier rule when the global defender is at dodge ( this is the dodge defence bonus rule ): ! === which is equally specific with === ! Rule 12/58 ! An attack modifier rule when the global defender is risky ( this is the defender is doing something risky rule ): ! === which is equally specific with === ! Rule 13/58 ! An attack modifier rule when the global attacker is rusted ( this is the rusted monster decreases attack rule ): ! === which is equally specific with === ! Rule 14/58 ! An attack modifier rule when the global attacker is hidden ( this is the hidden gives a small attack bonus rule ): ! === which is equally specific with === ! Rule 15/58 ! An attack modifier rule when the attacker is affected by smoke ( this is the thick smoke makes attacking a little harder rule ): ! === which is equally specific with === ! Rule 16/58 ! An attack modifier rule when the attacker is affected by smoke ( this is the running is less risky with smoke rule ): ! === which is equally specific with === ! Rule 17/58 ! An attack modifier rule when the attacker is affected by smoke ( this is the retreating is less risky with smoke rule ): ! === which is equally specific with === ! Rule 18/58 ! An attack modifier rule when the global attacker weapon is a dagger ( this is the dagger extra tension attack bonus rule ): ! === which is equally specific with === ! Rule 19/58 ! An attack modifier rule when the global defender wears the crown of Hargo ( this is the crown of Hargo rule ): ! === which is equally specific with === ! Rule 20/58 ! An attack modifier rule when the player wears Metastasio's hat ( this is the Metastasio's hat grants worse attack and better retreat rule ): ! === which is equally specific with === ! Rule 21/58 ! An attack modifier rule when the location encloses the holy symbols ( this is the holy symbols attack bonus rule ): ! === which is equally specific with === ! Rule 22/58 ! An attack modifier rule when the location encloses the unholy symbols ( this is the unholy symbols attack bonus rule ): ! === which is equally specific with === ! Rule 23/58 ! An attack modifier rule when the global attacker is the jumping bomb ( this is the jumping bomb concentration attack modifier rule ): ! === which is equally specific with === ! Rule 24/58 ! An attack modifier rule when the global defender is the jumping bomb ( this is the jumping bomb concentration defence modifier rule ): ! === which is equally specific with === ! Rule 25/58 ! An attack modifier rule when the global attacker is tentacle-confused ( this is the tentacle-confused attack modifier rule ): ! === which is equally specific with === ! Rule 26/58 ! An attack modifier rule when the global attacker is the rotting corpse ( this is the rotting corpse attack modifier rule ): ! === which is equally specific with === ! Rule 27/58 ! An attack modifier rule when the global defender is the rotting corpse ( this is the rotting corpse defense modifier rule ): ! >>> I - Number of aspects constrained >>> ! Rule 28/58 ! An attack modifier rule ( this is the weapon attack bonus rule ): ! === which is equally specific with === ! Rule 29/58 ! An attack modifier rule ( this is the melee attack bonus rule ): ! === which is equally specific with === ! Rule 30/58 ! An attack modifier rule ( this is the concentration attack modifier rule ): ! === which is equally specific with === ! Rule 31/58 ! An attack modifier rule ( this is the standard tension attack modifier rule ): ! === which is equally specific with === ! Rule 32/58 ! An attack modifier rule ( this is the blindness attack modifier rule ): ! === which is equally specific with === ! Rule 33/58 ! An attack modifier rule ( this is the blindness defence modifier rule ): ! === which is equally specific with === ! Rule 34/58 ! An attack modifier rule ( this is the vampire bat grants better retreat rule ): ! === which is equally specific with === ! Rule 35/58 ! An attack modifier rule ( this is the caution grants better retreat rule ): ! === which is equally specific with === ! Rule 36/58 ! An attack modifier rule ( this is the smoky robe is better when smoke rule ): ! === which is equally specific with === ! Rule 37/58 ! An attack modifier rule ( this is the smoky blade is better when smoke rule ): ! === which is equally specific with === ! Rule 38/58 ! An attack modifier rule ( this is the executioner's axe is better in temple of Nomos rule ): ! === which is equally specific with === ! Rule 39/58 ! An attack modifier rule ( this is the plate mail attack modifiers rule ): ! === which is equally specific with === ! Rule 40/58 ! An attack modifier rule ( this is the plate mail running rule ): ! === which is equally specific with === ! Rule 41/58 ! An attack modifier rule ( this is the being a glass cannon rule ): ! === which is equally specific with === ! Rule 42/58 ! An attack modifier rule ( this is the robe of the dead mage protects you rule ): ! === which is equally specific with === ! Rule 43/58 ! An attack modifier rule ( this is the rod of master builder attack modifiers rule ): ! === which is equally specific with === ! Rule 44/58 ! An attack modifier rule ( this is the ment attack and defence bonus rule ): ! === which is equally specific with === ! Rule 45/58 ! An attack modifier rule ( this is the feeling down attack penalty rule ): ! === which is equally specific with === ! Rule 46/58 ! An attack modifier rule ( this is the attack penalty in Entrance Hall rule ): ! === which is equally specific with === ! Rule 47/58 ! An attack modifier rule ( this is the Nomos attack bonus rule ): ! === which is equally specific with === ! Rule 48/58 ! An attack modifier rule ( this is the Aite-loved bonus in Temple of Aite rule ): ! === which is equally specific with === ! Rule 49/58 ! An attack modifier rule ( this is the blood ape size attack bonus rule ): ! === which is equally specific with === ! Rule 50/58 ! An attack modifier rule ( this is the attack roll stunned bonus rule ): ! === which is equally specific with === ! Rule 51/58 ! An attack modifier rule ( this is the mindslug defended by the enslaved rule ): ! === which is equally specific with === ! Rule 52/58 ! An attack modifier rule ( this is the enslaved have bad defence rule ): ! === which is equally specific with === ! Rule 53/58 ! An attack modifier rule ( this is the domination attack modifier rule ): ! === which is equally specific with === ! Rule 54/58 ! An attack modifier rule ( this is the do not parry with metal weapons against Bodmall's lightning attack rule ): ! === which is equally specific with === ! Rule 55/58 ! An attack modifier rule ( this is the thorns running rule ): ! --- now the last-placed rules --- ! Rule 56/58 ! Last attack modifier rule ( this is the standard show results of the attack roll rule ): ! === which is equally specific with === ! Rule 57/58 ! Last attack modifier rule: ! === which is equally specific with === ! Rule 58/58 ! Last attack modifier rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First attack modifier rule: [ R_1231 ; ! phrase 1 ! [1: turn off mentioning rust] (PHR_1228_r23 ()); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First attack modifier rule: [ R_1212 ; ! phrase 1 ! [1: turn off mentioning hotness] (PHR_1208_r21 ()); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! An attack modifier rule ( this is the alternative attack roll rule ): [ R_1140 ; ! phrase 1 ! [1: now the attack strength is a roll of the dice] (Global_Vars-->45) = (PHR_1141_r76 ()); ! phrase 2 ! [2: say ~[italic type]Rolling ~ , the attack strength , ~[run paragraph on]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_865; ParaContent(); print (say__n=(Global_Vars-->45)); ParaContent(); RunParagraphOn(); .L_Say531; .L_SayX478; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule when the global attacker is a ghoul pc ( this is the ghoul has less chance to hit rule ): [ R_1271 ; if (((((((Adj_218_t1_v9((Global_Vars-->41)))) && ((Adj_35_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1271, 1271); ! phrase 1 ! [1: say ~ - 1 (ghoul)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_866; ParaContent(); RunParagraphOn(); .L_Say532; .L_SayX479; ! phrase 2 ! [2: decrease the attack strength by 1] (Global_Vars-->45) = (Global_Vars-->45) - 1; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1271, 1271, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule when the global attacker is a vampire pc ( this is the vampire has more chance to hit rule ): [ R_1279 ; if (((((((Adj_219_t1_v9((Global_Vars-->41)))) && ((Adj_35_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1279, 1279); ! phrase 1 ! [1: say ~ + 1 (vampire)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_867; ParaContent(); RunParagraphOn(); .L_Say533; .L_SayX480; ! phrase 2 ! [2: increase the attack strength by 1] (Global_Vars-->45) = (Global_Vars-->45) + 1; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1279, 1279, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule when the global defender is a vampire pc ( this is the vampire has more chance to be hit rule ): [ R_1280 ; if (((((((Adj_219_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1280, 1280); ! phrase 1 ! [1: say ~ + 2 (you are a vampire)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_868; ParaContent(); RunParagraphOn(); .L_Say534; .L_SayX481; ! phrase 2 ! [2: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1280, 1280, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule when the global defender is a vampire bat pc ( this is the vampire bat has less chance to be hit rule ): [ R_1287 ; if (((((((Adj_220_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1287, 1287); ! phrase 1 ! [1: say ~ - 2 (bat form)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_869; ParaContent(); RunParagraphOn(); .L_Say535; .L_SayX482; ! phrase 2 ! [2: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1287, 1287, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule when the global attacker is a vampire bat pc ( this is the vampire bat has less chance to hit rule ): [ R_1289 ; if (((((((Adj_220_t1_v9((Global_Vars-->41)))) && ((Adj_35_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1289, 1289); ! phrase 1 ! [1: say ~ - 2 (bat form)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_869; ParaContent(); RunParagraphOn(); .L_Say536; .L_SayX483; ! phrase 2 ! [2: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1289, 1289, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! An attack modifier rule when the global defender is a runner pc ( this is the running is risky rule ): [ R_2088 ; if (((((((Adj_286_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2088, 2088); ! phrase 1 ! [1: say ~ + 4 (you are running)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_870; ParaContent(); RunParagraphOn(); .L_Say537; .L_SayX484; ! phrase 2 ! [2: increase the attack strength by 4] (Global_Vars-->45) = (Global_Vars-->45) + 4; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2088, 2088, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An attack modifier rule when the global defender is at parry ( this is the parry defence bonus rule ): [ R_1024 t_0 ! Local variable e.g. 'n' = number ; if (((((((Adj_105_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1024, 1024); ! phrase 1 ! [1: let n be the passive parry max of global attacker weapon] t_0 = GProperty(9, (Global_Vars-->43),p23_passive_parry_max); ! phrase 2 ! [2: if the active parry max of global defender weapon is less than n begin] if (((GProperty(9, (Global_Vars-->44),p24_active_parry_max) < t_0))) { ! phrase 3 ! [3: now n is the active parry max of global defender weapon] t_0 = GProperty(9, (Global_Vars-->44),p24_active_parry_max); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 6 ! [6: if n is greater than 0 begin] if (((t_0 > 0))) { ! phrase 7 ! [7: say ~ - ~ , n , ~ (defender parrying)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_871; ParaContent(); RunParagraphOn(); .L_Say538; .L_SayX485; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if n is 0 and active parry max of global defender weapon is 0 begin] if ((((t_0 == 0))) && (((GProperty(9, (Global_Vars-->44),p24_active_parry_max) == 0)))) { ! phrase 10 ! [10: say ~ - 0 (cannot parry with [global defender weapon])[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_872; ParaContent(); print (PrintShortName) (Global_Vars-->44); ParaContent(); print (PrintText) SC_275; ParaContent(); RunParagraphOn(); .L_Say539; .L_SayX486; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: if n is 0 , say ~ - 0 (cannot parry against [global attacker weapon])[run paragraph on]~] if (((t_0 == 0))) { say__p=1;ParaContent(); print (PrintText) SC_873; ParaContent(); print (PrintShortName) (Global_Vars-->43); ParaContent(); print (PrintText) SC_275; ParaContent(); RunParagraphOn(); .L_Say540; .L_SayX487; } ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1024, 1024, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An attack modifier rule when the global defender is at dodge ( this is the dodge defence bonus rule ): [ R_1030 t_0 ! Local variable e.g. 'n' = number ; if (((((((Adj_107_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1030, 1030); ! phrase 1 ! [1: let n be the dodgability of global attacker weapon] t_0 = GProperty(9, (Global_Vars-->43),p22_dodgability); ! phrase 2 ! [2: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 3 ! [3: if n is greater than 0 begin] if (((t_0 > 0))) { ! phrase 4 ! [4: say ~ - ~ , n , ~ (defender dodging)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_874; ParaContent(); RunParagraphOn(); .L_Say541; .L_SayX488; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if n is 0 begin] if (((t_0 == 0))) { ! phrase 7 ! [7: say ~ - 0 (cannot dodge)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_875; ParaContent(); RunParagraphOn(); .L_Say542; .L_SayX489; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1030, 1030, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule when the global defender is risky ( this is the defender is doing something risky rule ): [ R_1203 ; if (((((((Adj_197_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1203, 1203); ! phrase 1 ! [1: say ~ + 6 (defender taking risky action)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_876; ParaContent(); RunParagraphOn(); .L_Say543; .L_SayX490; ! phrase 2 ! [2: increase the attack strength by 6] (Global_Vars-->45) = (Global_Vars-->45) + 6; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1203, 1203, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule when the global attacker is rusted ( this is the rusted monster decreases attack rule ): [ R_1237 ; if (((((((Adj_205_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1237, 1237); ! phrase 1 ! [1: say ~ - 2 (rust)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_877; ParaContent(); RunParagraphOn(); .L_Say544; .L_SayX491; ! phrase 2 ! [2: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1237, 1237, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! An attack modifier rule when the global attacker is hidden ( this is the hidden gives a small attack bonus rule ): [ R_1299 ; if (((((((Adj_221_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1299, 1299); ! phrase 1 ! [1: say ~ + 2 (hidden)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_878; ParaContent(); RunParagraphOn(); .L_Say545; .L_SayX492; ! phrase 2 ! [2: increase attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1299, 1299, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! An attack modifier rule when the attacker is affected by smoke ( this is the thick smoke makes attacking a little harder rule ): [ R_1330 ; if ((((((PHR_1328_r77 ())))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1330, 1330); ! phrase 1 ! [1: say ~ - [smoke penalty of the location] (smoke)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=(Resolver_9(real_location,"source", 1))); ParaContent(); print (PrintText) SC_879; ParaContent(); RunParagraphOn(); .L_Say546; .L_SayX493; ! phrase 2 ! [2: decrease the attack strength by smoke penalty of the location] (Global_Vars-->45) = (Global_Vars-->45) - (Resolver_9(real_location,"source", 290)); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1330, 1330, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! An attack modifier rule when the attacker is affected by smoke ( this is the running is less risky with smoke rule ): [ R_1332 t_0 ! Local variable e.g. '?-1,-1?' = number ; if ((((((PHR_1328_r77 ())))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1332, 1332); ! phrase 1 ! [1: if the global defender is the player and the player is runner begin] if (((((Global_Vars-->42) == player))) && ((((Adj_286_t1_v9(player)))))) { ! phrase 2 ! [2: let n be smoke penalty of the location] t_0 = (Resolver_9(real_location,"source", 297)); ! phrase 3 ! [3: say ~ - [n] (running covered by smoke)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_880; ParaContent(); RunParagraphOn(); .L_Say547; .L_SayX494; ! phrase 4 ! [4: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1332, 1332, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! An attack modifier rule when the attacker is affected by smoke ( this is the retreating is less risky with smoke rule ): [ R_1333 t_0 ! Local variable e.g. '?-1,-1?' = number ; if ((((((PHR_1328_r77 ())))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1333, 1333); ! phrase 1 ! [1: if the global defender is the player and the player is retreater begin] if (((((Global_Vars-->42) == player))) && ((((Adj_282_t1_v9(player)))))) { ! phrase 2 ! [2: let n be smoke penalty of the location] t_0 = (Resolver_9(real_location,"source", 303)); ! phrase 3 ! [3: say ~ - [n] (retreat covered by smoke)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_881; ParaContent(); RunParagraphOn(); .L_Say548; .L_SayX495; ! phrase 4 ! [4: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1333, 1333, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule when the global attacker weapon is a dagger ( this is the dagger extra tension attack bonus rule ): [ R_1391 t_0 ! Local variable e.g. 'n' = number ; if (((((((Global_Vars-->43) ofclass K41_dagger)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1391, 1391); ! phrase 1 ! [1: let n be 0] t_0 = 0; ! phrase 2 ! [2: now n is the tension divided by 2] t_0 = (IntegerDivide((Global_Vars-->48),2)) ; ! phrase 3 ! [3: if n is not 0 begin] if (((~~((t_0 == 0))))) { ! phrase 4 ! [4: say ~ + ~ , n , ~ (dagger benefits from tension)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_882; ParaContent(); RunParagraphOn(); .L_Say549; .L_SayX496; ! phrase 5 ! [5: increase the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) + t_0; ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1391, 1391, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule when the global defender wears the crown of Hargo ( this is the crown of Hargo rule ): [ R_1420 ; if (((((((Global_Vars-->42) == WearerOf(I278_crown_of_hargo))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1420, 1420); ! phrase 1 ! [1: say ~ + 1 (defender is overconfident)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_883; ParaContent(); RunParagraphOn(); .L_Say550; .L_SayX497; ! phrase 2 ! [2: increase the attack strength by 1] (Global_Vars-->45) = (Global_Vars-->45) + 1; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1420, 1420, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule when the player wears Metastasio's hat ( this is the Metastasio's hat grants worse attack and better retreat rule ): [ R_1428 ; if ((((((player == WearerOf(I304_metastasio_s_hat))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1428, 1428); ! phrase 1 ! [1: if the global attacker is the player or ( the global defender is the player and the player is retreater ) begin] if (((((Global_Vars-->41) == player))) || (((((Global_Vars-->42) == player))) && ((((Adj_282_t1_v9(player))))))) { ! phrase 2 ! [2: say ~ - 2 (your cowardice)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_884; ParaContent(); RunParagraphOn(); .L_Say551; .L_SayX498; ! phrase 3 ! [3: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 4 ! [4: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1428, 1428, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! An attack modifier rule when the location encloses the holy symbols ( this is the holy symbols attack bonus rule ): [ R_1679 ; if ((((((IndirectlyContains(real_location,I434_holy_symbols))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1679, 1679); ! phrase 1 ! [1: if the global attacker is undead or the global attacker is demonic begin] if (((((Global_Vars-->41).p111_faction == I158_undead))) || ((((Global_Vars-->41).p111_faction == I160_demonic)))) { ! phrase 2 ! [2: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 3 ! [3: say ~ - 2 (holy symbols)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_885; ParaContent(); RunParagraphOn(); .L_Say552; .L_SayX499; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1679, 1679, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! An attack modifier rule when the location encloses the unholy symbols ( this is the unholy symbols attack bonus rule ): [ R_1681 ; if ((((((IndirectlyContains(real_location,I435_unholy_symbols))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1681, 1681); ! phrase 1 ! [1: if the global attacker is undead or the global attacker is demonic begin] if (((((Global_Vars-->41).p111_faction == I158_undead))) || ((((Global_Vars-->41).p111_faction == I160_demonic)))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ + 2 (unholy symbols)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_886; ParaContent(); RunParagraphOn(); .L_Say553; .L_SayX500; } ! phrase 3 ! [3: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 4 ! [4: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1681, 1681, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule when the global attacker is the jumping bomb ( this is the jumping bomb concentration attack modifier rule ): [ R_1801 t_0 ! Local variable e.g. '?-1,-1?' = number ; if (((((((Global_Vars-->41) == I454_jumping_bomb)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1801, 1801); ! phrase 1 ! [1: if the concentration of the jumping bomb is greater than 0 begin] if (((GProperty(9, I454_jumping_bomb,p26_concentration) > 0))) { ! phrase 2 ! [2: let n be 2 times the concentration of the jumping bomb] t_0 = (2*GProperty(9, I454_jumping_bomb,p26_concentration)) ; ! phrase 3 ! [3: say ~ - ~ , n , ~ (lower concentration bonus for jumping bomb)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_887; ParaContent(); RunParagraphOn(); .L_Say554; .L_SayX501; ! phrase 4 ! [4: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1801, 1801, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule when the global defender is the jumping bomb ( this is the jumping bomb concentration defence modifier rule ): [ R_1802 t_0 ! Local variable e.g. '?-1,-1?' = number ; if (((((((Global_Vars-->42) == I454_jumping_bomb)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1802, 1802); ! phrase 1 ! [1: if the concentration of the jumping bomb is greater than 0 begin] if (((GProperty(9, I454_jumping_bomb,p26_concentration) > 0))) { ! phrase 2 ! [2: let n be the concentration of the jumping bomb] t_0 = GProperty(9, I454_jumping_bomb,p26_concentration); ! phrase 3 ! [3: say ~ - ~ , n , ~ (speed of the jumping bomb)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_888; ParaContent(); RunParagraphOn(); .L_Say555; .L_SayX502; ! phrase 4 ! [4: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1802, 1802, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule when the global attacker is tentacle-confused ( this is the tentacle-confused attack modifier rule ): [ R_1911 ; if (((((((Adj_272_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1911, 1911); ! phrase 1 ! [1: say ~ - 2 (confused)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_889; ParaContent(); RunParagraphOn(); .L_Say556; .L_SayX503; ! phrase 2 ! [2: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1911, 1911, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule when the global attacker is the rotting corpse ( this is the rotting corpse attack modifier rule ): [ R_2013 t_0 ! Local variable e.g. 'm' = number ; if (((((((Global_Vars-->41) == I501_rotting_corpse)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2013, 2013); ! phrase 1 ! [1: let m be arms of the rotting corpse + legs of the rotting corpse] t_0 = ((PHR_2008_r66 ())+(PHR_2007_r65 ())) ; ! phrase 2 ! [2: let m be 4 minus m] t_0 = (4-t_0) ; ! phrase 3 ! [3: unless m is 0 begin] if (~~(((t_0 == 0)))) { ! phrase 4 ! [4: if the numbers boolean is true , say ~ - [m] (missing limbs)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_890; ParaContent(); RunParagraphOn(); .L_Say557; .L_SayX504; } ! phrase 5 ! [5: decrease the attack strength by m] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 6 ! [6: end unless] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2013, 2013, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule when the global defender is the rotting corpse ( this is the rotting corpse defense modifier rule ): [ R_2014 ; if (((((((Global_Vars-->42) == I501_rotting_corpse)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2014, 2014); ! phrase 1 ! [1: if legs of the rotting corpse is 1 begin] if ((((PHR_2007_r65 ()) == 1))) { ! phrase 2 ! [2: say ~ + 2 (corpse missing a leg)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_891; ParaContent(); RunParagraphOn(); .L_Say558; .L_SayX505; ! phrase 3 ! [3: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if legs of the rotting corpse is 0 begin] if ((((PHR_2007_r65 ()) == 0))) { ! phrase 6 ! [6: say ~ + 4 (corpse missing both legs)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_892; ParaContent(); RunParagraphOn(); .L_Say559; .L_SayX506; ! phrase 7 ! [7: increase the attack strength by 4] (Global_Vars-->45) = (Global_Vars-->45) + 4; ! phrase 8 ! [8: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2014, 2014, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An attack modifier rule ( this is the weapon attack bonus rule ): [ R_962 t_0 ! Local variable e.g. 'n' = number ; ! phrase 1 ! [1: let n be the weapon attack bonus of the global attacker weapon] t_0 = GProperty(9, (Global_Vars-->43),p25_weapon_attack_bonus); ! phrase 2 ! [2: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 3 ! [3: if n is greater than 0 begin] if (((t_0 > 0))) { ! phrase 4 ! [4: say ~ + ~ , n , ~ ([the global attacker weapon] bonus)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_893; ParaContent(); print (the) (Global_Vars-->43); ParaContent(); print (PrintText) SC_894; ParaContent(); RunParagraphOn(); .L_Say560; .L_SayX507; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if n is less than 0 begin] if (((t_0 < 0))) { ! phrase 7 ! [7: say ~ - ~ , 0 minus n , ~ ([the global attacker weapon] penalty)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n= (0-t_0) ); ParaContent(); print (PrintText) SC_893; ParaContent(); print (the) (Global_Vars-->43); ParaContent(); print (PrintText) SC_895; ParaContent(); RunParagraphOn(); .L_Say561; .L_SayX508; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: increase the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) + t_0; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An attack modifier rule ( this is the melee attack bonus rule ): [ R_975 t_0 ! Local variable e.g. 'attacker's melee' = number ; ! phrase 1 ! [1: let the attacker's melee be the melee of the global attacker] t_0 = GProperty(9, (Global_Vars-->41),p18_melee); ! phrase 2 ! [2: if the numbers boolean is true and the attacker's melee is not 0 begin] if ((((((Global_Vars-->40) && true) == (1 && true)))) && (((~~((t_0 == 0)))))) { ! phrase 3 ! [3: if the the attacker's melee is greater than 0 begin] if (((t_0 > 0))) { ! phrase 4 ! [4: say ~ + ~ , the attacker's melee , ~ (inherent bonus)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_896; ParaContent(); RunParagraphOn(); .L_Say562; .L_SayX509; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~ - ~ , 0 minus the attacker's melee , ~ (inherent penalty)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n= (0-t_0) ); ParaContent(); print (PrintText) SC_897; ParaContent(); RunParagraphOn(); .L_Say563; .L_SayX510; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: increase the attack strength by the attacker's melee] (Global_Vars-->45) = (Global_Vars-->45) + t_0; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An attack modifier rule ( this is the concentration attack modifier rule ): [ R_1012 t_0 ! Local variable e.g. 'bonus' = number ; ! phrase 1 ! [1: let the bonus be 0] t_0 = 0; ! phrase 2 ! [2: if the concentration of the actor is begin] switch(GProperty(9, actor,p26_concentration)) { ! phrase 3 ! [3: -- 0] 0: ! phrase 4 ! [4: make no decision] rfalse; ! phrase 5 ! [5: -- 1] ; 1: ! phrase 6 ! [6: now the bonus is 2] t_0 = 2; ! phrase 7 ! [7: -- 2] ; 2: ! phrase 8 ! [8: now the bonus is 4] t_0 = 4; ! phrase 9 ! [9: -- 3] ; 3: ! phrase 10 ! [10: now the bonus is 8] t_0 = 8; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 13 ! [13: say ~ + ~ , the bonus , ~ (concentration)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_898; ParaContent(); RunParagraphOn(); .L_Say564; .L_SayX511; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: increase the attack strength by the bonus] (Global_Vars-->45) = (Global_Vars-->45) + t_0; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An attack modifier rule ( this is the standard tension attack modifier rule ): [ R_1069 t_0 ! Local variable e.g. 'tension bonus' = number ; ! phrase 1 ! [1: let the tension bonus be the tension divided by 2] t_0 = (IntegerDivide((Global_Vars-->48),2)) ; ! phrase 2 ! [2: if the tension bonus is not 0 begin] if (((~~((t_0 == 0))))) { ! phrase 3 ! [3: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 4 ! [4: say ~ + ~ , the tension bonus , ~ (tension)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_899; ParaContent(); RunParagraphOn(); .L_Say565; .L_SayX512; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: increase the attack strength by the tension bonus] (Global_Vars-->45) = (Global_Vars-->45) + t_0; ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule ( this is the blindness attack modifier rule ): [ R_1173 ; ! phrase 1 ! [1: if the global attacker is blind and the global attacker is not eyeless begin] if ((((PHR_1169_r17 ((Global_Vars-->41))))) && (((~~(((Adj_164_t1_v9((Global_Vars-->41))))))))) { ! phrase 2 ! [2: say ~ - 3 (blindness)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_900; ParaContent(); RunParagraphOn(); .L_Say566; .L_SayX513; ! phrase 3 ! [3: decrease the attack strength by 3] (Global_Vars-->45) = (Global_Vars-->45) - 3; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule ( this is the blindness defence modifier rule ): [ R_1174 ; ! phrase 1 ! [1: if the global defender is blind and the global defender is not eyeless begin] if ((((PHR_1169_r17 ((Global_Vars-->42))))) && (((~~(((Adj_164_t1_v9((Global_Vars-->42))))))))) { ! phrase 2 ! [2: say ~ + 2 (defender blind)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_901; ParaContent(); RunParagraphOn(); .L_Say567; .L_SayX514; ! phrase 3 ! [3: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An attack modifier rule ( this is the vampire bat grants better retreat rule ): [ R_1292 ; ! phrase 1 ! [1: if the global defender is a vampire bat retreater pc begin] if ((((Adj_220_t1_v9((Global_Vars-->42)))) && ((Adj_282_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42)))))) { ! phrase 2 ! [2: say ~ - 2 (bat form retreat bonus)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_902; ParaContent(); RunParagraphOn(); .L_Say568; .L_SayX515; ! phrase 3 ! [3: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if the global defender is a vampire bat runner pc begin] if ((((Adj_220_t1_v9((Global_Vars-->42)))) && ((Adj_286_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42)))))) { ! phrase 6 ! [6: say ~ - 2 (bat form retreat bonus)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_902; ParaContent(); RunParagraphOn(); .L_Say569; .L_SayX516; ! phrase 7 ! [7: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the caution grants better retreat rule ): [ R_1407 ; ! phrase 1 ! [1: if the global defender is the player and the player is retreater begin] if (((((Global_Vars-->42) == player))) && ((((Adj_282_t1_v9(player)))))) { ! phrase 2 ! [2: if the player is cautious begin] if ((((Adj_260_t1_v9(player))))) { ! phrase 3 ! [3: say ~ - 2 (essence of caution)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_903; ParaContent(); RunParagraphOn(); .L_Say570; .L_SayX517; ! phrase 4 ! [4: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the smoky robe is better when smoke rule ): [ R_1430 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global defender wears the smoky robe begin] if ((((Global_Vars-->42) == WearerOf(I306_smoky_robe)))) { ! phrase 2 ! [2: unless the global attacker is smoke immune begin] if (~~(((PHR_1325_r48 ((Global_Vars-->41)))))) { ! phrase 3 ! [3: if the smoke penalty of the location is not 0 begin] if (((~~(((Resolver_9(real_location,"source", 933)) == 0))))) { ! phrase 4 ! [4: let n be the smoke penalty of the location] t_0 = (Resolver_9(real_location,"source", 934)); ! phrase 5 ! [5: say ~ - [n] (the smoky robe is hard to see)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_904; ParaContent(); RunParagraphOn(); .L_Say571; .L_SayX518; ! phrase 6 ! [6: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end unless] } ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the smoky blade is better when smoke rule ): [ R_1432 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global attacker weapon is the smoky blade begin] if ((((Global_Vars-->43) == I310_smoky_blade))) { ! phrase 2 ! [2: unless the global defender is smoke immune begin] if (~~(((PHR_1325_r48 ((Global_Vars-->42)))))) { ! phrase 3 ! [3: if the smoke penalty of the location is not 0 begin] if (((~~(((Resolver_9(real_location,"source", 978)) == 0))))) { ! phrase 4 ! [4: let n be the smoke penalty of the location] t_0 = (Resolver_9(real_location,"source", 979)); ! phrase 5 ! [5: say ~ + [n] (the smoky blade is hard to see)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_905; ParaContent(); RunParagraphOn(); .L_Say572; .L_SayX519; ! phrase 6 ! [6: increase the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) + t_0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end unless] } ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the executioner's axe is better in temple of Nomos rule ): [ R_1487 ; ! phrase 1 ! [1: if the global attacker weapon is the executioner's axe and the location is the temple of nomos begin] if (((((Global_Vars-->43) == I345_executioner_s_axe))) && (((real_location == I387_temple_of_nomos)))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ + 3 (Nomos likes the executioner's axe)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_906; ParaContent(); RunParagraphOn(); .L_Say573; .L_SayX520; } ! phrase 3 ! [3: increase the attack strength by 3] (Global_Vars-->45) = (Global_Vars-->45) + 3; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the plate mail attack modifiers rule ): [ R_1497 ; ! phrase 1 ! [1: if the global defender wears suit of plate mail begin] if ((((Global_Vars-->42) == WearerOf(I351_suit_of_plate_mail)))) { ! phrase 2 ! [2: if the global defender is retreater or the global defender is runner begin] if (((((Adj_282_t1_v9((Global_Vars-->42)))))) || ((((Adj_286_t1_v9((Global_Vars-->42))))))) { ! phrase 3 ! [3: say ~ + 2 (slowed down by plate mail)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_907; ParaContent(); RunParagraphOn(); .L_Say574; .L_SayX521; ! phrase 4 ! [4: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if the global attacker wears suit of plate mail begin] if ((((Global_Vars-->41) == WearerOf(I351_suit_of_plate_mail)))) { ! phrase 8 ! [8: say ~ - 1 (slowed down by plate mail)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_908; ParaContent(); RunParagraphOn(); .L_Say575; .L_SayX522; ! phrase 9 ! [9: decrease the attack strength by 1] (Global_Vars-->45) = (Global_Vars-->45) - 1; ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the plate mail running rule ): [ R_1499 ; ! phrase 1 ! [1: if the global defender is the player and the player carries the suit of plate mail begin] if (((((Global_Vars-->42) == player))) && (((player == CarrierOf(I351_suit_of_plate_mail))))) { ! phrase 2 ! [2: if the player is retreater or the player is runner begin] if (((((Adj_282_t1_v9(player))))) || ((((Adj_286_t1_v9(player)))))) { ! phrase 3 ! [3: say ~ + 2 (you are slowed down by carrying a suit of plate mail)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_909; ParaContent(); RunParagraphOn(); .L_Say576; .L_SayX523; ! phrase 4 ! [4: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the being a glass cannon rule ): [ R_1506 ; ! phrase 1 ! [1: if the global defender weapon is the glass cannon begin] if ((((Global_Vars-->44) == I354_glass_cannon))) { ! phrase 2 ! [2: say ~ + 3 (you are a glass cannon)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_910; ParaContent(); RunParagraphOn(); .L_Say577; .L_SayX524; ! phrase 3 ! [3: increase the attack strength by 3] (Global_Vars-->45) = (Global_Vars-->45) + 3; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the robe of the dead mage protects you rule ): [ R_1511 ; ! phrase 1 ! [1: if the global defender wears the robe of the dead mage begin] if ((((Global_Vars-->42) == WearerOf(I355_robe_of_the_dead_mage)))) { ! phrase 2 ! [2: say ~ - 1 (robe of the dead mage)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_911; ParaContent(); RunParagraphOn(); .L_Say578; .L_SayX525; ! phrase 3 ! [3: decrease the attack strength by 1] (Global_Vars-->45) = (Global_Vars-->45) - 1; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the rod of master builder attack modifiers rule ): [ R_1516 ; ! phrase 1 ! [1: if the global defender is the player and the player has the rod of the master builder begin] if (((((Global_Vars-->42) == player))) && (((player == OwnerOf(I357_rod_of_the_master_build))))) { ! phrase 2 ! [2: if the player is retreater or the player is runner begin] if (((((Adj_282_t1_v9(player))))) || ((((Adj_286_t1_v9(player)))))) { ! phrase 3 ! [3: say ~ - 2 (rod of the master builder)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_912; ParaContent(); RunParagraphOn(); .L_Say579; .L_SayX526; ! phrase 4 ! [4: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the ment attack and defence bonus rule ): [ R_1532 ; ! phrase 1 ! [1: if the global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 2 ! [2: if ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 3 ! [3: if the numbers boolean is true , say ~ + [ment bonus] (ment)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_913; ParaContent(); RunParagraphOn(); .L_Say580; .L_SayX527; } ! phrase 4 ! [4: increase the attack strength by ment bonus] (Global_Vars-->45) = (Global_Vars-->45) + (PHR_1528_r78 ()); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if the global defender is the player begin] if ((((Global_Vars-->42) == player))) { ! phrase 8 ! [8: if ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 9 ! [9: if the numbers boolean is true , say ~ - [ment bonus] (your defence increased by ment)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_914; ParaContent(); RunParagraphOn(); .L_Say581; .L_SayX528; } ! phrase 10 ! [10: decrease the attack strength by ment bonus] (Global_Vars-->45) = (Global_Vars-->45) - (PHR_1528_r78 ()); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An attack modifier rule ( this is the feeling down attack penalty rule ): [ R_1535 ; ! phrase 1 ! [1: if the global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 2 ! [2: if the ment addiction is greater than 0 begin] if ((((Global_Vars-->96) > 0))) { ! phrase 3 ! [3: if the ment timer is 0 begin] if ((((Global_Vars-->97) == 0))) { ! phrase 4 ! [4: if the numbers boolean is true , say ~ - [ment addiction] (feeling down)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=(Global_Vars-->96)); ParaContent(); print (PrintText) SC_915; ParaContent(); RunParagraphOn(); .L_Say582; .L_SayX529; } ! phrase 5 ! [5: decrease the attack strength by ment addiction] (Global_Vars-->45) = (Global_Vars-->45) - (Global_Vars-->96); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An attack modifier rule ( this is the attack penalty in Entrance Hall rule ): [ R_1544 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the location is entrance hall begin] if (((real_location == I375_entrance_hall))) { ! phrase 2 ! [2: unless the global attacker is blind begin] if (~~(((PHR_1169_r17 ((Global_Vars-->41)))))) { ! phrase 3 ! [3: let n be 2 minus the smoke penalty of entrance hall] t_0 = (2-(PHR_1316_r25 (I375_entrance_hall))) ; ! phrase 4 ! [4: if n is greater than 0 begin] if (((t_0 > 0))) { ! phrase 5 ! [5: say ~ - [n] (blinding light)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_916; ParaContent(); RunParagraphOn(); .L_Say583; .L_SayX530; ! phrase 6 ! [6: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end unless] } ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An attack modifier rule ( this is the Nomos attack bonus rule ): [ R_1576 ; ! phrase 1 ! [1: if nomos bonus is true and the global attacker is the player begin] if ((((((Global_Vars-->103) && true) == (1 && true)))) && ((((Global_Vars-->41) == player)))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ + 2 (the law is with you)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_917; ParaContent(); RunParagraphOn(); .L_Say584; .L_SayX531; } ! phrase 3 ! [3: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An attack modifier rule ( this is the Aite-loved bonus in Temple of Aite rule ): [ R_1588 ; ! phrase 1 ! [1: if the location is the temple of aite begin] if (((real_location == I389_temple_of_aite))) { ! phrase 2 ! [2: if the global attacker is beloved of aite begin] if (((PHR_1205_r79 ((Global_Vars-->41))))) { ! phrase 3 ! [3: if the numbers boolean is true , say ~ + 2 (beloved of Aite)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_918; ParaContent(); RunParagraphOn(); .L_Say585; .L_SayX532; } ! phrase 4 ! [4: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule ( this is the blood ape size attack bonus rule ): [ R_1704 ; ! phrase 1 ! [1: if the global defender is the blood ape and the global defender is at dodge begin] if (((((Global_Vars-->42) == I439_blood_ape))) && ((((Adj_107_t1_v9((Global_Vars-->42))))))) { ! phrase 2 ! [2: if the blood ape is huge begin] if ((((Adj_156_t1_v9(I439_blood_ape))))) { ! phrase 3 ! [3: if the numbers boolean is true , say ~ + 1 (huge ape)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_919; ParaContent(); RunParagraphOn(); .L_Say586; .L_SayX533; } ! phrase 4 ! [4: increase the attack strength by 1] (Global_Vars-->45) = (Global_Vars-->45) + 1; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the blood ape is gargantuan begin] if ((((Adj_157_t1_v9(I439_blood_ape))))) { ! phrase 7 ! [7: if the numbers boolean is true , say ~ + 2 (gargantuan ape)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_920; ParaContent(); RunParagraphOn(); .L_Say587; .L_SayX534; } ! phrase 8 ! [8: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule ( this is the attack roll stunned bonus rule ): [ R_1759 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global attacker is stunned begin] if ((((Adj_43_t1_v9((Global_Vars-->41)))))) { ! phrase 2 ! [2: let n be 2] t_0 = 2; ! phrase 3 ! [3: if the global defender is the player begin] if ((((Global_Vars-->42) == player))) { ! phrase 4 ! [4: if the player is retreater or the player is runner begin] if (((((Adj_282_t1_v9(player))))) || ((((Adj_286_t1_v9(player)))))) { ! phrase 5 ! [5: increase n by 3] t_0 = t_0 + 3; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if the numbers boolean is true , say ~ - [n] (stunned)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_921; ParaContent(); RunParagraphOn(); .L_Say588; .L_SayX535; } ! phrase 9 ! [9: decrease the attack strength by n] (Global_Vars-->45) = (Global_Vars-->45) - t_0; ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule ( this is the mindslug defended by the enslaved rule ): [ R_1851 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global defender is the mindslug and the global attacker is not hidden begin] if (((((Global_Vars-->42) == I463_mindslug))) && (((~~(((Adj_221_t1_v9((Global_Vars-->41))))))))) { ! phrase 2 ! [2: let n be the number of enslaved persons in the location] t_0 = (Prop_263()) ; ! phrase 3 ! [3: if n greater than 0 begin] if (((t_0 > 0))) { ! phrase 4 ! [4: let m be n + 1] t_1 = (t_0+1) ; ! phrase 5 ! [5: let m be n times m] t_1 = (t_0*t_1) ; ! phrase 6 ! [6: if the numbers boolean is true , say ~ - ~ , m , ~ (defended by slaves)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_922; ParaContent(); RunParagraphOn(); .L_Say589; .L_SayX536; } ! phrase 7 ! [7: decrease the attack strength by m] (Global_Vars-->45) = (Global_Vars-->45) - t_1; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule ( this is the enslaved have bad defence rule ): [ R_1853 ; ! phrase 1 ! [1: if the global defender is enslaved begin] if ((((Global_Vars-->42).p111_faction == I465_enslaved))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ + 2 (defender uninterested in own safety)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_923; ParaContent(); RunParagraphOn(); .L_Say590; .L_SayX537; } ! phrase 3 ! [3: increase the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) + 2; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule ( this is the domination attack modifier rule ): [ R_1884 ; ! phrase 1 ! [1: if the global defender dominates the global attacker begin] if ((((Relation_TestVtoV((Global_Vars-->42),Rel_Record_83,(Global_Vars-->41),false))))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ - 2 (afraid of [the global defender])[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_924; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_275; ParaContent(); RunParagraphOn(); .L_Say591; .L_SayX538; } ! phrase 3 ! [3: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule ( this is the do not parry with metal weapons against Bodmall's lightning attack rule ): [ R_1951 ; ! phrase 1 ! [1: if the global attacker is bodmall and the global defender is at parry begin] if (((((Global_Vars-->41) == I488_bodmall))) && ((((Adj_105_t1_v9((Global_Vars-->42))))))) { ! phrase 2 ! [2: if the global defender weapon is iron begin] if ((((Global_Vars-->44).p180_material == I166_iron))) { ! phrase 3 ! [3: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 4 ! [4: say ~ + 3 ([global defender weapon] acts as a lightning rod)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_925; ParaContent(); print (PrintShortName) (Global_Vars-->44); ParaContent(); print (PrintText) SC_926; ParaContent(); RunParagraphOn(); .L_Say592; .L_SayX539; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: increase the attack strength by 3] (Global_Vars-->45) = (Global_Vars-->45) + 3; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if the global defender weapon is silver begin] if ((((Global_Vars-->44).p180_material == I167_silver))) { ! phrase 9 ! [9: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 10 ! [10: say ~ + 5 ([global defender weapon] acts as a lightning rod)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_927; ParaContent(); print (PrintShortName) (Global_Vars-->44); ParaContent(); print (PrintText) SC_926; ParaContent(); RunParagraphOn(); .L_Say593; .L_SayX540; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: increase the attack strength by 5] (Global_Vars-->45) = (Global_Vars-->45) + 5; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An attack modifier rule ( this is the thorns running rule ): [ R_1966 ; ! phrase 1 ! [1: if the global defender is the player and the thorny bushes are in the location begin] if (((((Global_Vars-->42) == player))) && (((real_location == ContainerOf(I491_thorny_bushes))))) { ! phrase 2 ! [2: if the player is retreater or the player is runner begin] if (((((Adj_282_t1_v9(player))))) || ((((Adj_286_t1_v9(player)))))) { ! phrase 3 ! [3: unless the power of bodmall is granted begin] if (~~((((Adj_158_t1_v9(I492_power_of_bodmall)))))) { ! phrase 4 ! [4: say ~ + 3 (you are slowed down by the thorny bushes)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_928; ParaContent(); RunParagraphOn(); .L_Say594; .L_SayX541; ! phrase 5 ! [5: increase the attack strength by 3] (Global_Vars-->45) = (Global_Vars-->45) + 3; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: unless the global attacker weapon is ranged begin] if (~~((((Adj_177_t1_v9((Global_Vars-->43))))))) { ! phrase 8 ! [8: say ~ - 2 (your retreat covered by the thorny bushes)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_929; ParaContent(); RunParagraphOn(); .L_Say595; .L_SayX542; ! phrase 9 ! [9: decrease the attack strength by 2] (Global_Vars-->45) = (Global_Vars-->45) - 2; ! phrase 10 ! [10: end unless] } ! phrase 11 ! [11: end unless] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Last attack modifier rule ( this is the standard show results of the attack roll rule ): [ R_976 ; ! phrase 1 ! [1: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 2 ! [2: say ~ = ~ , the attack strength , ~, [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_930; ParaContent(); print (say__n=(Global_Vars-->45)); ParaContent(); print (PrintText) SC_592; ParaContent(); RunParagraphOn(); .L_Say596; .L_SayX543; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last attack modifier rule: [ R_1213 ; ! phrase 1 ! [1: turn on mentioning hotness] (PHR_1209_r22 ()); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last attack modifier rule: [ R_1232 ; ! phrase 1 ! [1: turn on mentioning rust] (PHR_1229_r24 ()); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: contact (B436_contact) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First contact rule ( this is the standard whether the attack hit rule ): ! --- now the mid-placed rules --- ! Rule 2/3 ! A contact rule when the global attacker is the jumping bomb ( this is the jumping bomb kamikaze rule ): ! === which is equally specific with === ! Rule 3/3 ! A contact rule when the global attacker is the giant tentacle ( this is the tentacle grapples rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First contact rule ( this is the standard whether the attack hit rule ): [ R_978 ; ! phrase 1 ! [1: if the attack strength is greater than the defence of the global defender begin] if ((((Global_Vars-->45) > GProperty(9, (Global_Vars-->42),p19_defence)))) { ! phrase 2 ! [2: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 3 ! [3: say ~[the global attacker] beat[s] [possessive of global defender] defence rating of ~ , the defence of the global defender , ~.~] say__p=1;ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_931; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); print (PrintText) SC_932; ParaContent(); @push self; print (say__n=GProperty(9, self=(Global_Vars-->42),p19_defence)); @pull self; ParaContent(); print (PrintText) SC_310; new_line; .L_Say597; .L_SayX544; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 7 ! [7: say ~[the global attacker] do[es] not overcome [possessive of global defender] defence rating of ~ , the defence of the global defender , ~[roman type].~] say__p=1;ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_933; ParaContent(); (PHR_902_r67 ());ParaContent(); print (PrintText) SC_934; ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); print (PrintText) SC_932; ParaContent(); @push self; print (say__n=GProperty(9, self=(Global_Vars-->42),p19_defence)); @pull self; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say598; .L_SayX545; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: rule fails] RulebookFails(); rtrue; ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A contact rule when the global attacker is the jumping bomb ( this is the jumping bomb kamikaze rule ): [ R_1800 ; if (((((((Global_Vars-->41) == I454_jumping_bomb)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1800, 1800); ! phrase 1 ! [1: say ~[roman type]When the jumping bomb hits [the global defender], it explodes with a terrible bang. [if the global defender is the player]Not even all the king's horses and all the king's men will be able to put the thousand pieces of your body back together[otherwise][The global defender] is killed instantly[end if][italic type].~] say__p=1;ParaContent(); style roman; ParaContent(); print (PrintText) SC_935; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_936; if (~~(((((Global_Vars-->42) == player))))) jump L_Say599; ParaContent(); print (PrintText) SC_937; jump L_SayX546; .L_Say599; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_938; .L_Say600; .L_SayX546; ParaContent(); style underline; ParaContent(); print (PrintText) SC_310; new_line; .L_Say601; .L_SayX547; ! phrase 2 ! [2: now the health of the global attacker is -10] WriteGProperty(9, (Global_Vars-->41),p14_health,-10); ! phrase 3 ! [3: now the health of the global defender is -10] WriteGProperty(9, (Global_Vars-->42),p14_health,-10); ! phrase 4 ! [4: have an event of the global attacker killing the global defender] (PHR_1126_r64 ((Global_Vars-->41),(Global_Vars-->42))); ! phrase 5 ! [5: if the player is not alive begin] if (((~~(((Adj_33_t1_v9(player))))))) { ! phrase 6 ! [6: end the game saying ~You exploded.~] deadflag=SC_939; story_complete=false; ! phrase 7 ! [7: rule fails] RulebookFails(); rtrue; ! phrase 8 ! [8: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1800, 1800, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A contact rule when the global attacker is the giant tentacle ( this is the tentacle grapples rule ): [ R_1890 ; if (((((((Global_Vars-->41) == I473_giant_tentacle)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1890, 1890); ! phrase 1 ! [1: say ~The giant tentacle [bold type]wraps itself around[italic type] [the global defender]!~] say__p=1;ParaContent(); print (PrintText) SC_940; ParaContent(); style bold; ParaContent(); print (PrintText) SC_941; ParaContent(); style underline; ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_426; new_line; .L_Say602; .L_SayX548; ! phrase 2 ! [2: now giant tentacle grapples the global defender] Relation_NowS1to1((Global_Vars-->42),p238_grappling,I473_giant_tentacle); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1890, 1890, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: damage modifier (B437_damage_modifier) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/32 ! First damage modifier rule: ! === which is equally specific with === ! Rule 2/32 ! First damage modifier rule: ! === which is equally specific with === ! Rule 3/32 ! First damage modifier rule ( this is the standard damage roll rule ): ! --- now the mid-placed rules --- ! Rule 4/32 ! A damage modifier rule when the inherent damage modifier of the global attacker is not 0 ( this is the inherent damage modifier rule ): ! >>> II - When/while requirement >>> ! Rule 5/32 ! A damage modifier rule when the global defender is a ghoul pc ( this is the ghoul gives damage resistance rule ): ! === which is equally specific with === ! Rule 6/32 ! A damage modifier rule when the global defender is a runner pc ( this is the running is very risky rule ): ! >>> II - When/while requirement >>> ! Rule 7/32 ! A damage modifier rule when the global attacker weapon is silver ( this is the silver damage rule ): ! === which is equally specific with === ! Rule 8/32 ! A damage modifier rule when the global attacker weapon is hot ( this is the heat increases damage rule ): ! === which is equally specific with === ! Rule 9/32 ! A damage modifier rule when the global attacker weapon is rusted ( this is the rust decreases damage rule ): ! === which is equally specific with === ! Rule 10/32 ! A damage modifier rule when the global attacker is rusted ( this is the rusted monster decreases damage rule ): ! === which is equally specific with === ! Rule 11/32 ! A damage modifier rule when the global defender is death-blessed ( this is the death-blessed rule ): ! === which is equally specific with === ! Rule 12/32 ! A damage modifier rule when the global defender is death-cursed ( this is the death-cursed rule ): ! === which is equally specific with === ! Rule 13/32 ! A damage modifier rule when the global attacker weapon is a dagger ( this is the dagger extra tension damage bonus rule ): ! === which is equally specific with === ! Rule 14/32 ! A damage modifier rule when the global attacker is the blood ape ( this is the blood ape size damage bonus rule ): ! === which is equally specific with === ! Rule 15/32 ! A damage modifier rule when the global defender is the ravenous armadillo ( this is the ravenous armadillo takes less damage rule ): ! === which is equally specific with === ! Rule 16/32 ! A damage modifier rule when the global attacker is the chain golem ( this is the chain golem damage depends on concentration rule ): ! === which is equally specific with === ! Rule 17/32 ! A damage modifier rule when the global attacker is Bodmall ( this is the iron or silver suit acts as a faraday cage rule ): ! >>> I - Number of aspects constrained >>> ! Rule 18/32 ! This is the new concentration damage modifier rule: ! === which is equally specific with === ! Rule 19/32 ! A damage modifier rule ( this is the standard tension damage modifier rule ): ! === which is equally specific with === ! Rule 20/32 ! A damage modifier rule ( this is the executioner's axe extra tension damage bonus rule ): ! === which is equally specific with === ! Rule 21/32 ! A damage modifier rule ( this is the plate mail damage modifiers rule ): ! === which is equally specific with === ! Rule 22/32 ! A damage modifier rule ( this is the dragon armour damage modifiers rule ): ! === which is equally specific with === ! Rule 23/32 ! A damage modifier rule ( this is the ment damage bonus rule ): ! === which is equally specific with === ! Rule 24/32 ! A damage modifier rule ( this is the Nomos damage bonus rule ): ! === which is equally specific with === ! Rule 25/32 ! A damage modifier rule ( this is the add ape power damage to damage rule ): ! === which is equally specific with === ! Rule 26/32 ! A damage modifier rule ( this is the power of the armadillo gives damage resistance rule ): ! === which is equally specific with === ! Rule 27/32 ! A damage modifier rule ( this is the scales gives damage resistance rule ): ! === which is equally specific with === ! Rule 28/32 ! A damage modifier rule ( this is the less damage when stunning rule ): ! === which is equally specific with === ! Rule 29/32 ! A damage modifier rule ( this is the scythe of slaying deals great damage to undead rule ): ! === which is equally specific with === ! Rule 30/32 ! A damage modifier rule ( this is the barkskin decreases damage rule ): ! --- now the last-placed rules --- ! Rule 31/32 ! Last damage modifier rule: ! === which is equally specific with === ! Rule 32/32 ! Last damage modifier rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First damage modifier rule: [ R_1233 ; ! phrase 1 ! [1: turn off mentioning rust] (PHR_1228_r23 ()); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! First damage modifier rule: [ R_1214 ; ! phrase 1 ! [1: turn off mentioning hotness] (PHR_1208_r21 ()); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First damage modifier rule ( this is the standard damage roll rule ): [ R_980 ; ! phrase 1 ! [1: unless damage die of the global attacker weapon is less than 1 begin] if (~~(((GProperty(9, (Global_Vars-->43),p20_damage_die) < 1)))) { ! phrase 2 ! [2: now the attack damage is a random number between 1 and the damage die of the global attacker weapon] (Global_Vars-->46) = R_DecimalNumber(1, GProperty(9, (Global_Vars-->43),p20_damage_die)) ; ! phrase 3 ! [3: end unless] } ! phrase 4 ! [4: increase the attack damage by weapon damage bonus of the global attacker weapon] (Global_Vars-->46) = (Global_Vars-->46) + GProperty(9, (Global_Vars-->43),p21_weapon_damage_bonus); ! phrase 5 ! [5: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 6 ! [6: say ~[The global attacker] deal[s] ~ , the attack damage , ~[run paragraph on]~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_942; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; ParaContent(); print (say__n=(Global_Vars-->46)); ParaContent(); RunParagraphOn(); .L_Say603; .L_SayX549; ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! A damage modifier rule when the inherent damage modifier of the global attacker is not 0 ( this is the inherent damage modifier rule ): [ R_1137 ; if ((((((~~((GProperty(9, (Global_Vars-->41),p36_inherent_damage_modifier) == 0)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1137, 1137); ! phrase 1 ! [1: say ~ + ~ , inherent damage modifier of the global attacker , ~ (inherent bonus)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); @push self; print (say__n=GProperty(9, self=(Global_Vars-->41),p36_inherent_damage_modifier)); @pull self; ParaContent(); print (PrintText) SC_896; ParaContent(); RunParagraphOn(); .L_Say604; .L_SayX550; ! phrase 2 ! [2: increase the attack damage by the inherent damage modifier of the global attacker] (Global_Vars-->46) = (Global_Vars-->46) + GProperty(9, (Global_Vars-->41),p36_inherent_damage_modifier); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1137, 1137, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A damage modifier rule when the global defender is a ghoul pc ( this is the ghoul gives damage resistance rule ): [ R_1272 ; if (((((((Adj_218_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1272, 1272); ! phrase 1 ! [1: say ~ - 1 (you are a ghoul)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_943; ParaContent(); RunParagraphOn(); .L_Say605; .L_SayX551; ! phrase 2 ! [2: decrease the attack damage by 1] (Global_Vars-->46) = (Global_Vars-->46) - 1; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1272, 1272, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! A damage modifier rule when the global defender is a runner pc ( this is the running is very risky rule ): [ R_2089 ; if (((((((Adj_286_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2089, 2089); ! phrase 1 ! [1: say ~ + 2 (you are running)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_944; ParaContent(); RunParagraphOn(); .L_Say606; .L_SayX552; ! phrase 2 ! [2: increase the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) + 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2089, 2089, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A damage modifier rule when the global attacker weapon is silver ( this is the silver damage rule ): [ R_1202 ; if (((((((Global_Vars-->43).p180_material == I167_silver)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1202, 1202); ! phrase 1 ! [1: if the global defender is not undead begin] if (((~~(((Global_Vars-->42).p111_faction == I158_undead))))) { ! phrase 2 ! [2: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 3 ! [3: say ~ - 2 (silver weapon)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_945; ParaContent(); RunParagraphOn(); .L_Say607; .L_SayX553; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: decrease the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) - 2; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 8 ! [8: say ~ + 4 (silver weapon)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_946; ParaContent(); RunParagraphOn(); .L_Say608; .L_SayX554; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: increase the attack damage by 4] (Global_Vars-->46) = (Global_Vars-->46) + 4; ! phrase 11 ! [11: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1202, 1202, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A damage modifier rule when the global attacker weapon is hot ( this is the heat increases damage rule ): [ R_1219 t_0 ! Local variable e.g. '?-1,-1?' = number ; if (((((((Adj_39_t1_v9((Global_Vars-->43))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1219, 1219); ! phrase 1 ! [1: if the global attacker weapon is not ranged begin] if (((~~(((Adj_177_t1_v9((Global_Vars-->43)))))))) { ! phrase 2 ! [2: let n be heat strength of the global attacker weapon] t_0 = GProperty(9, (Global_Vars-->43),p50_heat_strength); ! phrase 3 ! [3: decrease n by heat resistance of global defender] t_0 = t_0 - (PHR_1221_r80 ((Global_Vars-->42))); ! phrase 4 ! [4: if n greater than 0 begin] if (((t_0 > 0))) { ! phrase 5 ! [5: say ~ + [n] (heat)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_947; ParaContent(); RunParagraphOn(); .L_Say609; .L_SayX555; ! phrase 6 ! [6: increase the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) + t_0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1219, 1219, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A damage modifier rule when the global attacker weapon is rusted ( this is the rust decreases damage rule ): [ R_1235 ; if (((((((Adj_205_t1_v9((Global_Vars-->43))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1235, 1235); ! phrase 1 ! [1: say ~ - 2 (rust)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_877; ParaContent(); RunParagraphOn(); .L_Say610; .L_SayX556; ! phrase 2 ! [2: decrease the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1235, 1235, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A damage modifier rule when the global attacker is rusted ( this is the rusted monster decreases damage rule ): [ R_1236 ; if (((((((Adj_205_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1236, 1236); ! phrase 1 ! [1: say ~ - 2 (rust)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_877; ParaContent(); RunParagraphOn(); .L_Say611; .L_SayX557; ! phrase 2 ! [2: decrease the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1236, 1236, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A damage modifier rule when the global defender is death-blessed ( this is the death-blessed rule ): [ R_1261 ; if (((((((Adj_213_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1261, 1261); ! phrase 1 ! [1: if a random chance of 1 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 2 ! [2: say ~ - 10 (blessing of life)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_948; ParaContent(); RunParagraphOn(); .L_Say612; .L_SayX558; ! phrase 3 ! [3: decrease the attack damage by 10] (Global_Vars-->46) = (Global_Vars-->46) - 10; ! phrase 4 ! [4: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 5 ! [5: now the global defender is not death-blessed] (Adj_213_t3_v9((Global_Vars-->42))); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1261, 1261, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A damage modifier rule when the global defender is death-cursed ( this is the death-cursed rule ): [ R_1262 ; if (((((((Adj_215_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1262, 1262); ! phrase 1 ! [1: if a random chance of 1 in 20 succeeds begin] if (( (GenerateRandomNumber(1, 20) <= 1) )) { ! phrase 2 ! [2: say ~ + 10 (curse of death)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_949; ParaContent(); RunParagraphOn(); .L_Say613; .L_SayX559; ! phrase 3 ! [3: increase the attack damage by 10] (Global_Vars-->46) = (Global_Vars-->46) + 10; ! phrase 4 ! [4: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 5 ! [5: now the global defender is not death-cursed] (Adj_215_t3_v9((Global_Vars-->42))); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1262, 1262, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage modifier rule when the global attacker weapon is a dagger ( this is the dagger extra tension damage bonus rule ): [ R_1393 t_0 ! Local variable e.g. 'n' = number ; if (((((((Global_Vars-->43) ofclass K41_dagger)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1393, 1393); ! phrase 1 ! [1: let n be 0] t_0 = 0; ! phrase 2 ! [2: now n is the tension divided by 4] t_0 = (IntegerDivide((Global_Vars-->48),4)) ; ! phrase 3 ! [3: if n is not 0 begin] if (((~~((t_0 == 0))))) { ! phrase 4 ! [4: say ~ + ~ , n , ~ (dagger benefits from tension)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_882; ParaContent(); RunParagraphOn(); .L_Say614; .L_SayX560; ! phrase 5 ! [5: increase the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) + t_0; ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1393, 1393, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule when the global attacker is the blood ape ( this is the blood ape size damage bonus rule ): [ R_1703 ; if (((((((Global_Vars-->41) == I439_blood_ape)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1703, 1703); ! phrase 1 ! [1: if the size of the blood ape is begin] switch(GProperty(9, I439_blood_ape,p154_size)) { ! phrase 2 ! [2: -- small] I152_small: ! phrase 3 ! [3: if the numbers boolean is true , say ~ - 1 (small size)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_950; ParaContent(); RunParagraphOn(); .L_Say615; .L_SayX561; } ! phrase 4 ! [4: decrease the attack damage by 1] (Global_Vars-->46) = (Global_Vars-->46) - 1; ! phrase 5 ! [5: -- large] ; I154_large: ! phrase 6 ! [6: if the numbers boolean is true , say ~ + 2 (large size)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_951; ParaContent(); RunParagraphOn(); .L_Say616; .L_SayX562; } ! phrase 7 ! [7: increase the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) + 2; ! phrase 8 ! [8: -- huge] ; I155_huge: ! phrase 9 ! [9: if the numbers boolean is true , say ~ + 4 (huge size)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_952; ParaContent(); RunParagraphOn(); .L_Say617; .L_SayX563; } ! phrase 10 ! [10: increase the attack damage by 4] (Global_Vars-->46) = (Global_Vars-->46) + 4; ! phrase 11 ! [11: -- gargantuan] ; I156_gargantuan: ! phrase 12 ! [12: if the numbers boolean is true , say ~ + 8 (gargantuan size)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_953; ParaContent(); RunParagraphOn(); .L_Say618; .L_SayX564; } ! phrase 13 ! [13: increase the attack damage by 8] (Global_Vars-->46) = (Global_Vars-->46) + 8; ! phrase 14 ! [14: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1703, 1703, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule when the global defender is the ravenous armadillo ( this is the ravenous armadillo takes less damage rule ): [ R_1717 ; if (((((((Global_Vars-->42) == I442_ravenous_armadillo)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1717, 1717); ! phrase 1 ! [1: say ~ - 3 (tough scales)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_954; ParaContent(); RunParagraphOn(); .L_Say619; .L_SayX565; ! phrase 2 ! [2: decrease the attack damage by 3] (Global_Vars-->46) = (Global_Vars-->46) - 3; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1717, 1717, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule when the global attacker is the chain golem ( this is the chain golem damage depends on concentration rule ): [ R_1775 t_0 ! Local variable e.g. '?-1,-1?' = number ; if (((((((Global_Vars-->41) == I451_chain_golem)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1775, 1775); ! phrase 1 ! [1: if the concentration of the chain golem is not 0 begin] if (((~~((GProperty(9, I451_chain_golem,p26_concentration) == 0))))) { ! phrase 2 ! [2: let n be the concentration of the chain golem times 2] t_0 = (GProperty(9, I451_chain_golem,p26_concentration)*2) ; ! phrase 3 ! [3: if the numbers boolean is true , say ~ + [n] (golem spinning)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_955; ParaContent(); RunParagraphOn(); .L_Say620; .L_SayX566; } ! phrase 4 ! [4: increase the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) + t_0; ! phrase 5 ! [5: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1775, 1775, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule when the global attacker is Bodmall ( this is the iron or silver suit acts as a faraday cage rule ): [ R_1952 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (((((((Global_Vars-->41) == I488_bodmall)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1952, 1952); ! phrase 1 ! [1: if the global defender wears an iron suit or the global defender wears a silver suit begin] if (((Prop_264())) || ((Prop_265()))) { ! phrase 2 ! [2: let x be a random suit worn by the global defender] t_0 = (Prop_266()) ; ! phrase 3 ! [3: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 4 ! [4: say ~ - 3 ([the X] acts as a Faraday cage)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_956; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_957; ParaContent(); RunParagraphOn(); .L_Say621; .L_SayX567; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: decrease the attack damage by 3] (Global_Vars-->46) = (Global_Vars-->46) - 3; ! phrase 7 ! [7: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1952, 1952, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! This is the new concentration damage modifier rule: [ R_1776 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: unless global attacker is the chain golem begin] if (~~((((Global_Vars-->41) == I451_chain_golem)))) { ! phrase 2 ! [2: if the concentration of the global attacker is greater than 1 begin] if (((GProperty(9, (Global_Vars-->41),p26_concentration) > 1))) { ! phrase 3 ! [3: let the first dummy be 0] t_0 = 0; ! phrase 4 ! [4: if the concentration of the global attacker is 2 , now the first dummy is 2] if (((GProperty(9, (Global_Vars-->41),p26_concentration) == 2))) { t_0 = 2; } ! phrase 5 ! [5: if the concentration of the global attacker is 3 , now the first dummy is 4] if (((GProperty(9, (Global_Vars-->41),p26_concentration) == 3))) { t_0 = 4; } ! phrase 6 ! [6: if the numbers boolean is true , say ~ + ~ , the first dummy , ~ (concentration)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_898; ParaContent(); RunParagraphOn(); .L_Say622; .L_SayX568; } ! phrase 7 ! [7: increase the attack damage by the first dummy] (Global_Vars-->46) = (Global_Vars-->46) + t_0; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end unless] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! A damage modifier rule ( this is the standard tension damage modifier rule ): [ R_1070 t_0 ! Local variable e.g. 'bonus' = number ; ! phrase 1 ! [1: let the bonus be the tension divided by 3] t_0 = (IntegerDivide((Global_Vars-->48),3)) ; ! phrase 2 ! [2: if the bonus is not 0 begin] if (((~~((t_0 == 0))))) { ! phrase 3 ! [3: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 4 ! [4: say ~ + ~ , the bonus , ~ (tension)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_899; ParaContent(); RunParagraphOn(); .L_Say623; .L_SayX569; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: increase the attack damage by the bonus] (Global_Vars-->46) = (Global_Vars-->46) + t_0; ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage modifier rule ( this is the executioner's axe extra tension damage bonus rule ): [ R_1486 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global attacker weapon is the executioner's axe begin] if ((((Global_Vars-->43) == I345_executioner_s_axe))) { ! phrase 2 ! [2: let n be 0] t_0 = 0; ! phrase 3 ! [3: now n is the tension divided by 3] t_0 = (IntegerDivide((Global_Vars-->48),3)) ; ! phrase 4 ! [4: if n is not 0 begin] if (((~~((t_0 == 0))))) { ! phrase 5 ! [5: if the numbers boolean is true , say ~ + ~ , n , ~ (executioner's axe benefits from tension)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_958; ParaContent(); RunParagraphOn(); .L_Say624; .L_SayX570; } ! phrase 6 ! [6: increase the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) + t_0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage modifier rule ( this is the plate mail damage modifiers rule ): [ R_1494 ; ! phrase 1 ! [1: if the global defender is wearing the suit of plate mail begin] if ((((Global_Vars-->42) == WearerOf(I351_suit_of_plate_mail)))) { ! phrase 2 ! [2: if the global attacker weapon is armour-stoppable begin] if ((((Adj_179_t1_v9((Global_Vars-->43)))))) { ! phrase 3 ! [3: say ~ - 2 (plate mail)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_959; ParaContent(); RunParagraphOn(); .L_Say625; .L_SayX571; ! phrase 4 ! [4: decrease the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) - 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage modifier rule ( this is the dragon armour damage modifiers rule ): [ R_1520 ; ! phrase 1 ! [1: if the global defender is wearing the suit of dragon armour begin] if ((((Global_Vars-->42) == WearerOf(I358_suit_of_dragon_armour)))) { ! phrase 2 ! [2: if the main actor is not undead begin] if (((~~(((Global_Vars-->30).p111_faction == I158_undead))))) { ! phrase 3 ! [3: say ~ - 4 (dragon armour)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_960; ParaContent(); RunParagraphOn(); .L_Say626; .L_SayX572; ! phrase 4 ! [4: decrease the attack damage by 4] (Global_Vars-->46) = (Global_Vars-->46) - 4; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~ - 2 (dragon armour)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_961; ParaContent(); RunParagraphOn(); .L_Say627; .L_SayX573; ! phrase 7 ! [7: decrease the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) - 2; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage modifier rule ( this is the ment damage bonus rule ): [ R_1534 ; ! phrase 1 ! [1: if the global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 2 ! [2: if ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 3 ! [3: if the numbers boolean is true , say ~ + [ment bonus] (ment)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_913; ParaContent(); RunParagraphOn(); .L_Say628; .L_SayX574; } ! phrase 4 ! [4: increase the attack damage by ment bonus] (Global_Vars-->46) = (Global_Vars-->46) + (PHR_1528_r78 ()); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if the global defender is the player begin] if ((((Global_Vars-->42) == player))) { ! phrase 8 ! [8: if ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 9 ! [9: if the numbers boolean is true , say ~ - [ment bonus] (ment makes you shrug off damage)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_962; ParaContent(); RunParagraphOn(); .L_Say629; .L_SayX575; } ! phrase 10 ! [10: decrease the attack damage by ment bonus] (Global_Vars-->46) = (Global_Vars-->46) - (PHR_1528_r78 ()); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A damage modifier rule ( this is the Nomos damage bonus rule ): [ R_1577 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if nomos bonus is true and the global attacker is the player begin] if ((((((Global_Vars-->103) && true) == (1 && true)))) && ((((Global_Vars-->41) == player)))) { ! phrase 2 ! [2: let n be 0] t_0 = 0; ! phrase 3 ! [3: if the global defender provides the property level begin] if (((WhetherProvides((Global_Vars-->42), false, p31_level)))) { ! phrase 4 ! [4: now n is 1 + level of the global defender] t_0 = (1+GProperty(9, (Global_Vars-->42),p31_level)) ; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: now n is 2] t_0 = 2; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if the numbers boolean is true , say ~ + [n] (the law is with you)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_963; ParaContent(); RunParagraphOn(); .L_Say630; .L_SayX576; } ! phrase 9 ! [9: increase the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) + t_0; ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule ( this is the add ape power damage to damage rule ): [ R_1712 ; ! phrase 1 ! [1: if the global attacker is the player and the ape power damage is not 0 begin] if (((((Global_Vars-->41) == player))) && (((~~(((Global_Vars-->119) == 0)))))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ + [ape power damage] (power of the ape)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=(Global_Vars-->119)); ParaContent(); print (PrintText) SC_964; ParaContent(); RunParagraphOn(); .L_Say631; .L_SayX577; } ! phrase 3 ! [3: increase the attack damage by ape power damage] (Global_Vars-->46) = (Global_Vars-->46) + (Global_Vars-->119); ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule ( this is the power of the armadillo gives damage resistance rule ): [ R_1736 ; ! phrase 1 ! [1: if the global defender is the player and the power of the armadillo is granted begin] if (((((Global_Vars-->42) == player))) && ((((Adj_158_t1_v9(I445_power_of_the_armadillo)))))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ - 1 (armadillo)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_965; ParaContent(); RunParagraphOn(); .L_Say632; .L_SayX578; } ! phrase 3 ! [3: decrease the attack damage by 1] (Global_Vars-->46) = (Global_Vars-->46) - 1; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule ( this is the scales gives damage resistance rule ): [ R_1738 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global defender is the player and the scales number is greater than 0 begin] if (((((Global_Vars-->42) == player))) && ((((Global_Vars-->120) > 0)))) { ! phrase 2 ! [2: let n be the scales number] t_0 = (Global_Vars-->120); ! phrase 3 ! [3: if the numbers boolean is true , say ~ - [n] (scales)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_966; ParaContent(); RunParagraphOn(); .L_Say633; .L_SayX579; } ! phrase 4 ! [4: decrease the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) - t_0; ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule ( this is the less damage when stunning rule ): [ R_1754 ; ! phrase 1 ! [1: if the global attacker is at-stun begin] if ((((Adj_268_t1_v9((Global_Vars-->41)))))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ - 2 (stunning)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_967; ParaContent(); RunParagraphOn(); .L_Say634; .L_SayX580; } ! phrase 3 ! [3: decrease the attack damage by 2] (Global_Vars-->46) = (Global_Vars-->46) - 2; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule ( this is the scythe of slaying deals great damage to undead rule ): [ R_1814 ; ! phrase 1 ! [1: if global attacker weapon is the scythe of slaying and global defender is undead begin] if (((((Global_Vars-->43) == I460_scythe_of_slaying))) && ((((Global_Vars-->42).p111_faction == I158_undead)))) { ! phrase 2 ! [2: if the numbers boolean is true , say ~ + 5 (slaying undead)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_968; ParaContent(); RunParagraphOn(); .L_Say635; .L_SayX581; } ! phrase 3 ! [3: increase the attack damage by 5] (Global_Vars-->46) = (Global_Vars-->46) + 5; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage modifier rule ( this is the barkskin decreases damage rule ): [ R_1960 ; ! phrase 1 ! [1: if the global defender is barkskinned begin] if ((((Adj_273_t1_v9((Global_Vars-->42)))))) { ! phrase 2 ! [2: unless the global attacker weapon is an axe begin] if (~~((((Global_Vars-->43) ofclass K42_axe)))) { ! phrase 3 ! [3: if the numbers boolean is true , say ~ - 1 (barkskin)[run paragraph on]~] if (((((Global_Vars-->40) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_969; ParaContent(); RunParagraphOn(); .L_Say636; .L_SayX582; } ! phrase 4 ! [4: decrease the attack damage by 1] (Global_Vars-->46) = (Global_Vars-->46) - 1; ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last damage modifier rule: [ R_1215 ; ! phrase 1 ! [1: turn on mentioning hotness] (PHR_1209_r22 ()); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last damage modifier rule: [ R_1234 ; ! phrase 1 ! [1: turn on mentioning rust] (PHR_1229_r24 ()); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: damage multiplier (B438_damage_multiplier) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/9 ! A damage multiplier rule when the hit protection of the global defender is greater than 0 ( this is the hit protection damage multiplier rule ): ! === which is equally specific with === ! Rule 2/9 ! A damage multiplier rule when the global defender wears the robe of the dead mage ( this is the robe of the dead mage damage multiplier rule ): ! === which is equally specific with === ! Rule 3/9 ! A damage multiplier rule when the player has the rod of the master builder ( this is the rod of master builder damage multiplier rule ): ! === which is equally specific with === ! Rule 4/9 ! A damage multiplier rule when the global attacker is the rotting corpse ( this is the limbless rotting corpse can't attack rule ): ! === which is equally specific with === ! Rule 5/9 ! A damage multiplier rule when the global defender is the smoke demon ( this is the smoke demon denseness multiplier rule ): ! >>> I - Number of aspects constrained >>> ! Rule 6/9 ! A damage multiplier rule ( this is the ethereal damage multiplier rule ): ! --- now the last-placed rules --- ! Rule 7/9 ! Last damage multiplier rule ( this is the can't deal negative damage rule ): ! === which is equally specific with === ! Rule 8/9 ! Last damage multiplier rule when the global attacker is the giant tentacle ( this is the show the damage dealt by the giant tentacle rule ): ! === which is equally specific with === ! Rule 9/9 ! Last damage multiplier rule ( this is the standard show the attack damage dealt rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage multiplier rule when the hit protection of the global defender is greater than 0 ( this is the hit protection damage multiplier rule ): [ R_1466 ; if ((((((GProperty(9, (Global_Vars-->42),p59_hit_protection) > 0)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1466, 1466); ! phrase 1 ! [1: say ~ - 100% (protection)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_970; ParaContent(); RunParagraphOn(); .L_Say637; .L_SayX583; ! phrase 2 ! [2: now the attack damage is 0] (Global_Vars-->46) = 0; ! phrase 3 ! [3: decrease hit protection of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p59_hit_protection,GProperty(9, (Global_Vars-->42),p59_hit_protection) - 1); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1466, 1466, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage multiplier rule when the global defender wears the robe of the dead mage ( this is the robe of the dead mage damage multiplier rule ): [ R_1510 t_0 ! Local variable e.g. '?-1,-1?' = number ; if (((((((Global_Vars-->42) == WearerOf(I355_robe_of_the_dead_mage))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1510, 1510); ! phrase 1 ! [1: if concentration of the global defender is begin] switch(GProperty(9, (Global_Vars-->42),p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~ + 25% (robe of the dead mage)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_971; ParaContent(); RunParagraphOn(); .L_Say638; .L_SayX584; ! phrase 4 ! [4: increase the attack damage by the attack damage divided by 4] (Global_Vars-->46) = (Global_Vars-->46) + (IntegerDivide((Global_Vars-->46),4)) ; ! phrase 5 ! [5: -- 2] ; 2: ! phrase 6 ! [6: say ~ +50% (robe of the dead mage)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_972; ParaContent(); RunParagraphOn(); .L_Say639; .L_SayX585; ! phrase 7 ! [7: increase the attack damage by the attack damage divided by 2] (Global_Vars-->46) = (Global_Vars-->46) + (IntegerDivide((Global_Vars-->46),2)) ; ! phrase 8 ! [8: -- 3] ; 3: ! phrase 9 ! [9: say ~ + 75% (robe of the dead mage)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_973; ParaContent(); RunParagraphOn(); .L_Say640; .L_SayX586; ! phrase 10 ! [10: let n be the attack damage divided by 4] t_0 = (IntegerDivide((Global_Vars-->46),4)) ; ! phrase 11 ! [11: now the attack damage is the attack damage times 2] (Global_Vars-->46) = ((Global_Vars-->46)*2) ; ! phrase 12 ! [12: decrease the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) - t_0; ! phrase 13 ! [13: -- 4] ; 4: ! phrase 14 ! [14: say ~ + 100% (robe of the dead mage)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_974; ParaContent(); RunParagraphOn(); .L_Say641; .L_SayX587; ! phrase 15 ! [15: now the attack damage is the attack damage times 2] (Global_Vars-->46) = ((Global_Vars-->46)*2) ; ! phrase 16 ! [16: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1510, 1510, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A damage multiplier rule when the player has the rod of the master builder ( this is the rod of master builder damage multiplier rule ): [ R_1517 ; if ((((((player == OwnerOf(I357_rod_of_the_master_build))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1517, 1517); ! phrase 1 ! [1: if the global defender is the player and ( the player is retreater or the player is runner ) begin] if (((((Global_Vars-->42) == player))) && (((((Adj_282_t1_v9(player))))) || ((((Adj_286_t1_v9(player))))))) { ! phrase 2 ! [2: say ~ - 50% (rod of the master builder)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_975; ParaContent(); RunParagraphOn(); .L_Say642; .L_SayX588; ! phrase 3 ! [3: now the attack damage is the attack damage divided by 2] (Global_Vars-->46) = (IntegerDivide((Global_Vars-->46),2)) ; ! phrase 4 ! [4: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1517, 1517, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage multiplier rule when the global attacker is the rotting corpse ( this is the limbless rotting corpse can't attack rule ): [ R_2015 ; if (((((((Global_Vars-->41) == I501_rotting_corpse)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2015, 2015); ! phrase 1 ! [1: if limbs of the rotting corpse is 0 begin] if ((((PHR_2006_r81 ()) == 0))) { ! phrase 2 ! [2: say ~ - 100% (no means of attack)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_976; ParaContent(); RunParagraphOn(); .L_Say643; .L_SayX589; ! phrase 3 ! [3: now the attack damage is 0] (Global_Vars-->46) = 0; ! phrase 4 ! [4: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2015, 2015, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A damage multiplier rule when the global defender is the smoke demon ( this is the smoke demon denseness multiplier rule ): [ R_2058 t_0 ! Local variable e.g. '?-1,-1?' = number ; if (((((((Global_Vars-->42) == I517_smoke_demon)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_2058, 2058); ! phrase 1 ! [1: if concentration of the smoke demon is begin] switch(GProperty(9, I517_smoke_demon,p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~ + 25% (smoke demon is somewhat dense)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_977; ParaContent(); RunParagraphOn(); .L_Say644; .L_SayX590; ! phrase 4 ! [4: increase the attack damage by the attack damage divided by 4] (Global_Vars-->46) = (Global_Vars-->46) + (IntegerDivide((Global_Vars-->46),4)) ; ! phrase 5 ! [5: -- 2] ; 2: ! phrase 6 ! [6: say ~ +50% (smoke demon is quite dense)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_978; ParaContent(); RunParagraphOn(); .L_Say645; .L_SayX591; ! phrase 7 ! [7: increase the attack damage by the attack damage divided by 2] (Global_Vars-->46) = (Global_Vars-->46) + (IntegerDivide((Global_Vars-->46),2)) ; ! phrase 8 ! [8: -- 3] ; 3: ! phrase 9 ! [9: say ~ + 75% (smoke demon is very dense)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_979; ParaContent(); RunParagraphOn(); .L_Say646; .L_SayX592; ! phrase 10 ! [10: let n be the attack damage divided by 4] t_0 = (IntegerDivide((Global_Vars-->46),4)) ; ! phrase 11 ! [11: now the attack damage is the attack damage times 2] (Global_Vars-->46) = ((Global_Vars-->46)*2) ; ! phrase 12 ! [12: decrease the attack damage by n] (Global_Vars-->46) = (Global_Vars-->46) - t_0; ! phrase 13 ! [13: -- 4] ; 4: ! phrase 14 ! [14: say ~ + 100% (smoke demon is extremely dense)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_980; ParaContent(); RunParagraphOn(); .L_Say647; .L_SayX593; ! phrase 15 ! [15: now the attack damage is the attack damage times 2] (Global_Vars-->46) = ((Global_Vars-->46)*2) ; ! phrase 16 ! [16: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_2058, 2058, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A damage multiplier rule ( this is the ethereal damage multiplier rule ): [ R_1340 ; ! phrase 1 ! [1: if the global defender is ethereal and the global attacker is not ethereal begin] if (((((Adj_231_t1_v9((Global_Vars-->42)))))) && (((~~(((Adj_231_t1_v9((Global_Vars-->41))))))))) { ! phrase 2 ! [2: say ~ - 100% (defender ethereal)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_981; ParaContent(); RunParagraphOn(); .L_Say648; .L_SayX594; ! phrase 3 ! [3: now the attack damage is 0] (Global_Vars-->46) = 0; ! phrase 4 ! [4: decrease hit protection of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p59_hit_protection,GProperty(9, (Global_Vars-->42),p59_hit_protection) - 1); ! phrase 5 ! [5: otherwise if the global attacker is ethereal] } else if ((((Adj_231_t1_v9((Global_Vars-->41)))))) { ! phrase 6 ! [6: say ~ - 100% (attacker ethereal)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_982; ParaContent(); RunParagraphOn(); .L_Say649; .L_SayX595; ! phrase 7 ! [7: now the attack damage is 0] (Global_Vars-->46) = 0; ! phrase 8 ! [8: decrease hit protection of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p59_hit_protection,GProperty(9, (Global_Vars-->42),p59_hit_protection) - 1); ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Last damage multiplier rule ( this is the can't deal negative damage rule ): [ R_982 ; ! phrase 1 ! [1: if the attack damage is less than 0 begin] if ((((Global_Vars-->46) < 0))) { ! phrase 2 ! [2: now the attack damage is 0] (Global_Vars-->46) = 0; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Last damage multiplier rule when the global attacker is the giant tentacle ( this is the show the damage dealt by the giant tentacle rule ): [ R_1919 ; if (((((((Global_Vars-->41) == I473_giant_tentacle)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1919, 1919); ! phrase 1 ! [1: say ~ = [bold type]~ , the attack damage , ~ damage[roman type][italic type], ~] say__p=1;ParaContent(); print (PrintText) SC_930; ParaContent(); style bold; ParaContent(); print (say__n=(Global_Vars-->46)); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); style underline; ParaContent(); print (PrintText) SC_592; .L_Say650; .L_SayX596; ! phrase 2 ! [2: if the attack damage is less than 1 begin] if ((((Global_Vars-->46) < 1))) { ! phrase 3 ! [3: unless the giant tentacle grapples the global defender begin] if (~~(((I473_giant_tentacle == ((Global_Vars-->42).p238_grappling))))) { ! phrase 4 ! [4: say ~allowing [the global defender] to escape unscathed.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_983; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_984; ParaContent(); RunParagraphOn(); .L_Say651; .L_SayX597; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~but holds on to [the global defender].[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_985; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say652; .L_SayX598; ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: if the attack damage is less than the health of the global defender begin] if ((((Global_Vars-->46) < GProperty(9, (Global_Vars-->42),p14_health)))) { ! phrase 10 ! [10: say ~wounding [the global defender] to ~ , health of the global defender minus the attack damage , ~ health.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_986; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_443; ParaContent(); print (say__n= (GProperty(9, (Global_Vars-->42),p14_health)-(Global_Vars-->46)) ); ParaContent(); print (PrintText) SC_987; ParaContent(); RunParagraphOn(); .L_Say653; .L_SayX599; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~killing [the name of the global defender].[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_988; ParaContent(); (PHR_830_r63 ((Global_Vars-->42)));ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say654; .L_SayX600; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: say ~[roman type][paragraph break]~] say__p=1;ParaContent(); style roman; ParaContent(); DivideParagraphPoint(); new_line; .L_Say655; .L_SayX601; ! phrase 16 ! [16: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1919, 1919, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Last damage multiplier rule ( this is the standard show the attack damage dealt rule ): [ R_983 ; ! phrase 1 ! [1: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 2 ! [2: say ~ = [bold type]~ , the attack damage , ~ damage[roman type][italic type], ~] say__p=1;ParaContent(); print (PrintText) SC_930; ParaContent(); style bold; ParaContent(); print (say__n=(Global_Vars-->46)); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); style underline; ParaContent(); print (PrintText) SC_592; .L_Say656; .L_SayX602; ! phrase 3 ! [3: if the the attack damage is less than 1 begin] if ((((Global_Vars-->46) < 1))) { ! phrase 4 ! [4: say ~allowing [the global defender] to escape unscathed.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_983; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_984; ParaContent(); RunParagraphOn(); .L_Say657; .L_SayX603; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: if the the attack damage is less than the health of the global defender begin] if ((((Global_Vars-->46) < GProperty(9, (Global_Vars-->42),p14_health)))) { ! phrase 7 ! [7: say ~wounding [the global defender] to ~ , health of the global defender minus the attack damage , ~ health.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_986; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_443; ParaContent(); print (say__n= (GProperty(9, (Global_Vars-->42),p14_health)-(Global_Vars-->46)) ); ParaContent(); print (PrintText) SC_987; ParaContent(); RunParagraphOn(); .L_Say658; .L_SayX604; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: say ~killing [the name of the global defender].[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_988; ParaContent(); (PHR_830_r63 ((Global_Vars-->42)));ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say659; .L_SayX605; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: say ~[roman type][paragraph break]~] say__p=1;ParaContent(); style roman; ParaContent(); DivideParagraphPoint(); new_line; .L_Say660; .L_SayX606; ! phrase 13 ! [13: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: aftereffects (B439_aftereffects) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/24 ! An aftereffects rule when the global defender is dead ( this is the unready weapons of dead person rule ): ! === which is equally specific with === ! Rule 2/24 ! An aftereffects rule when the attack damage is greater than 0 ( this is the standard reduce tension after hit rule ): ! === which is equally specific with === ! Rule 3/24 ! Aftereffects rule when the global attacker is tentacle-confused ( this is the no longer tentacle-confused after attacking rule ): ! >>> I - Number of aspects constrained >>> ! Rule 4/24 ! An aftereffects rule ( this is the modify initiative based on combat results rule ): ! === which is equally specific with === ! Rule 5/24 ! An aftereffects rule ( this is the alternative lose concentration when hit rule ): ! === which is equally specific with === ! Rule 6/24 ! An aftereffects rule ( this is the killing after attack rule ): ! === which is equally specific with === ! Rule 7/24 ! An aftereffects rule ( this is the heat can cause weapons to break rule ): ! === which is equally specific with === ! Rule 8/24 ! Aftereffects rule ( this is the tormenting necklace rule ): ! === which is equally specific with === ! Rule 9/24 ! An aftereffects rule ( this is the vampiric dagger leeches rule ): ! === which is equally specific with === ! Rule 10/24 ! An aftereffects rule ( this is the glass cannon shatters when used to parry rule ): ! === which is equally specific with === ! Rule 11/24 ! An aftereffects rule ( this is the hit may send you off the bridge of doom rule ): ! === which is equally specific with === ! Rule 12/24 ! An aftereffects rule ( this is the hit may send you off the vast staircase rule ): ! === which is equally specific with === ! Rule 13/24 ! An aftereffects rule ( this is the scatter the daggers rule ): ! === which is equally specific with === ! Rule 14/24 ! Aftereffects rule ( this is the blood ape grows in size when hit rule ): ! === which is equally specific with === ! Rule 15/24 ! Aftereffects rule ( this is the increase ape damage rule ): ! === which is equally specific with === ! Rule 16/24 ! Aftereffects rule ( this is the stunning rule ): ! === which is equally specific with === ! Rule 17/24 ! An aftereffects rule ( this is the scythe of oxidation rusts stuff rule ): ! === which is equally specific with === ! Rule 18/24 ! An aftereffects rule ( this is the domination stops after a hit rule ): ! === which is equally specific with === ! Rule 19/24 ! An aftereffects rule ( this is the tentacle lets go when damaged rule ): ! === which is equally specific with === ! Rule 20/24 ! An aftereffects rule ( this is the dagger of draining aftereffects rule ): ! === which is equally specific with === ! Rule 21/24 ! An aftereffects rule ( this is the rotting corpse loses limbs rule ): ! --- now the last-placed rules --- ! Rule 22/24 ! Last aftereffects rule ( this is the award Deathblow achievement rule ): ! === which is equally specific with === ! Rule 23/24 ! Last aftereffects rule ( this is the award from the shadows achievement rule ): ! === which is equally specific with === ! Rule 24/24 ! Last aftereffects rule ( this is the award injury to insult achievement rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An aftereffects rule when the global defender is dead ( this is the unready weapons of dead person rule ): [ R_989 ; if (((((((~~Adj_33_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_989, 989); ! phrase 1 ! [1: now all readied weapons enclosed by the global defender are not readied] Prop_267(); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_989, 989, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An aftereffects rule when the attack damage is greater than 0 ( this is the standard reduce tension after hit rule ): [ R_1071 ; if (((((((Global_Vars-->46) > 0)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1071, 1071); ! phrase 1 ! [1: now the tension is the tension minus 4] (Global_Vars-->48) = ((Global_Vars-->48)-4) ; ! phrase 2 ! [2: now the tension is the tension times 8] (Global_Vars-->48) = ((Global_Vars-->48)*8) ; ! phrase 3 ! [3: now the tension is the tension divided by 10] (Global_Vars-->48) = (IntegerDivide((Global_Vars-->48),10)) ; ! phrase 4 ! [4: if the tension is less than 0 begin] if ((((Global_Vars-->48) < 0))) { ! phrase 5 ! [5: now the tension is 0] (Global_Vars-->48) = 0; ! phrase 6 ! [6: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1071, 1071, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Aftereffects rule when the global attacker is tentacle-confused ( this is the no longer tentacle-confused after attacking rule ): [ R_1913 ; if (((((((Adj_272_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1913, 1913); ! phrase 1 ! [1: say ~[The global attacker] [is-are] no longer confused.~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_885_r49 ());ParaContent(); print (PrintText) SC_989; new_line; .L_Say661; .L_SayX607; ! phrase 2 ! [2: now the global attacker is not tentacle-confused] (Adj_272_t3_v9((Global_Vars-->41))); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1913, 1913, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An aftereffects rule ( this is the modify initiative based on combat results rule ): [ R_990 ; ! phrase 1 ! [1: if the attack damage is greater than 0 begin] if ((((Global_Vars-->46) > 0))) { ! phrase 2 ! [2: decrease the initiative of the global defender by 2] WriteGProperty(9, (Global_Vars-->42),p15_initiative,GProperty(9, (Global_Vars-->42),p15_initiative) - 2); ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: decrease the initiative of the global attacker by 2] WriteGProperty(9, (Global_Vars-->41),p15_initiative,GProperty(9, (Global_Vars-->41),p15_initiative) - 2); ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An aftereffects rule ( this is the alternative lose concentration when hit rule ): [ R_1513 ; ! phrase 1 ! [1: unless global defender wears the robe of the dead mage begin] if (~~((((Global_Vars-->42) == WearerOf(I355_robe_of_the_dead_mage))))) { ! phrase 2 ! [2: if the the attack damage is greater than 0 and the global defender is alive begin] if (((((Global_Vars-->46) > 0))) && ((((Adj_33_t1_v9((Global_Vars-->42))))))) { ! phrase 3 ! [3: let the global defender lose concentration] (PHR_1016_r82 ((Global_Vars-->42))); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! An aftereffects rule ( this is the killing after attack rule ): [ R_1060 ; ! phrase 1 ! [1: if the global defender is dead begin] if ((((~~Adj_33_t1_v9((Global_Vars-->42)))))) { ! phrase 2 ! [2: have an event of the global attacker killing the global defender] (PHR_1126_r64 ((Global_Vars-->41),(Global_Vars-->42))); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! An aftereffects rule ( this is the heat can cause weapons to break rule ): [ R_1220 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number ; ! phrase 1 ! [1: let n be heat strength of the global attacker weapon] t_0 = GProperty(9, (Global_Vars-->43),p50_heat_strength); ! phrase 2 ! [2: let m be heat strength of the global defender weapon] t_1 = GProperty(9, (Global_Vars-->44),p50_heat_strength); ! phrase 3 ! [3: if n is greater than 0 and global attacker weapon is not ranged begin] if ((((t_0 > 0))) && (((~~(((Adj_177_t1_v9((Global_Vars-->43))))))))) { ! phrase 4 ! [4: if the global attacker weapon is corruptible begin] if ((((Adj_254_t1_v9((Global_Vars-->43)))))) { ! phrase 5 ! [5: if the attack damage is greater than 0 or defender is at parry begin] if (((((Global_Vars-->46) > 0))) || ((((Adj_105_t1_v9(I484_defender_of_aite)))))) { ! phrase 6 ! [6: if a random chance of n in 50 succeeds begin] if (( (GenerateRandomNumber(1, 50) <= t_0) )) { ! phrase 7 ! [7: turn off mentioning hotness] (PHR_1208_r21 ()); ! phrase 8 ! [8: say ~[The global attacker weapon], weakened by being heated, is [bold type]destroyed[roman type]!~] say__p=1;ParaContent(); print (The) (Global_Vars-->43); ParaContent(); print (PrintText) SC_990; ParaContent(); style bold; ParaContent(); print (PrintText) SC_991; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say662; .L_SayX608; ! phrase 9 ! [9: turn on mentioning hotness] (PHR_1209_r22 ()); ! phrase 10 ! [10: remove global attacker weapon from play] RemoveFromPlay((Global_Vars-->43)); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: if the attack damage is less than 0 and the defender is at parry begin] if (((((Global_Vars-->46) < 0))) && ((((Adj_105_t1_v9(I484_defender_of_aite)))))) { ! phrase 16 ! [16: if m is greater than 0 begin] if (((t_1 > 0))) { ! phrase 17 ! [17: if the global defender weapon is corruptible begin] if ((((Adj_254_t1_v9((Global_Vars-->44)))))) { ! phrase 18 ! [18: if a random chance of n in 50 succeeds begin] if (( (GenerateRandomNumber(1, 50) <= t_0) )) { ! phrase 19 ! [19: turn off mentioning hotness] (PHR_1208_r21 ()); ! phrase 20 ! [20: say ~[The global defender weapon], weakened by being heated, is [bold type]destroyed[roman type]!~] say__p=1;ParaContent(); print (The) (Global_Vars-->44); ParaContent(); print (PrintText) SC_990; ParaContent(); style bold; ParaContent(); print (PrintText) SC_991; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say663; .L_SayX609; ! phrase 21 ! [21: turn on mentioning hotness] (PHR_1209_r22 ()); ! phrase 22 ! [22: remove global defender weapon from play] RemoveFromPlay((Global_Vars-->44)); ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Aftereffects rule ( this is the tormenting necklace rule ): [ R_1414 ; ! phrase 1 ! [1: if the player wears the tormenting necklace begin] if (((player == WearerOf(I274_tormenting_necklace)))) { ! phrase 2 ! [2: if the attack damage is greater than 0 begin] if ((((Global_Vars-->46) > 0))) { ! phrase 3 ! [3: decrease initiative of the global defender by 2] WriteGProperty(9, (Global_Vars-->42),p15_initiative,GProperty(9, (Global_Vars-->42),p15_initiative) - 2); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An aftereffects rule ( this is the vampiric dagger leeches rule ): [ R_1489 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global attacker weapon is the vampiric dagger and the the attack damage is greater than 0 begin] if (((((Global_Vars-->43) == I346_vampiric_dagger))) && ((((Global_Vars-->46) > 0)))) { ! phrase 2 ! [2: let n be a random number between 1 and the attack damage] t_0 = R_DecimalNumber(1, (Global_Vars-->46)) ; ! phrase 3 ! [3: unless the global attacker is the player and the player form of the player is vampire begin] if (~~(((((Global_Vars-->41) == player))) && (((GProperty(9, player,p201_player_form) == I183_vampire))))) { ! phrase 4 ! [4: if n is greater than 1 begin] if (((t_0 > 1))) { ! phrase 5 ! [5: now n is a random number between 1 and 2] t_0 = R_DecimalNumber(1, 2) ; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: let m be permanent health of the global attacker] t_1 = GProperty(9, (Global_Vars-->41),p17_permanent_health); ! phrase 8 ! [8: decrease m by health of the global attacker] t_1 = t_1 - GProperty(9, (Global_Vars-->41),p14_health); ! phrase 9 ! [9: if m is less than n begin] if (((t_1 < t_0))) { ! phrase 10 ! [10: now n is m] t_0 = t_1; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: if n is less than 0 begin] if (((t_0 < 0))) { ! phrase 13 ! [13: now n is 0] t_0 = 0; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end unless] } ! phrase 16 ! [16: increase health of the global attacker by n] WriteGProperty(9, (Global_Vars-->41),p14_health,GProperty(9, (Global_Vars-->41),p14_health) + t_0); ! phrase 17 ! [17: unless n is 0 begin] if (~~(((t_0 == 0)))) { ! phrase 18 ! [18: say ~The vampiric dagger [bold type]transfers [n] health[roman type] to [the global attacker].~] say__p=1;ParaContent(); print (PrintText) SC_992; ParaContent(); style bold; ParaContent(); print (PrintText) SC_993; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_994; ParaContent(); style roman; ParaContent(); print (PrintText) SC_443; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; new_line; .L_Say664; .L_SayX610; ! phrase 19 ! [19: end unless] } ! phrase 20 ! [20: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An aftereffects rule ( this is the glass cannon shatters when used to parry rule ): [ R_1509 ; ! phrase 1 ! [1: if the global defender weapon is the glass cannon begin] if ((((Global_Vars-->44) == I354_glass_cannon))) { ! phrase 2 ! [2: if the global defender is at parry and the the attack damage is 0 begin] if (((((Adj_105_t1_v9((Global_Vars-->42)))))) && ((((Global_Vars-->46) == 0)))) { ! phrase 3 ! [3: say ~The impact shatters the glass cannon.~] say__p=1;ParaContent(); print (PrintText) SC_995; new_line; .L_Say665; .L_SayX611; ! phrase 4 ! [4: remove the glass cannon from play] RemoveFromPlay(I354_glass_cannon); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An aftereffects rule ( this is the hit may send you off the bridge of doom rule ): [ R_1562 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if global defender can fall begin] if (((PHR_1263_r83 ((Global_Vars-->42))))) { ! phrase 2 ! [2: if the location is the bridge of doom and the global defender is alive begin] if ((((real_location == I384_bridge_of_doom))) && ((((Adj_33_t1_v9((Global_Vars-->42))))))) { ! phrase 3 ! [3: if the attack damage is greater than 0 begin] if ((((Global_Vars-->46) > 0))) { ! phrase 4 ! [4: let n be a random number between 0 and 12] t_0 = R_DecimalNumber(0, 12) ; ! phrase 5 ! [5: if n is less than the attack damage begin] if (((t_0 < (Global_Vars-->46)))) { ! phrase 6 ! [6: say ~Reeling from the blow, [the global defender] balance[s] on the edge of the bridge. [italic type]~] say__p=1;ParaContent(); print (PrintText) SC_996; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_997; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_998; ParaContent(); style underline; .L_Say666; .L_SayX612; ! phrase 7 ! [7: let n be a random number between 6 and 10] t_0 = R_DecimalNumber(6, 10) ; ! phrase 8 ! [8: test the dexterity of the global defender against n] (PHR_1135_r61 ((Global_Vars-->42),t_0)); ! phrase 9 ! [9: say ~[roman type]~] say__p=1;ParaContent(); style roman; .L_Say667; .L_SayX613; ! phrase 10 ! [10: if test result is false begin] if (((((Global_Vars-->78) && true) == (0 && true)))) { ! phrase 11 ! [11: if the global defender is the player begin] if ((((Global_Vars-->42) == player))) { ! phrase 12 ! [12: if player-vulnerable-to-bridge is true begin] if (((((Global_Vars-->100) && true) == (1 && true)))) { ! phrase 13 ! [13: say ~ You frantically try to stay on the bridge, but to no avail. Your left foot slips, and you tumble down towards fiery death.~] say__p=1;ParaContent(); print (PrintText) SC_999; new_line; .L_Say668; .L_SayX614; ! phrase 14 ! [14: have a falling event with the global defender falling in bridge of doom for reason 1] (PHR_1121_r84 ((Global_Vars-->42),I384_bridge_of_doom,1)); ! phrase 15 ! [15: stop the action] rtrue; ! phrase 16 ! [16: otherwise] } else { ! phrase 17 ! [17: say ~ You frantically try to stay on the bridge, slip, slide past the edge -- and then, somehow, manage to regain your footing at the last moment. That was some extraordinary luck.~] say__p=1;ParaContent(); print (PrintText) SC_1000; new_line; .L_Say669; .L_SayX615; ! phrase 18 ! [18: now player-vulnerable-to-bridge is true] (Global_Vars-->100) = 1; ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: otherwise] } else { ! phrase 21 ! [21: say ~ [The global defender] slips and falls, disappearing into the lava below.~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1001; new_line; .L_Say670; .L_SayX616; ! phrase 22 ! [22: have a falling event with the global defender falling in bridge of doom for reason 1] (PHR_1121_r84 ((Global_Vars-->42),I384_bridge_of_doom,1)); ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: otherwise] } else { ! phrase 25 ! [25: say ~ [The global defender] manage[s] to stay on the bridge.~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1002; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1003; new_line; .L_Say671; .L_SayX617; ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: end if] } ! phrase 28 ! [28: end if] } ! phrase 29 ! [29: end if] } ! phrase 30 ! [30: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An aftereffects rule ( this is the hit may send you off the vast staircase rule ): [ R_1616 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if staircase still goes down begin] if (((PHR_1612_r85 ()))) { ! phrase 2 ! [2: if the global defender can fall begin] if (((PHR_1263_r83 ((Global_Vars-->42))))) { ! phrase 3 ! [3: if the location is the vast staircase and the global defender is alive begin] if ((((real_location == I403_vast_staircase))) && ((((Adj_33_t1_v9((Global_Vars-->42))))))) { ! phrase 4 ! [4: if the attack damage is greater than 0 begin] if ((((Global_Vars-->46) > 0))) { ! phrase 5 ! [5: let n be a random number between 0 and 16] t_0 = R_DecimalNumber(0, 16) ; ! phrase 6 ! [6: if n is less than the attack damage begin] if (((t_0 < (Global_Vars-->46)))) { ! phrase 7 ! [7: say ~Reeling from the blow, [the global defender] balance[s] on the edge of the staircase. [italic type]~] say__p=1;ParaContent(); print (PrintText) SC_996; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_997; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1004; ParaContent(); style underline; .L_Say672; .L_SayX618; ! phrase 8 ! [8: let n be a random number between 6 and 11] t_0 = R_DecimalNumber(6, 11) ; ! phrase 9 ! [9: test the dexterity of the global defender against n] (PHR_1135_r61 ((Global_Vars-->42),t_0)); ! phrase 10 ! [10: say ~[roman type]~] say__p=1;ParaContent(); style roman; .L_Say673; .L_SayX619; ! phrase 11 ! [11: if test result is false begin] if (((((Global_Vars-->78) && true) == (0 && true)))) { ! phrase 12 ! [12: if the global defender is the player begin] if ((((Global_Vars-->42) == player))) { ! phrase 13 ! [13: say ~ You frantically try to stay on the staircase, but to no avail. Your right foot slips, and you tumble down. ~] say__p=1;ParaContent(); print (PrintText) SC_1005; .L_Say674; .L_SayX620; ! phrase 14 ! [14: otherwise] } else { ! phrase 15 ! [15: say ~ [The global defender] slips and falls!~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1006; new_line; .L_Say675; .L_SayX621; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: have a falling event with global defender falling in vast staircase for reason 1] (PHR_1121_r84 ((Global_Vars-->42),I403_vast_staircase,1)); ! phrase 18 ! [18: otherwise] } else { ! phrase 19 ! [19: say ~ [The global defender] manage[s] to stay on the staircase.~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1002; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1007; new_line; .L_Say676; .L_SayX622; ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An aftereffects rule ( this is the scatter the daggers rule ): [ R_1685 ; ! phrase 1 ! [1: if the global defender is the swarm of daggers and the attack damage is greater than 0 and the swarm of daggers is not dead begin] if (((((Global_Vars-->42) == I436_swarm_of_daggers))) && (((((Global_Vars-->46) > 0))) && (((~~(((~~Adj_33_t1_v9(I436_swarm_of_daggers))))))))) { ! phrase 2 ! [2: say ~The impact of the blow [italic type]scatters[roman type] the swarm of daggers. They will need to spend one action regrouping themselves.~] say__p=1;ParaContent(); print (PrintText) SC_1008; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1009; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1010; new_line; .L_Say677; .L_SayX623; ! phrase 3 ! [3: now dagger-scattered is true] (Global_Vars-->118) = 1; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Aftereffects rule ( this is the blood ape grows in size when hit rule ): [ R_1702 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if the global attacker is the blood ape and the attack damage is greater than 0 begin] if (((((Global_Vars-->41) == I439_blood_ape))) && ((((Global_Vars-->46) > 0)))) { ! phrase 2 ! [2: if the blood ape is not gargantuan begin] if (((~~(((Adj_157_t1_v9(I439_blood_ape))))))) { ! phrase 3 ! [3: now the blood ape is the size after the size of the blood ape] I439_blood_ape.p154_size = A_T68(GProperty(9, I439_blood_ape,p154_size)) ; ! phrase 4 ! [4: say ~The ape immediately licks the blood of its enemy from its knuckles. Nourished by this substance, it grows to [size of the blood ape] size!~] say__p=1;ParaContent(); print (PrintText) SC_1011; ParaContent(); @push self; print (T68) GProperty(9, self=I439_blood_ape,p154_size); @pull self; ParaContent(); print (PrintText) SC_1012; new_line; .L_Say678; .L_SayX624; ! phrase 5 ! [5: increase permanent health of blood ape by 3] WriteGProperty(9, I439_blood_ape,p17_permanent_health,GProperty(9, I439_blood_ape,p17_permanent_health) + 3); ! phrase 6 ! [6: increase health of blood ape by 3] WriteGProperty(9, I439_blood_ape,p14_health,GProperty(9, I439_blood_ape,p14_health) + 3); ! phrase 7 ! [7: if size of blood ape is large or size of blood ape is gargantuan begin] if ((((GProperty(9, I439_blood_ape,p154_size) == I154_large))) || (((GProperty(9, I439_blood_ape,p154_size) == I156_gargantuan)))) { ! phrase 8 ! [8: increase melee of blood ape by 1] WriteGProperty(9, I439_blood_ape,p18_melee,GProperty(9, I439_blood_ape,p18_melee) + 1); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: let x be a random natural weapon part of the blood ape] t_0 = (Prop_268()) ; ! phrase 11 ! [11: if the blood ape is medium begin] if ((((Adj_154_t1_v9(I439_blood_ape))))) { ! phrase 12 ! [12: now dodgability of x is 2] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,2); ! phrase 13 ! [13: now passive parry max of x is 2] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,2); ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: if the blood ape is large begin] if ((((Adj_155_t1_v9(I439_blood_ape))))) { ! phrase 16 ! [16: now dodgability of x is 3] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,3); ! phrase 17 ! [17: now passive parry max of x is 1] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,1); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: if the blood ape is huge begin] if ((((Adj_156_t1_v9(I439_blood_ape))))) { ! phrase 20 ! [20: now dodgability of x is 4] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,4); ! phrase 21 ! [21: now passive parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,0); ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: if the blood ape is gargantuan begin] if ((((Adj_157_t1_v9(I439_blood_ape))))) { ! phrase 24 ! [24: now dodgability of x is 5] WriteGProperty(OBJECT_TY, t_0,p22_dodgability,5); ! phrase 25 ! [25: now passive parry max of x is 0] WriteGProperty(OBJECT_TY, t_0,p23_passive_parry_max,0); ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: otherwise] } else { ! phrase 28 ! [28: say ~Sensing perhaps that it cannot grow further in its current confines, the ape does not lick of the blood.~] say__p=1;ParaContent(); print (PrintText) SC_1013; new_line; .L_Say679; .L_SayX625; ! phrase 29 ! [29: end if] } ! phrase 30 ! [30: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Aftereffects rule ( this is the increase ape damage rule ): [ R_1714 ; ! phrase 1 ! [1: if global attacker is the player and the attack damage is greater than 0 begin] if (((((Global_Vars-->41) == player))) && ((((Global_Vars-->46) > 0)))) { ! phrase 2 ! [2: if power of the ape is granted begin] if ((((Adj_158_t1_v9(I441_power_of_the_ape))))) { ! phrase 3 ! [3: increase ape power damage by 3] (Global_Vars-->119) = (Global_Vars-->119) + 3; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Aftereffects rule ( this is the stunning rule ): [ R_1756 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global attacker is at-stun and the global defender is not dead begin] if (((((Adj_268_t1_v9((Global_Vars-->41)))))) && (((~~(((~~Adj_33_t1_v9((Global_Vars-->42))))))))) { ! phrase 2 ! [2: if the attack damage is greater than 0 begin] if ((((Global_Vars-->46) > 0))) { ! phrase 3 ! [3: say ~[if global defender is player]You are[otherwise][The global defender] is[end if] [bold type]stunned[roman type]!~] say__p=1; if (~~(((((Global_Vars-->42) == player))))) jump L_Say680; ParaContent(); print (PrintText) SC_1014; jump L_SayX626; .L_Say680; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1015; .L_Say681; .L_SayX626; ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1016; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say682; .L_SayX627; ! phrase 4 ! [4: if the global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 5 ! [5: now global defender is sometime-stunned] (Adj_270_t2_v9((Global_Vars-->42))); ! phrase 6 ! [6: if at least three people are sometime-stunned begin] if ((Prop_269())) { ! phrase 7 ! [7: award achievement stunning performance] (PHR_2161_r13 (I537_stunning_performance)); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: let m be a random number between 1 and 2] t_0 = R_DecimalNumber(1, 2) ; ! phrase 11 ! [11: if m is 2 and a random chance of 1 in 5 succeeds begin] if ((((t_0 == 2))) && (( (GenerateRandomNumber(1, 5) <= 1) ))) { ! phrase 12 ! [12: now m is 3] t_0 = 3; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: if the global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 15 ! [15: if a random chance of 1 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 1) )) { ! phrase 16 ! [16: increase m by 1] t_0 = t_0 + 1; ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: if stun count of the global defender is less than m begin] if (((GProperty(9, (Global_Vars-->42),p60_stun_count) < t_0))) { ! phrase 20 ! [20: now the stun count of the global defender is m] WriteGProperty(9, (Global_Vars-->42),p60_stun_count,t_0); ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: now the global attacker is not at-stun] (Adj_268_t3_v9((Global_Vars-->41))); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An aftereffects rule ( this is the scythe of oxidation rusts stuff rule ): [ R_1815 ; ! phrase 1 ! [1: if the global attacker weapon is the scythe of oxidation begin] if ((((Global_Vars-->43) == I461_scythe_of_oxidation))) { ! phrase 2 ! [2: if the global defender is at parry and the attack damage is 0 begin] if (((((Adj_105_t1_v9((Global_Vars-->42)))))) && ((((Global_Vars-->46) == 0)))) { ! phrase 3 ! [3: if the global defender weapon is iron and the global defender weapon is not rusted begin] if (((((Global_Vars-->44).p180_material == I166_iron))) && (((~~(((Adj_205_t1_v9((Global_Vars-->44))))))))) { ! phrase 4 ! [4: say ~Having been in contact with the scythe of oxidation, [the global defender weapon] [bold type]rusts[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_1017; ParaContent(); print (the) (Global_Vars-->44); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1018; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say683; .L_SayX628; ! phrase 5 ! [5: now the global defender weapon is rusted] (Adj_205_t2_v9((Global_Vars-->44))); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if the global defender weapon is the scythe of oxidation begin] if ((((Global_Vars-->44) == I461_scythe_of_oxidation))) { ! phrase 10 ! [10: if the global defender is at parry and the attack damage is 0 begin] if (((((Adj_105_t1_v9((Global_Vars-->42)))))) && ((((Global_Vars-->46) == 0)))) { ! phrase 11 ! [11: if the global attacker weapon is iron and the global attacker weapon is not rusted and the passive parry max of the global attacker weapon is not 0 begin] if (((((Global_Vars-->43).p180_material == I166_iron))) && ((((~~(((Adj_205_t1_v9((Global_Vars-->43)))))))) && (((~~((GProperty(9, (Global_Vars-->43),p23_passive_parry_max) == 0))))))) { ! phrase 12 ! [12: if the global attacker weapon is not a part of the global attacker begin] if (((~~(((Global_Vars-->41) == ((Global_Vars-->43).component_parent)))))) { ! phrase 13 ! [13: say ~Having been in contact with the scythe of oxidation, [the global attacker weapon] [bold type]rusts[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_1017; ParaContent(); print (the) (Global_Vars-->43); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1018; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say684; .L_SayX629; ! phrase 14 ! [14: now the global attacker weapon is rusted] (Adj_205_t2_v9((Global_Vars-->43))); ! phrase 15 ! [15: otherwise] } else { ! phrase 16 ! [16: if the global defender is not rusted and the global defender is alive begin] if ((((~~(((Adj_205_t1_v9((Global_Vars-->42)))))))) && ((((Adj_33_t1_v9((Global_Vars-->42))))))) { ! phrase 17 ! [17: say ~Having hit the scythe of oxidation, [the global defender] [bold type]rusts[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1019; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1018; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say685; .L_SayX630; ! phrase 18 ! [18: now the global defender is rusted] (Adj_205_t2_v9((Global_Vars-->42))); ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: if the global attacker weapon is the scythe of oxidation begin] if ((((Global_Vars-->43) == I461_scythe_of_oxidation))) { ! phrase 25 ! [25: if the global defender is iron and the attack damage is greater than 0 begin] if (((((Global_Vars-->42).p180_material == I166_iron))) && ((((Global_Vars-->46) > 0)))) { ! phrase 26 ! [26: if the global defender is not rusted and the global defender is alive begin] if ((((~~(((Adj_205_t1_v9((Global_Vars-->42)))))))) && ((((Adj_33_t1_v9((Global_Vars-->42))))))) { ! phrase 27 ! [27: say ~Having been hit with the scythe of oxidation, [the global defender] [bold type]rusts[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1020; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1018; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say686; .L_SayX631; ! phrase 28 ! [28: now the global defender is rusted] (Adj_205_t2_v9((Global_Vars-->42))); ! phrase 29 ! [29: end if] } ! phrase 30 ! [30: end if] } ! phrase 31 ! [31: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An aftereffects rule ( this is the domination stops after a hit rule ): [ R_1886 ; ! phrase 1 ! [1: if the global defender dominates the global attacker and the attack damage is greater than 0 begin] if (((((Relation_TestVtoV((Global_Vars-->42),Rel_Record_83,(Global_Vars-->41),false))))) && ((((Global_Vars-->46) > 0)))) { ! phrase 2 ! [2: now the global defender does not dominate the global attacker] (Relation_NowNVtoV((Global_Vars-->42),Rel_Record_83,(Global_Vars-->41),false)); ! phrase 3 ! [3: say ~[The global attacker] no longer fear[s] [the global defender].~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_1021; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; new_line; .L_Say687; .L_SayX632; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An aftereffects rule ( this is the tentacle lets go when damaged rule ): [ R_1901 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if the global defender is the giant tentacle and the attack damage is greater than 0 begin] if (((((Global_Vars-->42) == I473_giant_tentacle))) && ((((Global_Vars-->46) > 0)))) { ! phrase 2 ! [2: if the giant tentacle grapples someone and the giant tentacle is alive begin] if (((Prop_270())) && ((((Adj_33_t1_v9(I473_giant_tentacle)))))) { ! phrase 3 ! [3: let x be a random person grappled by the giant tentacle] t_0 = (Prop_271()) ; ! phrase 4 ! [4: say ~Recoiling in pain, the giant tentacle [bold type]lets go[roman type] of [the X].~] say__p=1;ParaContent(); print (PrintText) SC_1022; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1023; ParaContent(); style roman; ParaContent(); print (PrintText) SC_560; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say688; .L_SayX633; ! phrase 5 ! [5: now giant tentacle does not grapple x] Relation_NowSN1to1(t_0,p238_grappling,I473_giant_tentacle); ! phrase 6 ! [6: now constriction level is 0] (Global_Vars-->121) = 0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An aftereffects rule ( this is the dagger of draining aftereffects rule ): [ R_1980 ; ! phrase 1 ! [1: if the global attacker weapon is the dagger of draining and the attack damage is greater than 0 begin] if (((((Global_Vars-->43) == I495_dagger_of_draining))) && ((((Global_Vars-->46) > 0)))) { ! phrase 2 ! [2: if a random chance of 1 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 1) )) { ! phrase 3 ! [3: decrease defence of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p19_defence,GProperty(9, (Global_Vars-->42),p19_defence) - 1); ! phrase 4 ! [4: increase defence of the global attacker by 1] WriteGProperty(9, (Global_Vars-->41),p19_defence,GProperty(9, (Global_Vars-->41),p19_defence) + 1); ! phrase 5 ! [5: say ~The magical dagger saps [no dead property][possessive of the global defender][dead property] defensive reflexes, transferring them to [the global attacker].~] say__p=1;ParaContent(); print (PrintText) SC_1024; ParaContent(); (PHR_828_r43 ());ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_1025; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; new_line; .L_Say689; .L_SayX634; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: if a random chance of 1 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 1) )) { ! phrase 8 ! [8: decrease willpower of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p35_willpower,GProperty(9, (Global_Vars-->42),p35_willpower) - 1); ! phrase 9 ! [9: increase willpower of the global attacker by 1] WriteGProperty(9, (Global_Vars-->41),p35_willpower,GProperty(9, (Global_Vars-->41),p35_willpower) + 1); ! phrase 10 ! [10: say ~The magical dagger saps [no dead property][possessive of the global defender][dead property] willpower, transferring it to [the global attacker].~] say__p=1;ParaContent(); print (PrintText) SC_1024; ParaContent(); (PHR_828_r43 ());ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_1026; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; new_line; .L_Say690; .L_SayX635; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 13 ! [13: decrease dexterity of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p34_dexterity,GProperty(9, (Global_Vars-->42),p34_dexterity) - 1); ! phrase 14 ! [14: increase dexterity of the global attacker by 1] WriteGProperty(9, (Global_Vars-->41),p34_dexterity,GProperty(9, (Global_Vars-->41),p34_dexterity) + 1); ! phrase 15 ! [15: say ~The magical dagger saps [no dead property][possessive of the global defender][dead property] dexterity, transferring it to [the global attacker].~] say__p=1;ParaContent(); print (PrintText) SC_1024; ParaContent(); (PHR_828_r43 ());ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_1027; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; new_line; .L_Say691; .L_SayX636; ! phrase 16 ! [16: otherwise] } else { ! phrase 17 ! [17: decrease perception of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p33_perception,GProperty(9, (Global_Vars-->42),p33_perception) - 1); ! phrase 18 ! [18: increase perception of the global attacker by 1] WriteGProperty(9, (Global_Vars-->41),p33_perception,GProperty(9, (Global_Vars-->41),p33_perception) + 1); ! phrase 19 ! [19: say ~The magical dagger saps [no dead property][possessive of the global defender][dead property] perception, transferring it to [the global attacker].~] say__p=1;ParaContent(); print (PrintText) SC_1024; ParaContent(); (PHR_828_r43 ());ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_1028; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; new_line; .L_Say692; .L_SayX637; ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An aftereffects rule ( this is the rotting corpse loses limbs rule ): [ R_2011 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if the global defender is alive and the attack damage is greater than 0 begin] if (((((Adj_33_t1_v9((Global_Vars-->42)))))) && ((((Global_Vars-->46) > 0)))) { ! phrase 2 ! [2: if the global defender is the rotting corpse and limbs of the rotting corpse is not 0 begin] if (((((Global_Vars-->42) == I501_rotting_corpse))) && (((~~(((PHR_2006_r81 ()) == 0)))))) { ! phrase 3 ! [3: let item be a random rotting limb part of the rotting corpse] t_0 = (Prop_272()) ; ! phrase 4 ! [4: say ~As the corpse reels back from the blow, his [item] falls off.~] say__p=1;ParaContent(); print (PrintText) SC_1029; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_1030; new_line; .L_Say693; .L_SayX638; ! phrase 5 ! [5: move item to the location of the rotting corpse] MoveObject(t_0, LocationOf(I501_rotting_corpse) , 0, false); ! phrase 6 ! [6: let x be a random natural weapon part of the rotting corpse] t_1 = (Prop_273()) ; ! phrase 7 ! [7: decrease damage die of x by 1] WriteGProperty(OBJECT_TY, t_1,p20_damage_die,GProperty(OBJECT_TY, t_1,p20_damage_die) - 1); ! phrase 8 ! [8: if item is rotting left arm or item is rotting right arm begin] if ((((t_0 == I506_rotting_left_arm))) || (((t_0 == I507_rotting_right_arm)))) { ! phrase 9 ! [9: decrease damage die of x by 1] WriteGProperty(OBJECT_TY, t_1,p20_damage_die,GProperty(OBJECT_TY, t_1,p20_damage_die) - 1); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if item is rotting left leg or item is rotting right leg begin] if ((((t_0 == I504_rotting_left_leg))) || (((t_0 == I505_rotting_right_leg)))) { ! phrase 12 ! [12: decrease follower percentile chance of rotting corpse by 40] WriteGProperty(9, I501_rotting_corpse,p48_follower_percentile_chan,GProperty(9, I501_rotting_corpse,p48_follower_percentile_chan) - 40); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Last aftereffects rule ( this is the award Deathblow achievement rule ): [ R_2163 ; ! phrase 1 ! [1: if global attacker is player and the attack damage is greater than 19 begin] if (((((Global_Vars-->41) == player))) && ((((Global_Vars-->46) > 19)))) { ! phrase 2 ! [2: award achievement deathblow] (PHR_2161_r13 (I534_deathblow)); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Last aftereffects rule ( this is the award from the shadows achievement rule ): [ R_2166 ; ! phrase 1 ! [1: if from-the-shadows boolean is true begin] if (((((Global_Vars-->133) && true) == (1 && true)))) { ! phrase 2 ! [2: if global defender is dead begin] if ((((~~Adj_33_t1_v9((Global_Vars-->42)))))) { ! phrase 3 ! [3: award achievement from the shadows i come] (PHR_2161_r13 (I536_from_the_shadows_i_come)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: now from-the-shadows boolean is false] (Global_Vars-->133) = 0; ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Last aftereffects rule ( this is the award injury to insult achievement rule ): [ R_2168 ; ! phrase 1 ! [1: if global attacker is the player and global defender is malygris begin] if (((((Global_Vars-->41) == player))) && ((((Global_Vars-->42) == I493_malygris)))) { ! phrase 2 ! [2: if malygris is dead and global attacker weapon is a natural weapon begin] if (((((~~Adj_33_t1_v9(I493_malygris))))) && ((((Global_Vars-->43) ofclass K18_natural_weapon)))) { ! phrase 3 ! [3: award achievement injury to insult] (PHR_2161_r13 (I539_injury_to_insult)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Readying (B440_check_readying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check readying ( this is the cannot ready what is already readied rule ): ! === which is equally specific with === ! Rule 2/4 ! Check readying ( this is the cannot ready what is not a weapon rule ): ! === which is equally specific with === ! Rule 3/4 ! Check readying ( this is the vampire bat cannot ready a weapon rule ): ! === which is equally specific with === ! Rule 4/4 ! Check readying ( this is the cannot ready when holding a cursed weapon rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check readying ( this is the cannot ready what is already readied rule ): [ R_992 ; if (actor == player) { if (debug_rules) DB_Rule(R_992, 992); ! phrase 1 ! [1: if the noun is readied and the noun is enclosed by the player begin] if (((((Adj_103_t1_v9(noun))))) && (((IndirectlyContains(player,noun))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You are already wielding [the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_1031; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say694; .L_SayX639; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_992, 992, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check readying ( this is the cannot ready what is not a weapon rule ): [ R_993 ; if (actor == player) { if (debug_rules) DB_Rule(R_993, 993); ! phrase 1 ! [1: if the noun is not a weapon begin] if (((~~((noun ofclass K17_weapon))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You can only ready weapons.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1032; new_line; rtrue; .L_Say695; .L_SayX640; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_993, 993, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check readying ( this is the vampire bat cannot ready a weapon rule ): [ R_1293 ; if (actor == player) { if (debug_rules) DB_Rule(R_1293, 1293); ! phrase 1 ! [1: if the player form of the player is vampire bat begin] if (((GProperty(9, player,p201_player_form) == I184_vampire_bat))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~In bat form, you cannot use weapons.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1033; new_line; rtrue; .L_Say696; .L_SayX641; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1293, 1293, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check readying ( this is the cannot ready when holding a cursed weapon rule ): [ R_1400 t_0 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1400, 1400); ! phrase 1 ! [1: if the player has a readied cursed weapon begin] if ((Prop_274())) { ! phrase 2 ! [2: let item be a random readied cursed weapon had by the player] t_0 = (Prop_275()) ; ! phrase 3 ! [3: say ~You cannot ready a new weapon until you have gotten rid of [the item].~ instead] say__p=1;ParaContent(); print (PrintText) SC_1034; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say697; .L_SayX642; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1400, 1400, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Readying (B441_carry_out_readying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First carry out an actor readying ( this is the implicit taking when readying rule ): ! --- now the mid-placed rules --- ! Rule 2/3 ! Carry out an actor readying ( this is the carry out readying when enclosing rule ): ! --- now the last-placed rules --- ! Rule 3/3 ! Last carry out an actor readying ( this is the unready all other weapons rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First carry out an actor readying ( this is the implicit taking when readying rule ): [ R_994 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_994, 994); ! phrase 1 ! [1: if the actor does not enclose the noun begin] if (((~~((IndirectlyContains(actor,noun)))))) { ! phrase 2 ! [2: try the actor taking the noun] TryAction(0, actor, ##Take, noun, 0);; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_994, 994, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor readying ( this is the carry out readying when enclosing rule ): [ R_995 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_995, 995); ! phrase 1 ! [1: if the actor encloses the noun begin] if (((IndirectlyContains(actor,noun)))) { ! phrase 2 ! [2: now the noun is readied] (Adj_103_t2_v9(noun)); ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_995, 995, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Last carry out an actor readying ( this is the unready all other weapons rule ): [ R_996 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_996, 996); ! phrase 1 ! [1: if the noun is readied begin] if ((((Adj_103_t1_v9(noun))))) { ! phrase 2 ! [2: repeat with item running through things enclosed by the actor begin] for (t_0=Prop_276(0), t_1=Prop_276(t_0): t_0: t_0=t_1, t_1=Prop_276(t_1)) { ! phrase 3 ! [3: if the item is not the noun and the item is readied begin] if ((((~~((t_0 == noun))))) && ((((Adj_103_t1_v9(t_0)))))) { ! phrase 4 ! [4: now the item is not readied] (Adj_103_t3_v9(t_0)); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end repeat] } ! phrase 7 ! [7: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_996, 996, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Readying (B442_report_readying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Last report an actor readying ( this is the standard report readying rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Last report an actor readying ( this is the standard report readying rule ): [ R_997 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_997, 997); ! phrase 1 ! [1: if the noun is readied begin] if ((((Adj_103_t1_v9(noun))))) { ! phrase 2 ! [2: say ~[The actor] read[ies] [the noun].~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1035; ParaContent(); (PHR_904_r86 ());ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say698; .L_SayX643; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if the actor encloses the noun begin] if (((IndirectlyContains(actor,noun)))) { ! phrase 5 ! [5: say ~[The actor] fool[s] around with [the noun], but fail[s] to ready it.~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1036; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1037; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1038; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1039; new_line; .L_Say699; .L_SayX644; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: say ~[The actor] attempt[s] to ready [the noun], but cannot get a hold on it.~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_702; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1040; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1041; new_line; .L_Say700; .L_SayX645; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_997, 997, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Concentrating (B443_check_concentrating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check concentrating when the concentration of the player is 3 ( this is the do not concentrate when at maximum rule ): ! === which is equally specific with === ! Rule 2/2 ! Check concentrating when the player is stunned: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check concentrating when the concentration of the player is 3 ( this is the do not concentrate when at maximum rule ): [ R_1008 ; if (actor == player) { if ((((((GProperty(9, player,p26_concentration) == 3)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1008, 1008); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~You are already maximally concentrated.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1042; new_line; rtrue; .L_Say701; .L_SayX646; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1008, 1008, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check concentrating when the player is stunned: [ R_1761 ; if (actor == player) { if (((((((Adj_43_t1_v9(player)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1761, 1761); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~You feel too stunned for concentration.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1043; new_line; rtrue; .L_Say702; .L_SayX647; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1761, 1761, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Concentrating (B444_carry_out_concentrating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First carry out an actor concentrating ( this is the standard concentrating improves initiative rule ): ! --- now the mid-placed rules --- ! Rule 2/3 ! Carry out an actor concentrating ( this is the standard carry out concentrating rule ): ! >>> III - Action requirement >>> ! Rule 3/3 ! Carry out concentrating: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First carry out an actor concentrating ( this is the standard concentrating improves initiative rule ): [ R_1009 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1009, 1009); ! phrase 1 ! [1: increase the initiative of the actor by the concentration of the actor] WriteGProperty(9, actor,p15_initiative,GProperty(9, actor,p15_initiative) + GProperty(9, actor,p26_concentration)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1009, 1009, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor concentrating ( this is the standard carry out concentrating rule ): [ R_1010 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1010, 1010); ! phrase 1 ! [1: increase the concentration of the actor by 1] WriteGProperty(9, actor,p26_concentration,GProperty(9, actor,p26_concentration) + 1); ! phrase 2 ! [2: if the concentration of the actor is greater than 3 begin] if (((GProperty(9, actor,p26_concentration) > 3))) { ! phrase 3 ! [3: now the concentration of the actor is 3] WriteGProperty(9, actor,p26_concentration,3); ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1010, 1010, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Carry out concentrating: [ R_1309 ; if (actor == player) { if (debug_rules) DB_Rule(R_1309, 1309); ! phrase 1 ! [1: increase detection probability by 50] (Global_Vars-->89) = (Global_Vars-->89) + 50; ! phrase 2 ! [2: if the player is hidden begin] if ((((Adj_221_t1_v9(player))))) { ! phrase 3 ! [3: say ~You shift your attention away from remaining hidden. [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1044; ParaContent(); RunParagraphOn(); .L_Say703; .L_SayX648; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1309, 1309, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Concentrating (B445_report_concentrating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! Report the ravenous armadillo concentrating: ! === which is equally specific with === ! Rule 2/7 ! Report Miranda concentrating: ! === which is equally specific with === ! Rule 3/7 ! Report the chain golem concentrating: ! === which is equally specific with === ! Rule 4/7 ! Report the bomb concentrating: ! === which is equally specific with === ! Rule 5/7 ! Report the Reaper concentrating: ! === which is equally specific with === ! Rule 6/7 ! Report the smoke demon concentrating: ! >>> I - Number of aspects constrained >>> ! Rule 7/7 ! Report an actor concentrating ( this is the standard concentrating prose rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the ravenous armadillo concentrating: [ R_1725 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I442_ravenous_armadillo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1725, 1725); ! phrase 1 ! [1: if the concentration of the ravenous armadillo is begin] switch(GProperty(9, I442_ravenous_armadillo,p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~The armadillo narrows its eyes. You assume it is concentrating.~] say__p=1;ParaContent(); print (PrintText) SC_1045; new_line; .L_Say704; .L_SayX649; ! phrase 4 ! [4: -- 2] ; 2: ! phrase 5 ! [5: say ~The armadillo makes a few thoughtful movements with its tail.~] say__p=1;ParaContent(); print (PrintText) SC_1046; new_line; .L_Say705; .L_SayX650; ! phrase 6 ! [6: -- 3] ; 3: ! phrase 7 ! [7: say ~A final sweep of its tail club seems to indicate that the armadillo has made up its mind.~] say__p=1;ParaContent(); print (PrintText) SC_1047; new_line; .L_Say706; .L_SayX651; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1725, 1725, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Miranda concentrating: [ R_1769 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I446_miranda) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1769, 1769); ! phrase 1 ! [1: if the concentration of the actor is begin] switch(GProperty(9, actor,p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~Miranda seeks the calm within.~] say__p=1;ParaContent(); print (PrintText) SC_1048; new_line; .L_Say707; .L_SayX652; ! phrase 4 ! [4: -- 2] ; 2: ! phrase 5 ! [5: say ~Chanting softly, Miranda aligns her spirit with the ambient energies.~] say__p=1;ParaContent(); print (PrintText) SC_1049; new_line; .L_Say708; .L_SayX653; ! phrase 6 ! [6: -- 3] ; 3: ! phrase 7 ! [7: say ~Miranda finishes her meditations.~] say__p=1;ParaContent(); print (PrintText) SC_1050; new_line; .L_Say709; .L_SayX654; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1769, 1769, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the chain golem concentrating: [ R_1785 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I451_chain_golem) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1785, 1785); ! phrase 1 ! [1: if the concentration of the chain golem is begin] switch(GProperty(9, I451_chain_golem,p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~The chain golem starts rotating slowly, spinning its chains around its core.~] say__p=1;ParaContent(); print (PrintText) SC_1051; new_line; .L_Say710; .L_SayX655; ! phrase 4 ! [4: -- 2] ; 2: ! phrase 5 ! [5: say ~The chain golem speeds up, its chains whirling through the air.~] say__p=1;ParaContent(); print (PrintText) SC_1052; new_line; .L_Say711; .L_SayX656; ! phrase 6 ! [6: -- 3] ; 3: ! phrase 7 ! [7: say ~The chain golem spins even faster, audibly slashing the air with its whip-like metal appendages.~] say__p=1;ParaContent(); print (PrintText) SC_1053; new_line; .L_Say712; .L_SayX657; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1785, 1785, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the bomb concentrating: [ R_1807 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I454_jumping_bomb) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1807, 1807); ! phrase 1 ! [1: if the concentration of the actor is begin] switch(GProperty(9, actor,p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~The jumping bomb jumps up and down a little bit faster.~] say__p=1;ParaContent(); print (PrintText) SC_1054; new_line; .L_Say713; .L_SayX658; ! phrase 4 ! [4: -- 2] ; 2: ! phrase 5 ! [5: say ~The jumping bomb speeds up, and is now bumping around energetically.~] say__p=1;ParaContent(); print (PrintText) SC_1055; new_line; .L_Say714; .L_SayX659; ! phrase 6 ! [6: -- 3] ; 3: ! phrase 7 ! [7: say ~The jumping bomb accelerates yet further, your image of it dissolving almost into a blur.~] say__p=1;ParaContent(); print (PrintText) SC_1056; new_line; .L_Say715; .L_SayX660; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1807, 1807, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the Reaper concentrating: [ R_1823 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I457_reaper) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1823, 1823); ! phrase 1 ! [1: if the concentration of the reaper is begin] switch(GProperty(9, I457_reaper,p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~The Reaper contemplates the meaning of Death.~] say__p=1;ParaContent(); print (PrintText) SC_1057; new_line; .L_Say716; .L_SayX661; ! phrase 4 ! [4: -- 2] ; 2: ! phrase 5 ! [5: say ~The Reaper immerses himself further into his meditations on mortality.~] say__p=1;ParaContent(); print (PrintText) SC_1058; new_line; .L_Say717; .L_SayX662; ! phrase 6 ! [6: -- 3] ; 3: ! phrase 7 ! [7: say ~'I see your end!' the Reaper announces as he finishes his contemplations.~] say__p=1;ParaContent(); print (PrintText) SC_1059; new_line; .L_Say718; .L_SayX663; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1823, 1823, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the smoke demon concentrating: [ R_2057 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I517_smoke_demon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2057, 2057); ! phrase 1 ! [1: if the concentration of the smoke demon is begin] switch(GProperty(9, I517_smoke_demon,p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: say ~The smoke demon seems to become denser.~] say__p=1;ParaContent(); print (PrintText) SC_1060; new_line; .L_Say719; .L_SayX664; ! phrase 4 ! [4: -- 2] ; 2: ! phrase 5 ! [5: say ~Even more smoke is drawn into the smoke demon's form.~] say__p=1;ParaContent(); print (PrintText) SC_1061; new_line; .L_Say720; .L_SayX665; ! phrase 6 ! [6: -- 3] ; 3: ! phrase 7 ! [7: say ~The smoke demon becomes even denser and now seems almost material.~] say__p=1;ParaContent(); print (PrintText) SC_1062; new_line; .L_Say721; .L_SayX666; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2057, 2057, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Report an actor concentrating ( this is the standard concentrating prose rule ): [ R_1011 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1011, 1011); ! phrase 1 ! [1: say ~[The actor] concentrate[s], and [is-are]~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1063; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1064; ParaContent(); (PHR_885_r49 ()); .L_Say722; .L_SayX667; ! phrase 2 ! [2: if the concentration of the actor is begin] switch(GProperty(9, actor,p26_concentration)) { ! phrase 3 ! [3: -- 1] 1: ! phrase 4 ! [4: say ~ now mildly concentrated.~] say__p=1;ParaContent(); print (PrintText) SC_1065; new_line; .L_Say723; .L_SayX668; ! phrase 5 ! [5: -- 2] ; 2: ! phrase 6 ! [6: say ~ now quite concentrated.~] say__p=1;ParaContent(); print (PrintText) SC_1066; new_line; .L_Say724; .L_SayX669; ! phrase 7 ! [7: -- 3] ; 3: ! phrase 8 ! [8: say ~ now maximally concentrated.~] say__p=1;ParaContent(); print (PrintText) SC_1067; new_line; .L_Say725; .L_SayX670; ! phrase 9 ! [9: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1011, 1011, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: lose concentration prose (B446_lose_concentration_pros) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Lose concentration prose rule for the chain golem: ! === which is equally specific with === ! Rule 2/3 ! Lose concentration prose rule for the jumping bomb: ! --- now the last-placed rules --- ! Rule 3/3 ! Last lose concentration prose rule for a person ( called P ) ( this is the new lose concentration prose rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Lose concentration prose rule for the chain golem: [ R_1786 ; if (((parameter_object == I451_chain_golem) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1786, 1786); ! phrase 1 ! [1: say ~Unbalanced by the hit, the chain golem [bold type]stops spinning[roman type].~ instead] say__p=1;ParaContent(); print (PrintText) SC_1068; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1069; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say726; .L_SayX671; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1786, 1786, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Lose concentration prose rule for the jumping bomb: [ R_1808 ; if (((parameter_object == I454_jumping_bomb) && (parameter_object ofclass K8_person))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1808, 1808); ! phrase 1 ! [1: say ~Knocked back by the hit, the jumping bomb [bold type]loses most of its speed[roman type].~ instead] say__p=1;ParaContent(); print (PrintText) SC_1070; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1071; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say727; .L_SayX672; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1808, 1808, true); rfalse; ]; ! No specific request ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! Last lose concentration prose rule for a person ( called P ) ( this is the new lose concentration prose rule ): [ R_1061 t_0 ! Local variable e.g. 'P' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1061, 1061); ! phrase 1 ! [1: if p is the player begin] if (((t_0 == player))) { ! phrase 2 ! [2: say ~You lose your [bold type]concentration[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1072; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1073; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say728; .L_SayX673; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~[The P] loses [bold type]concentration[roman type]!~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_1074; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1073; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say729; .L_SayX674; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1061, 1061, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Parrying (B447_check_parrying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check parrying ( this is the cannot parry when not reacting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check parrying ( this is the cannot parry when not reacting rule ): [ R_1020 ; if (actor == player) { if (debug_rules) DB_Rule(R_1020, 1020); ! phrase 1 ! [1: if the combat state of the player is not at-react begin] if (((~~((GProperty(9, player,p112_combat_state) == I97_at_react))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You parry, but there is no attack.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1075; new_line; rtrue; .L_Say730; .L_SayX675; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1020, 1020, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Parrying (B448_carry_out_parrying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Carry out an actor parrying ( this is the parrying changes initiative rule ): ! === which is equally specific with === ! Rule 2/3 ! Carry out an actor parrying ( this is the standard carry out parrying rule ): ! >>> III - Action requirement >>> ! Rule 3/3 ! Carry out parrying: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor parrying ( this is the parrying changes initiative rule ): [ R_1021 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1021, 1021); ! phrase 1 ! [1: increase the initiative of the actor by 1] WriteGProperty(9, actor,p15_initiative,GProperty(9, actor,p15_initiative) + 1); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1021, 1021, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor parrying ( this is the standard carry out parrying rule ): [ R_1022 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1022, 1022); ! phrase 1 ! [1: now the actor is at parry] (Adj_105_t2_v9(actor)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1022, 1022, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Carry out parrying: [ R_2170 ; if (actor == player) { if (debug_rules) DB_Rule(R_2170, 2170); ! phrase 1 ! [1: now the unmoved boolean is false] (Global_Vars-->134) = 0; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2170, 2170, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Parrying (B449_report_parrying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/10 ! Report the swarm of daggers parrying: ! === which is equally specific with === ! Rule 2/10 ! Report the blood ape parrying: ! === which is equally specific with === ! Rule 3/10 ! Report the ravenous armadillo parrying: ! === which is equally specific with === ! Rule 4/10 ! Report Miranda parrying: ! === which is equally specific with === ! Rule 5/10 ! Report the chain golem parrying: ! === which is equally specific with === ! Rule 6/10 ! Report Fafhrd parrying: ! === which is equally specific with === ! Rule 7/10 ! Report Mouser parrying: ! === which is equally specific with === ! Rule 8/10 ! Report the defender of Aite parrying: ! === which is equally specific with === ! Rule 9/10 ! Report the smoke demon parrying: ! >>> I - Number of aspects constrained >>> ! Rule 10/10 ! Report an actor parrying ( this is the standard parry prose rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the swarm of daggers parrying: [ R_1691 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I436_swarm_of_daggers) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1691, 1691); ! phrase 1 ! [1: say ~Several of the daggers float out to stop the attack.~] say__p=1;ParaContent(); print (PrintText) SC_1076; new_line; .L_Say731; .L_SayX676; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1691, 1691, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the blood ape parrying: [ R_1708 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I439_blood_ape) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1708, 1708); ! phrase 1 ! [1: say ~The blood ape attempts to stop the attack with its hairy forearms.~] say__p=1;ParaContent(); print (PrintText) SC_1077; new_line; .L_Say732; .L_SayX677; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1708, 1708, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the ravenous armadillo parrying: [ R_1723 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I442_ravenous_armadillo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1723, 1723); ! phrase 1 ! [1: say ~The armadillo tries to ward off the attack with its tail.~] say__p=1;ParaContent(); print (PrintText) SC_1078; new_line; .L_Say733; .L_SayX678; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1723, 1723, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Miranda parrying: [ R_1767 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I446_miranda) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1767, 1767); ! phrase 1 ! [1: say ~Miranda attempts to ward off the attack.~] say__p=1;ParaContent(); print (PrintText) SC_1079; new_line; .L_Say734; .L_SayX679; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1767, 1767, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the chain golem parrying: [ R_1783 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I451_chain_golem) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1783, 1783); ! phrase 1 ! [1: say ~The chain golem lashes out with a heavy iron chain, trying to stop the attack.~] say__p=1;ParaContent(); print (PrintText) SC_1080; new_line; .L_Say735; .L_SayX680; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1783, 1783, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Fafhrd parrying: [ R_1862 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I466_fafhrd) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1862, 1862); ! phrase 1 ! [1: say ~Fafhrd raises his weapon to stop the blow.~] say__p=1;ParaContent(); print (PrintText) SC_1081; new_line; .L_Say736; .L_SayX681; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1862, 1862, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Mouser parrying: [ R_1868 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I469_mouser) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1868, 1868); ! phrase 1 ! [1: say ~Mouser tries to parry the blow.~] say__p=1;ParaContent(); print (PrintText) SC_1082; new_line; .L_Say737; .L_SayX682; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1868, 1868, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the defender of Aite parrying: [ R_1941 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I484_defender_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1941, 1941); ! phrase 1 ! [1: say ~The soldier raises his shield to stop the attack.~] say__p=1;ParaContent(); print (PrintText) SC_1083; new_line; .L_Say738; .L_SayX683; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1941, 1941, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the smoke demon parrying: [ R_2055 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I517_smoke_demon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2055, 2055); ! phrase 1 ! [1: say ~Protective layers of smoke appear in front of the smoke demon.~] say__p=1;ParaContent(); print (PrintText) SC_1084; new_line; .L_Say739; .L_SayX684; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2055, 2055, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Report an actor parrying ( this is the standard parry prose rule ): [ R_1023 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1023, 1023); ! phrase 1 ! [1: say ~[The actor] strike[s] up a defensive pose.~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1085; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1086; new_line; .L_Say740; .L_SayX685; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1023, 1023, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Dodging (B450_check_dodging) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check dodging ( this is the cannot dodge when not reacting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check dodging ( this is the cannot dodge when not reacting rule ): [ R_1027 ; if (actor == player) { if (debug_rules) DB_Rule(R_1027, 1027); ! phrase 1 ! [1: if the combat state of the player is not at-react begin] if (((~~((GProperty(9, player,p112_combat_state) == I97_at_react))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You dodge, but there is no attack.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1087; new_line; rtrue; .L_Say741; .L_SayX686; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1027, 1027, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Dodging (B451_carry_out_dodging) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out an actor dodging ( this is the standard carry out dodging rule ): ! >>> III - Action requirement >>> ! Rule 2/2 ! Carry out dodging: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Carry out an actor dodging ( this is the standard carry out dodging rule ): [ R_1028 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1028, 1028); ! phrase 1 ! [1: now the actor is at dodge] (Adj_107_t2_v9(actor)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1028, 1028, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Carry out dodging: [ R_2169 ; if (actor == player) { if (debug_rules) DB_Rule(R_2169, 2169); ! phrase 1 ! [1: now the unmoved boolean is false] (Global_Vars-->134) = 0; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2169, 2169, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Dodging (B452_report_dodging) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/20 ! Report the swarm of daggers dodging: ! === which is equally specific with === ! Rule 2/20 ! Report the blood ape dodging: ! === which is equally specific with === ! Rule 3/20 ! Report the ravenous armadillo dodging: ! === which is equally specific with === ! Rule 4/20 ! Report Miranda dodging: ! === which is equally specific with === ! Rule 5/20 ! Report the chain golem dodging: ! === which is equally specific with === ! Rule 6/20 ! Report the bomb dodging: ! === which is equally specific with === ! Rule 7/20 ! Report the Reaper dodging: ! === which is equally specific with === ! Rule 8/20 ! Report the mindslug dodging: ! === which is equally specific with === ! Rule 9/20 ! Report Fafhrd dodging: ! === which is equally specific with === ! Rule 10/20 ! Report Mouser dodging: ! === which is equally specific with === ! Rule 11/20 ! Report the giant tentacle dodging: ! === which is equally specific with === ! Rule 12/20 ! Report the healer of Aite dodging: ! === which is equally specific with === ! Rule 13/20 ! Report the tormentor of Aite dodging: ! === which is equally specific with === ! Rule 14/20 ! Report the defender of Aite dodging: ! === which is equally specific with === ! Rule 15/20 ! Report Bodmall dodging: ! === which is equally specific with === ! Rule 16/20 ! Report the corpse dodging: ! === which is equally specific with === ! Rule 17/20 ! Report the aswang dodging: ! === which is equally specific with === ! Rule 18/20 ! Report the smoke demon dodging: ! === which is equally specific with === ! Rule 19/20 ! Report the imp dodging: ! >>> I - Number of aspects constrained >>> ! Rule 20/20 ! Report an actor dodging ( this is the standard dodge prose rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the swarm of daggers dodging: [ R_1692 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I436_swarm_of_daggers) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1692, 1692); ! phrase 1 ! [1: say ~The swarm of daggers attempts to outmaneuver the attack.~] say__p=1;ParaContent(); print (PrintText) SC_1088; new_line; .L_Say742; .L_SayX687; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1692, 1692, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the blood ape dodging: [ R_1709 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I439_blood_ape) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1709, 1709); ! phrase 1 ! [1: say ~The blood ape tries to jump out of the way.~] say__p=1;ParaContent(); print (PrintText) SC_1089; new_line; .L_Say743; .L_SayX688; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1709, 1709, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the ravenous armadillo dodging: [ R_1724 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I442_ravenous_armadillo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1724, 1724); ! phrase 1 ! [1: say ~The armadillo lumbers aside.~] say__p=1;ParaContent(); print (PrintText) SC_1090; new_line; .L_Say744; .L_SayX689; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1724, 1724, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Miranda dodging: [ R_1768 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I446_miranda) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1768, 1768); ! phrase 1 ! [1: say ~Miranda jumps aside.~] say__p=1;ParaContent(); print (PrintText) SC_1091; new_line; .L_Say745; .L_SayX690; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1768, 1768, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the chain golem dodging: [ R_1784 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I451_chain_golem) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1784, 1784); ! phrase 1 ! [1: say ~The chain golem attempts to squirm out of the way.~] say__p=1;ParaContent(); print (PrintText) SC_1092; new_line; .L_Say746; .L_SayX691; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1784, 1784, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the bomb dodging: [ R_1806 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I454_jumping_bomb) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1806, 1806); ! phrase 1 ! [1: say ~The jumping bomb attempts to bump out of the way.~] say__p=1;ParaContent(); print (PrintText) SC_1093; new_line; .L_Say747; .L_SayX692; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1806, 1806, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the Reaper dodging: [ R_1822 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I457_reaper) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1822, 1822); ! phrase 1 ! [1: say ~'Nobody can touch Death!' says the Reaper as he ducks away.~] say__p=1;ParaContent(); print (PrintText) SC_1094; new_line; .L_Say748; .L_SayX693; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1822, 1822, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the mindslug dodging: [ R_1847 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I463_mindslug) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1847, 1847); ! phrase 1 ! [1: say ~The mindslug oozes out of the way.~] say__p=1;ParaContent(); print (PrintText) SC_1095; new_line; .L_Say749; .L_SayX694; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1847, 1847, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Fafhrd dodging: [ R_1861 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I466_fafhrd) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1861, 1861); ! phrase 1 ! [1: say ~Fafhrd ducks aside.~] say__p=1;ParaContent(); print (PrintText) SC_1096; new_line; .L_Say750; .L_SayX695; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1861, 1861, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Mouser dodging: [ R_1867 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I469_mouser) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1867, 1867); ! phrase 1 ! [1: say ~Deftly, Mouser rolls aside to avoid the attack.~] say__p=1;ParaContent(); print (PrintText) SC_1097; new_line; .L_Say751; .L_SayX696; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1867, 1867, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the giant tentacle dodging: [ R_1918 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I473_giant_tentacle) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1918, 1918); ! phrase 1 ! [1: say ~The giant tentacle tries to avoid the blow.~] say__p=1;ParaContent(); print (PrintText) SC_1098; new_line; .L_Say752; .L_SayX697; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1918, 1918, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the healer of Aite dodging: [ R_1931 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I478_healer_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1931, 1931); ! phrase 1 ! [1: say ~'Save me, great Aite!' the healer exclaims as he attempts to duck away.~] say__p=1;ParaContent(); print (PrintText) SC_1099; new_line; .L_Say753; .L_SayX698; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1931, 1931, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the tormentor of Aite dodging: [ R_1936 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I481_tormentor_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1936, 1936); ! phrase 1 ! [1: say ~'You will never get me!' the tormentor exclaims as she attempts to duck away.~] say__p=1;ParaContent(); print (PrintText) SC_1100; new_line; .L_Say754; .L_SayX699; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1936, 1936, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the defender of Aite dodging: [ R_1942 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I484_defender_of_aite) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1942, 1942); ! phrase 1 ! [1: say ~The soldier attempts to jump away, using his shield for additional cover.~] say__p=1;ParaContent(); print (PrintText) SC_1101; new_line; .L_Say755; .L_SayX700; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1942, 1942, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report Bodmall dodging: [ R_1972 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I488_bodmall) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1972, 1972); ! phrase 1 ! [1: say ~Gracefully, Bodmall attempts to glide out of the way.~] say__p=1;ParaContent(); print (PrintText) SC_1102; new_line; .L_Say756; .L_SayX701; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1972, 1972, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the corpse dodging: [ R_2019 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I501_rotting_corpse) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2019, 2019); ! phrase 1 ! [1: say ~The corpse [if legs of the rotting corpse is 2]walks[otherwise if legs of the rotting corpse is 1]hops[otherwise]crawls[end if] out of the way.~] say__p=1;ParaContent(); print (PrintText) SC_1103; if (~~(((((PHR_2007_r65 ()) == 2))))) jump L_Say757; ParaContent(); print (PrintText) SC_752; ParaContent(); jump L_SayX702; .L_Say757; if (~~(((((PHR_2007_r65 ()) == 1))))) jump L_Say758; ParaContent(); print (PrintText) SC_753; jump L_SayX702; .L_Say758; ParaContent(); print (PrintText) SC_754; .L_Say759; .L_SayX702; ParaContent(); print (PrintText) SC_1104; new_line; .L_Say760; .L_SayX703; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2019, 2019, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the aswang dodging: [ R_2040 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I513_aswang) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2040, 2040); ! phrase 1 ! [1: say ~The aswang [if as-shape of aswang is as-witch]jumps[otherwise if as-shape of aswang is as-bird]flies[otherwise]jumps[end if] aside.~] say__p=1;ParaContent(); print (PrintText) SC_833; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))))) jump L_Say761; ParaContent(); print (PrintText) SC_1105; ParaContent(); jump L_SayX704; .L_Say761; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))))) jump L_Say762; ParaContent(); print (PrintText) SC_1106; jump L_SayX704; .L_Say762; ParaContent(); print (PrintText) SC_1105; .L_Say763; .L_SayX704; ParaContent(); print (PrintText) SC_1107; new_line; .L_Say764; .L_SayX705; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2040, 2040, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the smoke demon dodging: [ R_2056 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I517_smoke_demon) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2056, 2056); ! phrase 1 ! [1: say ~The smoke demon gently floats out of the way.~] say__p=1;ParaContent(); print (PrintText) SC_1108; new_line; .L_Say765; .L_SayX706; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2056, 2056, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report the imp dodging: [ R_2068 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I519_imp) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2068, 2068); ! phrase 1 ! [1: say ~The imp tries to fly away.~] say__p=1;ParaContent(); print (PrintText) SC_1109; new_line; .L_Say766; .L_SayX707; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2068, 2068, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Report an actor dodging ( this is the standard dodge prose rule ): [ R_1029 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1029, 1029); ! phrase 1 ! [1: say ~[The actor] get[s] ready for quick evasive maneuvers.~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1110; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1111; new_line; .L_Say767; .L_SayX708; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1029, 1029, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: AI weapon selection (B453_ai_weapon_selection) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! An AI weapon selection rule for the dagger of draining ( this is the Malygris prefers the dagger of draining rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 2/7 ! An AI weapon selection rule for a readied weapon ( called W ) ( this is the prefer readied weapon if the end is near rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 3/7 ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer lots of damage rule ): ! === which is equally specific with === ! Rule 4/7 ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer low dodgability and passive parry rule ): ! === which is equally specific with === ! Rule 5/7 ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer good active parry rule ): ! === which is equally specific with === ! Rule 6/7 ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer good attack bonus rule ): ! >>> I - Number of aspects constrained >>> ! Rule 7/7 ! An AI weapon selection rule ( this is the return the weapon weight rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An AI weapon selection rule for the dagger of draining ( this is the Malygris prefers the dagger of draining rule ): [ R_1981 ; if (((parameter_object == I495_dagger_of_draining) && (parameter_object ofclass K17_weapon))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1981, 1981); ! phrase 1 ! [1: increase the weight by 10] (MStack-->MstVO(453,0)) = (MStack-->MstVO(453,0)) + 10; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1981, 1981, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI weapon selection rule for a readied weapon ( called W ) ( this is the prefer readied weapon if the end is near rule ): [ R_1043 t_0 ! Local variable e.g. 'W' = weapon ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K17_weapon) && ((Adj_103_t1_v9(parameter_object))))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1043, 1043); ! phrase 1 ! [1: if four times the health of the running ai is less than the permanent health of the running ai begin] if ((( (4*GProperty(9, (Global_Vars-->36),p14_health)) < GProperty(9, (Global_Vars-->36),p17_permanent_health)))) { ! phrase 2 ! [2: increase the weight by 4] (MStack-->MstVO(453,0)) = (MStack-->MstVO(453,0)) + 4; ! phrase 3 ! [3: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1043, 1043, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer lots of damage rule ): [ R_1039 t_0 ! Local variable e.g. 'W' = weapon ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K17_weapon))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1039, 1039); ! phrase 1 ! [1: increase the weight by the damage die of w] (MStack-->MstVO(453,0)) = (MStack-->MstVO(453,0)) + GProperty(9, t_0,p20_damage_die); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1039, 1039, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer low dodgability and passive parry rule ): [ R_1040 t_0 ! Local variable e.g. 'W' = weapon t_1 ! Local variable e.g. 'n' = number ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K17_weapon))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1040, 1040); ! phrase 1 ! [1: let n be the dodgability of the w] t_1 = GProperty(9, t_0,p22_dodgability); ! phrase 2 ! [2: if the passive parry max of the w is greater than n begin] if (((GProperty(9, t_0,p23_passive_parry_max) > t_1))) { ! phrase 3 ! [3: now n is the passive parry max of the w] t_1 = GProperty(9, t_0,p23_passive_parry_max); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: decrease the weight by n] (MStack-->MstVO(453,0)) = (MStack-->MstVO(453,0)) - t_1; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1040, 1040, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer good active parry rule ): [ R_1041 t_0 ! Local variable e.g. 'W' = weapon ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K17_weapon))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1041, 1041); ! phrase 1 ! [1: increase the weight by the active parry max of the w divided by 2] (MStack-->MstVO(453,0)) = (MStack-->MstVO(453,0)) + (IntegerDivide(GProperty(9, t_0,p24_active_parry_max),2)) ; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1041, 1041, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI weapon selection rule for a weapon ( called W ) ( this is the prefer good attack bonus rule ): [ R_1042 t_0 ! Local variable e.g. 'W' = weapon t_1 ! Local variable e.g. 'n' = number ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K17_weapon))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1042, 1042); ! phrase 1 ! [1: let n be the weapon attack bonus of the w times three] t_1 = (GProperty(9, t_0,p25_weapon_attack_bonus)*3) ; ! phrase 2 ! [2: now n is ( n + 1 ) divided by 2] t_1 = (IntegerDivide( (t_1+1) ,2)) ; ! phrase 3 ! [3: increase the weight by n] (MStack-->MstVO(453,0)) = (MStack-->MstVO(453,0)) + t_1; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1042, 1042, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An AI weapon selection rule ( this is the return the weapon weight rule ): [ R_1044 ; ! phrase 1 ! [1: rule succeeds with result weight] RulebookSucceeds(10,(MStack-->MstVO(453,0))); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: chance to win (B454_chance_to_win) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/32 ! First chance to win rule ( this is the CTW default rule ): ! --- now the mid-placed rules --- ! Rule 2/32 ! Chance to win rule when the global defender is a vampire pc ( this is the CTW versus vampire rule ): ! === which is equally specific with === ! Rule 3/32 ! Chance to win rule when the global defender is a vampire bat pc ( this is the CTW versus vampire bat rule ): ! >>> II - When/while requirement >>> ! Rule 4/32 ! Chance to win rule when the global defender is risky ( this is the CTW risky bonus rule ): ! === which is equally specific with === ! Rule 5/32 ! Chance to win rule when the global attacker is rusted ( this is the CTW rusted monster penalty rule ): ! === which is equally specific with === ! Rule 6/32 ! Chance to win rule when the attacker is affected by smoke ( this is the CTW smoke penalty rule ): ! === which is equally specific with === ! Rule 7/32 ! Chance to win rule when the chosen weapon is a dagger ( this is the CTW dagger concentration bonus rule ): ! === which is equally specific with === ! Rule 8/32 ! Chance to win rule when the global defender wears the crown of Hargo ( this is the CTW crown of Hargo bonus rule ): ! === which is equally specific with === ! Rule 9/32 ! Chance to win rule when the location encloses the holy symbols ( this is the CTW holy symbols rule ): ! === which is equally specific with === ! Rule 10/32 ! Chance to win rule when the location encloses the unholy symbols ( this is the CTW unholy symbols rule ): ! === which is equally specific with === ! Rule 11/32 ! Chance to win rule when the global defender is the jumping bomb ( this is the CTW bomb penalty rule ): ! === which is equally specific with === ! Rule 12/32 ! Chance to win rule when the global attacker is tentacle-confused ( this is the CTW confusion penalty rule ): ! >>> I - Number of aspects constrained >>> ! Rule 13/32 ! Chance to win rule ( this is the CTW attack bonus from weapon rule ): ! === which is equally specific with === ! Rule 14/32 ! Chance to win rule ( this is the CTW concentration bonus rule ): ! === which is equally specific with === ! Rule 15/32 ! Chance to win rule ( this is the CTW parry bonus rule ): ! === which is equally specific with === ! Rule 16/32 ! Chance to win rule ( this is the CTW dodge bonus rule ): ! === which is equally specific with === ! Rule 17/32 ! Chance to win rule ( this is the CTW melee bonus rule ): ! === which is equally specific with === ! Rule 18/32 ! Chance to win rule ( this is the CTW defence bonus rule ): ! === which is equally specific with === ! Rule 19/32 ! Chance to win rule ( this is the CTW tension bonus rule ): ! === which is equally specific with === ! Rule 20/32 ! Chance to win rule ( this is the CTW smoky robe penalty rule ): ! === which is equally specific with === ! Rule 21/32 ! Chance to win rule ( this is the CTW smoky blade penalty rule ): ! === which is equally specific with === ! Rule 22/32 ! Chance to win rule ( this is the CTW executioner's axe in temple of Nomos rule ): ! === which is equally specific with === ! Rule 23/32 ! Chance to win rule ( this is the CTW plate mail rule ): ! === which is equally specific with === ! Rule 24/32 ! Chance to win rule ( this is the CTW glass cannon bonus rule ): ! === which is equally specific with === ! Rule 25/32 ! Chance to win rule ( this is the CTW robe of the dead mage rule ): ! === which is equally specific with === ! Rule 26/32 ! Chance to win rule ( this is the CTW ment penalty rule ): ! === which is equally specific with === ! Rule 27/32 ! Chance to win rule ( this is the CTW Aite bonus rule ): ! === which is equally specific with === ! Rule 28/32 ! Chance to win rule ( this is the CTW stun penalty rule ): ! === which is equally specific with === ! Rule 29/32 ! Chance to win rule ( this is the CTW mindslug enslaved penalty rule ): ! === which is equally specific with === ! Rule 30/32 ! Chance to win rule ( this is the CTW enslaved bonus rule ): ! === which is equally specific with === ! Rule 31/32 ! Chance to win rule ( this is the CTW domination penalty rule ): ! --- now the last-placed rules --- ! Rule 32/32 ! Last chance to win rule ( this is the account for the best defence and return the CTW rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First chance to win rule ( this is the CTW default rule ): [ R_1051 ; ! phrase 1 ! [1: now the chance-to-win is 10] (MStack-->MstVO(454,0)) = 10; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Chance to win rule when the global defender is a vampire pc ( this is the CTW versus vampire rule ): [ R_1281 ; if (((((((Adj_219_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1281, 1281); ! phrase 1 ! [1: increase the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1281, 1281, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Chance to win rule when the global defender is a vampire bat pc ( this is the CTW versus vampire bat rule ): [ R_1288 ; if (((((((Adj_220_t1_v9((Global_Vars-->42)))) && ((Adj_35_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1288, 1288); ! phrase 1 ! [1: decrease the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1288, 1288, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Chance to win rule when the global defender is risky ( this is the CTW risky bonus rule ): [ R_1204 ; if (((((((Adj_197_t1_v9((Global_Vars-->42))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1204, 1204); ! phrase 1 ! [1: increase the chance-to-win by 6] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 6; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1204, 1204, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Chance to win rule when the global attacker is rusted ( this is the CTW rusted monster penalty rule ): [ R_1238 ; if (((((((Adj_205_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1238, 1238); ! phrase 1 ! [1: decrease the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1238, 1238, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Chance to win rule when the attacker is affected by smoke ( this is the CTW smoke penalty rule ): [ R_1331 ; if ((((((PHR_1328_r77 ())))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1331, 1331); ! phrase 1 ! [1: decrease the chance-to-win by smoke penalty of the location] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - (Resolver_9(real_location,"source", 293)); } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1331, 1331, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule when the chosen weapon is a dagger ( this is the CTW dagger concentration bonus rule ): [ R_1392 t_0 ! Local variable e.g. 'n' = number ; if (((((((Global_Vars-->47) ofclass K41_dagger)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1392, 1392); ! phrase 1 ! [1: let n be the tension divided by 2] t_0 = (IntegerDivide((Global_Vars-->48),2)) ; ! phrase 2 ! [2: increase the chance-to-win by n] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + t_0; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1392, 1392, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule when the global defender wears the crown of Hargo ( this is the CTW crown of Hargo bonus rule ): [ R_1421 ; if (((((((Global_Vars-->42) == WearerOf(I278_crown_of_hargo))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1421, 1421); ! phrase 1 ! [1: increase the chance-to-win by 1] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 1; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1421, 1421, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Chance to win rule when the location encloses the holy symbols ( this is the CTW holy symbols rule ): [ R_1680 ; if ((((((IndirectlyContains(real_location,I434_holy_symbols))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1680, 1680); ! phrase 1 ! [1: if the global attacker is undead or the global attacker is demonic begin] if (((((Global_Vars-->41).p111_faction == I158_undead))) || ((((Global_Vars-->41).p111_faction == I160_demonic)))) { ! phrase 2 ! [2: decrease the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 2; ! phrase 3 ! [3: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1680, 1680, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Chance to win rule when the location encloses the unholy symbols ( this is the CTW unholy symbols rule ): [ R_1682 ; if ((((((IndirectlyContains(real_location,I435_unholy_symbols))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1682, 1682); ! phrase 1 ! [1: if the global attacker is undead or the global attacker is demonic begin] if (((((Global_Vars-->41).p111_faction == I158_undead))) || ((((Global_Vars-->41).p111_faction == I160_demonic)))) { ! phrase 2 ! [2: decrease the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 2; ! phrase 3 ! [3: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1682, 1682, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Chance to win rule when the global defender is the jumping bomb ( this is the CTW bomb penalty rule ): [ R_1803 ; if (((((((Global_Vars-->42) == I454_jumping_bomb)))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1803, 1803); ! phrase 1 ! [1: if the concentration of the jumping bomb is greater than 0 begin] if (((GProperty(9, I454_jumping_bomb,p26_concentration) > 0))) { ! phrase 2 ! [2: decrease the chance-to-win by the concentration of the jumping bomb] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - GProperty(9, I454_jumping_bomb,p26_concentration); ! phrase 3 ! [3: end if] } } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1803, 1803, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Chance to win rule when the global attacker is tentacle-confused ( this is the CTW confusion penalty rule ): [ R_1912 ; if (((((((Adj_272_t1_v9((Global_Vars-->41))))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1912, 1912); ! phrase 1 ! [1: decrease the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 2; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1912, 1912, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Chance to win rule ( this is the CTW attack bonus from weapon rule ): [ R_963 ; ! phrase 1 ! [1: increase the chance-to-win by the weapon attack bonus of the chosen weapon] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + GProperty(9, (Global_Vars-->47),p25_weapon_attack_bonus); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Chance to win rule ( this is the CTW concentration bonus rule ): [ R_1018 ; ! phrase 1 ! [1: if the concentration of the running ai is begin] switch(GProperty(9, (Global_Vars-->36),p26_concentration)) { ! phrase 2 ! [2: -- 1] 1: ! phrase 3 ! [3: increase the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 2; ! phrase 4 ! [4: -- 2] ; 2: ! phrase 5 ! [5: increase the chance-to-win by 4] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 4; ! phrase 6 ! [6: -- 3] ; 3: ! phrase 7 ! [7: increase the chance-to-win by 8] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 8; ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Chance to win rule ( this is the CTW parry bonus rule ): [ R_1026 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'item' = object ; ! phrase 1 ! [1: let n be the passive parry max of the chosen weapon] t_0 = GProperty(9, (Global_Vars-->47),p23_passive_parry_max); ! phrase 2 ! [2: let item be a random readied weapon enclosed by the chosen target] t_1 = (Prop_277()) ; ! phrase 3 ! [3: if the active parry max of item is less than n begin] if (((GProperty(OBJECT_TY, t_1,p24_active_parry_max) < t_0))) { ! phrase 4 ! [4: now n is the active parry max of item] t_0 = GProperty(OBJECT_TY, t_1,p24_active_parry_max); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the best defence is less than n begin] if ((((MStack-->MstVO(454,1)) < t_0))) { ! phrase 7 ! [7: now the best defence is n] (MStack-->MstVO(454,1)) = t_0; ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Chance to win rule ( this is the CTW dodge bonus rule ): [ R_1032 t_0 ! Local variable e.g. 'n' = number ; ! phrase 1 ! [1: let n be the dodgability of the chosen weapon] t_0 = GProperty(9, (Global_Vars-->47),p22_dodgability); ! phrase 2 ! [2: if the best defence is less than n begin] if ((((MStack-->MstVO(454,1)) < t_0))) { ! phrase 3 ! [3: now the best defence is n] (MStack-->MstVO(454,1)) = t_0; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Chance to win rule ( this is the CTW melee bonus rule ): [ R_1052 ; ! phrase 1 ! [1: increase the chance-to-win by the melee of the running ai] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + GProperty(9, (Global_Vars-->36),p18_melee); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Chance to win rule ( this is the CTW defence bonus rule ): [ R_1053 ; ! phrase 1 ! [1: decrease the chance-to-win by the defence of the running ai] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - GProperty(9, (Global_Vars-->36),p19_defence); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Chance to win rule ( this is the CTW tension bonus rule ): [ R_1072 ; ! phrase 1 ! [1: increase the chance-to-win by the tension divided by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + (IntegerDivide((Global_Vars-->48),2)) ; rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule ( this is the CTW smoky robe penalty rule ): [ R_1431 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global defender wears the smoky robe begin] if ((((Global_Vars-->42) == WearerOf(I306_smoky_robe)))) { ! phrase 2 ! [2: unless the global attacker is smoke immune begin] if (~~(((PHR_1325_r48 ((Global_Vars-->41)))))) { ! phrase 3 ! [3: if the smoke penalty of the location is not 0 begin] if (((~~(((Resolver_9(real_location,"source", 941)) == 0))))) { ! phrase 4 ! [4: let n be the smoke penalty of the location] t_0 = (Resolver_9(real_location,"source", 942)); ! phrase 5 ! [5: decrease the chance-to-win by n] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - t_0; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule ( this is the CTW smoky blade penalty rule ): [ R_1433 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the chosen weapon is the smoky blade begin] if ((((Global_Vars-->47) == I310_smoky_blade))) { ! phrase 2 ! [2: unless the chosen target is smoke immune begin] if (~~(((PHR_1325_r48 ((Global_Vars-->37)))))) { ! phrase 3 ! [3: if the smoke penalty of the location is not 0 begin] if (((~~(((Resolver_9(real_location,"source", 986)) == 0))))) { ! phrase 4 ! [4: let n be the smoke penalty of the location] t_0 = (Resolver_9(real_location,"source", 987)); ! phrase 5 ! [5: increase the chance-to-win by n] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + t_0; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule ( this is the CTW executioner's axe in temple of Nomos rule ): [ R_1488 ; ! phrase 1 ! [1: if chosen weapon is the executioner's axe and the location is the temple of nomos begin] if (((((Global_Vars-->47) == I345_executioner_s_axe))) && (((real_location == I387_temple_of_nomos)))) { ! phrase 2 ! [2: increase the chance-to-win by 3] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 3; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule ( this is the CTW plate mail rule ): [ R_1498 ; ! phrase 1 ! [1: if the global attacker wears suit of plate mail begin] if ((((Global_Vars-->41) == WearerOf(I351_suit_of_plate_mail)))) { ! phrase 2 ! [2: decrease the chance-to-win by 1] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 1; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule ( this is the CTW glass cannon bonus rule ): [ R_1507 ; ! phrase 1 ! [1: if the global defender weapon is the glass cannon begin] if ((((Global_Vars-->44) == I354_glass_cannon))) { ! phrase 2 ! [2: increase the chance-to-win by 3] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 3; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule ( this is the CTW robe of the dead mage rule ): [ R_1512 ; ! phrase 1 ! [1: if the global defender wears the robe of the dead mage begin] if ((((Global_Vars-->42) == WearerOf(I355_robe_of_the_dead_mage)))) { ! phrase 2 ! [2: decrease the chance-to-win by 1] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 1; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Chance to win rule ( this is the CTW ment penalty rule ): [ R_1533 ; ! phrase 1 ! [1: if the ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 2 ! [2: decrease the chance-to-win by ment bonus] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - (PHR_1528_r78 ()); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Chance to win rule ( this is the CTW Aite bonus rule ): [ R_1589 ; ! phrase 1 ! [1: if the location is the temple of aite begin] if (((real_location == I389_temple_of_aite))) { ! phrase 2 ! [2: if the global attacker is beloved of aite begin] if (((PHR_1205_r79 ((Global_Vars-->41))))) { ! phrase 3 ! [3: increase the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 2; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Chance to win rule ( this is the CTW stun penalty rule ): [ R_1760 ; ! phrase 1 ! [1: if the global attacker is stunned begin] if ((((Adj_43_t1_v9((Global_Vars-->41)))))) { ! phrase 2 ! [2: decrease the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 2; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Chance to win rule ( this is the CTW mindslug enslaved penalty rule ): [ R_1852 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the global defender is the mindslug begin] if ((((Global_Vars-->42) == I463_mindslug))) { ! phrase 2 ! [2: let n be the number of enslaved persons in the location] t_0 = (Prop_278()) ; ! phrase 3 ! [3: if n greater than 0 begin] if (((t_0 > 0))) { ! phrase 4 ! [4: let m be n + 1] t_1 = (t_0+1) ; ! phrase 5 ! [5: let m be n times m] t_1 = (t_0*t_1) ; ! phrase 6 ! [6: decrease the chance-to-win by m] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - t_1; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Chance to win rule ( this is the CTW enslaved bonus rule ): [ R_1854 ; ! phrase 1 ! [1: if the global defender is enslaved begin] if ((((Global_Vars-->42).p111_faction == I465_enslaved))) { ! phrase 2 ! [2: increase the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) + 2; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Chance to win rule ( this is the CTW domination penalty rule ): [ R_1885 ; ! phrase 1 ! [1: if the global defender dominates the global attacker begin] if ((((Relation_TestVtoV((Global_Vars-->42),Rel_Record_83,(Global_Vars-->41),false))))) { ! phrase 2 ! [2: decrease the chance-to-win by 2] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - 2; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Last chance to win rule ( this is the account for the best defence and return the CTW rule ): [ R_1054 ; ! phrase 1 ! [1: decrease the chance-to-win by the best defence] (MStack-->MstVO(454,0)) = (MStack-->MstVO(454,0)) - (MStack-->MstVO(454,1)); ! phrase 2 ! [2: rule succeeds with result the chance-to-win] RulebookSucceeds(10,(MStack-->MstVO(454,0))); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: resetting the map (B456_resetting_the_map) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First resetting the map rule ( this is the destroy all connections rule ): ! --- now the mid-placed rules --- ! Rule 2/3 ! Resetting the map rule ( this is the we start with entrance Hall rule ): ! === which is equally specific with === ! Rule 3/3 ! Resetting the map rule ( this is the reset collapse rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! First resetting the map rule ( this is the destroy all connections rule ): [ R_1076 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room t_2 ! Local variable e.g. '?-1,-1?' = direction t_3 ! Local variable e.g. '?-1,-1?' = direction ; ! phrase 1 ! [1: repeat with place running through rooms begin] for (t_0=Prop_279(0), t_1=Prop_279(t_0): t_0: t_0=t_1, t_1=Prop_279(t_1)) { ! phrase 2 ! [2: now place is not placed] (Adj_111_t3_v9(t_0)); ! phrase 3 ! [3: repeat with way running through cardinal directions begin] for (t_2=Prop_280(0), t_3=Prop_280(t_2): t_2: t_2=t_3, t_3=Prop_280(t_3)) { ! phrase 4 ! [4: change the way exit of place to nothing] AssertMapConnection(t_0,t_2,nothing); ! phrase 5 ! [5: end repeat] } ! phrase 6 ! [6: now the x-coordinate of place is 100] WriteGProperty(9, t_0,p28_x_coordinate,100); ! phrase 7 ! [7: now the y-coordinate of place is 100] WriteGProperty(9, t_0,p29_y_coordinate,100); ! phrase 8 ! [8: now the z-coordinate of place is 100] WriteGProperty(9, t_0,p30_z_coordinate,100); ! phrase 9 ! [9: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Resetting the map rule ( this is the we start with entrance Hall rule ): [ R_1077 ; ! phrase 1 ! [1: now the x-coordinate of entrance hall is 0] WriteGProperty(9, I375_entrance_hall,p28_x_coordinate,0); ! phrase 2 ! [2: now the y-coordinate of entrance hall is 0] WriteGProperty(9, I375_entrance_hall,p29_y_coordinate,0); ! phrase 3 ! [3: now the z-coordinate of entrance hall is 0] WriteGProperty(9, I375_entrance_hall,p30_z_coordinate,0); ! phrase 4 ! [4: now entrance hall is placed] (Adj_111_t2_v9(I375_entrance_hall)); rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Resetting the map rule ( this is the reset collapse rule ): [ R_1080 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room t_2 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: repeat with place running through rooms begin] for (t_0=Prop_281(0), t_1=Prop_281(t_0): t_0: t_0=t_1, t_1=Prop_281(t_1)) { ! phrase 2 ! [2: while at least one room collapses place begin] while ((Prop_282(,t_0))) { ! phrase 3 ! [3: let place2 be a random room that collapses place] t_2 = (Prop_283(,t_0)) ; ! phrase 4 ! [4: now place2 does not collapse place] (Relation_NowNVtoV(t_2,Rel_Record_73,t_0,true)); ! phrase 5 ! [5: end while] } ! phrase 6 ! [6: end repeat] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: creating the map (B457_creating_the_map) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Creating the map rule ( this is the locate and connect all rooms rule ): ! --- now the last-placed rules --- ! Rule 2/2 ! Last creating the map ( this is the possibly adding some further connections rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Creating the map rule ( this is the locate and connect all rooms rule ): [ R_1078 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = object t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: while less than twelve rooms are placed or less than eight habitable rooms are placed begin] while (((Prop_284())) || ((Prop_285()))) { ! phrase 2 ! [2: let place be a random placed room] t_0 = (Prop_286()) ; ! phrase 3 ! [3: let way be a random cardinal direction] t_1 = (Prop_287()) ; ! phrase 4 ! [4: if way is up or way is down begin] if ((((t_1 == I54_up))) || (((t_1 == I55_down)))) { ! phrase 5 ! [5: now way is a random cardinal direction] t_1 = (Prop_288()) ; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: let x be the x way of place] t_2 = (Resolver_5(t_1,t_0,"source", 114)); ! phrase 8 ! [8: let y be the y way of place] t_3 = (Resolver_6(t_1,t_0,"source", 115)); ! phrase 9 ! [9: let z be the z way of place] t_4 = (Resolver_7(t_1,t_0,"source", 116)); ! phrase 10 ! [10: if the space at x by y by z is free begin] if (((PHR_1094_r38 (t_2,t_3,t_4)))) { ! phrase 11 ! [11: let chosen room be a suitable room from place at x by y by z] t_5 = (Resolver_22(t_0,t_2,t_3,t_4,"source", 118)); ! phrase 12 ! [12: place chosen room from place at x by y by z] (Resolver_23(t_5,t_0,t_2,t_3,t_4,"source", 119)); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end while] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Last creating the map ( this is the possibly adding some further connections rule ): [ R_1079 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room t_2 ! Local variable e.g. '?-1,-1?' = room t_3 ! Local variable e.g. '?-1,-1?' = room t_4 ! Local variable e.g. '?-1,-1?' = object t_5 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: repeat with place running through placed connectable rooms begin] for (t_0=Prop_289(0), t_1=Prop_289(t_0): t_0: t_0=t_1, t_1=Prop_289(t_1)) { ! phrase 2 ! [2: repeat with further place running through placed connectable rooms begin] for (t_2=Prop_290(0), t_3=Prop_290(t_2): t_2: t_2=t_3, t_3=Prop_290(t_3)) { ! phrase 3 ! [3: let way be the direction from place to further place] t_4 = (PHR_1092_r12 (t_0,t_2)); ! phrase 4 ! [4: if way is not northwest begin] if (((~~((t_4 == I48_northwest))))) { ! phrase 5 ! [5: if further place is not the room way of place begin] if (((~~((t_2 == (Resolver_14(t_4,t_0,"source", 128))))))) { ! phrase 6 ! [6: if a random chance of 1 in 4 succeeds or place is connection-inviting or further place is connection-inviting begin] if ((( (GenerateRandomNumber(1, 4) <= 1) )) || (((((Adj_115_t1_v9(t_0))))) || ((((Adj_115_t1_v9(t_2))))))) { ! phrase 7 ! [7: if generation info is true , say ~* Adding connection between [place] and [further place].[line break][run paragraph on]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1112; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_1113; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say768; .L_SayX709; } ! phrase 8 ! [8: change the way exit of place to further place] (Resolver_24(t_4,t_0,t_2,"source", 131)); ! phrase 9 ! [9: let reverse be the opposite of way] t_5 = GProperty(OBJECT_TY, t_4,p9_opposite); ! phrase 10 ! [10: change the reverse exit of further place to place] (Resolver_24(t_5,t_2,t_0,"source", 133)); ! phrase 11 ! [11: if a random chance of 1 in 4 succeeds begin] if (( (GenerateRandomNumber(1, 4) <= 1) )) { ! phrase 12 ! [12: now place collapses further place] (Relation_NowVtoV(t_0,Rel_Record_73,t_2,true)); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end repeat] } ! phrase 18 ! [18: end repeat] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: additional placement (B458_additional_placement) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! An additional placement rule: ! === which is equally specific with === ! Rule 2/4 ! An additional placement rule: ! === which is equally specific with === ! Rule 3/4 ! An additional placement rule: ! === which is equally specific with === ! Rule 4/4 ! An additional placement rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An additional placement rule: [ R_1559 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = number t_6 ! Local variable e.g. '?-1,-1?' = object t_7 ! Local variable e.g. '?-1,-1?' = object t_8 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if additional considered room is bridge of doom begin] if ((((Global_Vars-->56) == I384_bridge_of_doom))) { ! phrase 2 ! [2: now placing bridge of doom is true] (Global_Vars-->99) = 1; ! phrase 3 ! [3: let x-diff be x-coordinate of bridge of doom minus x-coordinate of original room] t_0 = (GProperty(9, I384_bridge_of_doom,p28_x_coordinate)-GProperty(9, (Global_Vars-->51),p28_x_coordinate)) ; ! phrase 4 ! [4: let y-diff be y-coordinate of bridge of doom minus y-coordinate of original room] t_1 = (GProperty(9, I384_bridge_of_doom,p29_y_coordinate)-GProperty(9, (Global_Vars-->51),p29_y_coordinate)) ; ! phrase 5 ! [5: let z-diff be z-coordinate of bridge of doom minus z-coordinate of original room] t_2 = (GProperty(9, I384_bridge_of_doom,p30_z_coordinate)-GProperty(9, (Global_Vars-->51),p30_z_coordinate)) ; ! phrase 6 ! [6: let x be x-coordinate of bridge of doom plus x-diff] t_3 = (GProperty(9, I384_bridge_of_doom,p28_x_coordinate)+t_0) ; ! phrase 7 ! [7: let y be y-coordinate of bridge of doom plus y-diff] t_4 = (GProperty(9, I384_bridge_of_doom,p29_y_coordinate)+t_1) ; ! phrase 8 ! [8: let z be z-coordinate of bridge of doom plus z-diff] t_5 = (GProperty(9, I384_bridge_of_doom,p30_z_coordinate)+t_2) ; ! phrase 9 ! [9: if the space at x by y by z is free begin] if (((PHR_1094_r38 (t_3,t_4,t_5)))) { ! phrase 10 ! [10: let chosen room be a suitable room from bridge of doom at x by y by z] t_6 = (PHR_1087_r87 (I384_bridge_of_doom,t_3,t_4,t_5)); ! phrase 11 ! [11: place chosen room from bridge of doom at x by y by z] (Resolver_25(t_6,I384_bridge_of_doom,t_3,t_4,t_5,"source", 239)); ! phrase 12 ! [12: otherwise] } else { ! phrase 13 ! [13: let place be the room at x by y by z] t_6 = (PHR_1095_r39 (t_3,t_4,t_5)); ! phrase 14 ! [14: let way be the direction from bridge of doom to place] t_7 = (Resolver_0(I384_bridge_of_doom,t_6,"source", 242)); ! phrase 15 ! [15: change the way exit of bridge of doom to place] (Resolver_26(t_7,I384_bridge_of_doom,t_6,"source", 243)); ! phrase 16 ! [16: let reverse be the opposite of way] t_8 = GProperty(OBJECT_TY, t_7,p9_opposite); ! phrase 17 ! [17: change the reverse exit of place to bridge of doom] (Resolver_27(t_8,t_6,I384_bridge_of_doom,"source", 245)); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: now x is x-coordinate of bridge of doom] t_3 = GProperty(9, I384_bridge_of_doom,p28_x_coordinate); ! phrase 20 ! [20: now y is y-coordinate of bridge of doom] t_4 = GProperty(9, I384_bridge_of_doom,p29_y_coordinate); ! phrase 21 ! [21: now z is z-coordinate of bridge of doom - 1] t_5 = (GProperty(9, I384_bridge_of_doom,p30_z_coordinate)-1) ; ! phrase 22 ! [22: place lake of lava from bridge of doom at x by y by z] (PHR_1088_r88 (I383_lake_of_lava,I384_bridge_of_doom,t_3,t_4,t_5)); ! phrase 23 ! [23: now placing bridge of doom is false] (Global_Vars-->99) = 0; ! phrase 24 ! [24: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An additional placement rule: [ R_1611 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = number t_6 ! Local variable e.g. '?-1,-1?' = object t_7 ! Local variable e.g. '?-1,-1?' = object t_8 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if additional considered room is vast staircase begin] if ((((Global_Vars-->56) == I403_vast_staircase))) { ! phrase 2 ! [2: now placing vast staircase is true] (Global_Vars-->110) = 1; ! phrase 3 ! [3: let x-diff be x-coordinate of vast staircase minus x-coordinate of original room] t_0 = (GProperty(9, I403_vast_staircase,p28_x_coordinate)-GProperty(9, (Global_Vars-->51),p28_x_coordinate)) ; ! phrase 4 ! [4: let y-diff be y-coordinate of vast staircase minus y-coordinate of original room] t_1 = (GProperty(9, I403_vast_staircase,p29_y_coordinate)-GProperty(9, (Global_Vars-->51),p29_y_coordinate)) ; ! phrase 5 ! [5: let z-diff be z-coordinate of vast staircase minus z-coordinate of original room] t_2 = (GProperty(9, I403_vast_staircase,p30_z_coordinate)-GProperty(9, (Global_Vars-->51),p30_z_coordinate)) ; ! phrase 6 ! [6: let x be x-coordinate of vast staircase plus x-diff] t_3 = (GProperty(9, I403_vast_staircase,p28_x_coordinate)+t_0) ; ! phrase 7 ! [7: let y be y-coordinate of vast staircase plus y-diff] t_4 = (GProperty(9, I403_vast_staircase,p29_y_coordinate)+t_1) ; ! phrase 8 ! [8: let z be z-coordinate of vast staircase plus z-diff] t_5 = (GProperty(9, I403_vast_staircase,p30_z_coordinate)+t_2) ; ! phrase 9 ! [9: if the space at x by y by z is free begin] if (((PHR_1094_r38 (t_3,t_4,t_5)))) { ! phrase 10 ! [10: let chosen room be a suitable room from vast staircase at x by y by z] t_6 = (PHR_1087_r87 (I403_vast_staircase,t_3,t_4,t_5)); ! phrase 11 ! [11: place chosen room from vast staircase at x by y by z] (Resolver_25(t_6,I403_vast_staircase,t_3,t_4,t_5,"source", 926)); ! phrase 12 ! [12: otherwise] } else { ! phrase 13 ! [13: let place be the room at x by y by z] t_6 = (PHR_1095_r39 (t_3,t_4,t_5)); ! phrase 14 ! [14: let way be the direction from vast staircase to place] t_7 = (Resolver_0(I403_vast_staircase,t_6,"source", 929)); ! phrase 15 ! [15: change the way exit of vast staircase to place] (Resolver_26(t_7,I403_vast_staircase,t_6,"source", 930)); ! phrase 16 ! [16: let reverse be the opposite of way] t_8 = GProperty(OBJECT_TY, t_7,p9_opposite); ! phrase 17 ! [17: change the reverse exit of place to vast staircase] (Resolver_27(t_8,t_6,I403_vast_staircase,"source", 932)); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: now placing vast staircase is false] (Global_Vars-->110) = 0; ! phrase 20 ! [20: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An additional placement rule: [ R_1637 ; ! phrase 1 ! [1: if the additional considered room is the drawing room begin] if ((((Global_Vars-->56) == I416_drawing_room))) { ! phrase 2 ! [2: place quartering room next to drawing room] (PHR_1089_r89 (I418_quartering_room,I416_drawing_room)); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! An additional placement rule: [ R_1638 ; ! phrase 1 ! [1: if the additional considered room is the quartering room begin] if ((((Global_Vars-->56) == I418_quartering_room))) { ! phrase 2 ! [2: place drawing room next to quartering room] (PHR_1089_r89 (I416_drawing_room,I418_quartering_room)); ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: placement possible (B459_placement_possible) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! Placement possible rule ( this is the do not use rooms that are too difficult rule ): ! === which is equally specific with === ! Rule 2/7 ! A placement possible rule ( this is the vertical placement possible rule ): ! === which is equally specific with === ! Rule 3/7 ! A placement possible rule: ! === which is equally specific with === ! Rule 4/7 ! A placement possible rule: ! === which is equally specific with === ! Rule 5/7 ! A placement possible rule: ! === which is equally specific with === ! Rule 6/7 ! A placement possible rule: ! --- now the last-placed rules --- ! Rule 7/7 ! Last placement possible rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Placement possible rule ( this is the do not use rooms that are too difficult rule ): [ R_1084 ; ! phrase 1 ! [1: if the difficulty level of considered room is greater than difficulty begin] if (((GProperty(9, (Global_Vars-->50),p27_difficulty_level) > (Global_Vars-->131)))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A placement possible rule ( this is the vertical placement possible rule ): [ R_1142 ; ! phrase 1 ! [1: if considered room is vp-underground begin] if ((((Global_Vars-->50).p141_vertical_placement == I110_vp_underground))) { ! phrase 2 ! [2: if the considered-z is not less than 0 begin] if (((~~(((Global_Vars-->54) < 0))))) { ! phrase 3 ! [3: rule fails] RulebookFails(); rtrue; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if considered room is vp-above-ground begin] if ((((Global_Vars-->50).p141_vertical_placement == I112_vp_above_ground))) { ! phrase 7 ! [7: if the considered-z is less than 0 begin] if ((((Global_Vars-->54) < 0))) { ! phrase 8 ! [8: rule fails] RulebookFails(); rtrue; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if considered room is vp-high begin] if ((((Global_Vars-->50).p141_vertical_placement == I113_vp_high))) { ! phrase 12 ! [12: if the considered-z is not greater than 0 begin] if (((~~(((Global_Vars-->54) > 0))))) { ! phrase 13 ! [13: rule fails] RulebookFails(); rtrue; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A placement possible rule: [ R_1556 ; ! phrase 1 ! [1: if original room is lake of lava begin] if ((((Global_Vars-->51) == I383_lake_of_lava))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A placement possible rule: [ R_1558 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: unless placing bridge of doom is true begin] if (~~(((((Global_Vars-->99) && true) == (1 && true))))) { ! phrase 2 ! [2: if considered room is bridge of doom begin] if ((((Global_Vars-->50) == I384_bridge_of_doom))) { ! phrase 3 ! [3: unless considered-z is z-coordinate of original room begin] if (~~((((Global_Vars-->54) == GProperty(9, (Global_Vars-->51),p30_z_coordinate))))) { ! phrase 4 ! [4: rule fails] RulebookFails(); rtrue; ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: let x-diff be considered-x minus x-coordinate of original room] t_0 = ((Global_Vars-->52)-GProperty(9, (Global_Vars-->51),p28_x_coordinate)) ; ! phrase 7 ! [7: let y-diff be considered-y minus y-coordinate of original room] t_1 = ((Global_Vars-->53)-GProperty(9, (Global_Vars-->51),p29_y_coordinate)) ; ! phrase 8 ! [8: let z-diff be considered-z minus z-coordinate of original room] t_2 = ((Global_Vars-->54)-GProperty(9, (Global_Vars-->51),p30_z_coordinate)) ; ! phrase 9 ! [9: let x be considered-x plus x-diff] t_3 = ((Global_Vars-->52)+t_0) ; ! phrase 10 ! [10: let y be considered-y plus y-diff] t_4 = ((Global_Vars-->53)+t_1) ; ! phrase 11 ! [11: let z be considered-z plus z-diff] t_5 = ((Global_Vars-->54)+t_2) ; ! phrase 12 ! [12: unless the space at x by y by z is free begin] if (~~(((PHR_1094_r38 (t_3,t_4,t_5))))) { ! phrase 13 ! [13: if the room at x by y by z is not connectable begin] if (((~~(((Adj_113_t1_v9((PHR_1095_r39 (t_3,t_4,t_5))))))))) { ! phrase 14 ! [14: rule fails] RulebookFails(); rtrue; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end unless] } ! phrase 17 ! [17: now x is considered-x] t_3 = (Global_Vars-->52); ! phrase 18 ! [18: now y is considered-y] t_4 = (Global_Vars-->53); ! phrase 19 ! [19: now z is considered-z - 1] t_5 = ((Global_Vars-->54)-1) ; ! phrase 20 ! [20: unless the space at x by y by z is free begin] if (~~(((PHR_1094_r38 (t_3,t_4,t_5))))) { ! phrase 21 ! [21: rule fails] RulebookFails(); rtrue; ! phrase 22 ! [22: end unless] } ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: if original room is bridge of doom begin] if ((((Global_Vars-->51) == I384_bridge_of_doom))) { ! phrase 25 ! [25: rule fails] RulebookFails(); rtrue; ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A placement possible rule: [ R_1610 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: unless placing vast staircase is true begin] if (~~(((((Global_Vars-->110) && true) == (1 && true))))) { ! phrase 2 ! [2: if considered room is vast staircase begin] if ((((Global_Vars-->50) == I403_vast_staircase))) { ! phrase 3 ! [3: unless considered-z is not z-coordinate of original room begin] if (~~(((~~(((Global_Vars-->54) == GProperty(9, (Global_Vars-->51),p30_z_coordinate))))))) { ! phrase 4 ! [4: rule fails] RulebookFails(); rtrue; ! phrase 5 ! [5: end unless] } ! phrase 6 ! [6: let x-diff be considered-x minus x-coordinate of original room] t_0 = ((Global_Vars-->52)-GProperty(9, (Global_Vars-->51),p28_x_coordinate)) ; ! phrase 7 ! [7: let y-diff be considered-y minus y-coordinate of original room] t_1 = ((Global_Vars-->53)-GProperty(9, (Global_Vars-->51),p29_y_coordinate)) ; ! phrase 8 ! [8: let z-diff be considered-z minus z-coordinate of original room] t_2 = ((Global_Vars-->54)-GProperty(9, (Global_Vars-->51),p30_z_coordinate)) ; ! phrase 9 ! [9: let x be considered-x plus x-diff] t_3 = ((Global_Vars-->52)+t_0) ; ! phrase 10 ! [10: let y be considered-y plus y-diff] t_4 = ((Global_Vars-->53)+t_1) ; ! phrase 11 ! [11: let z be considered-z plus z-diff] t_5 = ((Global_Vars-->54)+t_2) ; ! phrase 12 ! [12: unless the space at x by y by z is free begin] if (~~(((PHR_1094_r38 (t_3,t_4,t_5))))) { ! phrase 13 ! [13: if the room at x by y by z is not connectable begin] if (((~~(((Adj_113_t1_v9((PHR_1095_r39 (t_3,t_4,t_5))))))))) { ! phrase 14 ! [14: rule fails] RulebookFails(); rtrue; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end unless] } ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: if original room is vast staircase begin] if ((((Global_Vars-->51) == I403_vast_staircase))) { ! phrase 19 ! [19: rule fails] RulebookFails(); rtrue; ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A placement possible rule: [ R_1636 ; ! phrase 1 ! [1: if the considered room is the drawing room or the considered room is the quartering room begin] if (((((Global_Vars-->50) == I416_drawing_room))) || ((((Global_Vars-->50) == I418_quartering_room)))) { ! phrase 2 ! [2: if the number of rooms surrounding considered-x by considered-y by considered-z is the number of cardinal directions begin] if ((((PHR_1093_r90 ((Global_Vars-->52),(Global_Vars-->53),(Global_Vars-->54))) == (Prop_291()) ))) { ! phrase 3 ! [3: rule fails] RulebookFails(); rtrue; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Last placement possible rule: [ R_1085 ; ! phrase 1 ! [1: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: placement scoring (B460_placement_scoring) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A placement scoring rule ( this is the vertical placement scoring rule ): ! === which is equally specific with === ! Rule 2/3 ! A placement scoring rule ( this is the link rooms with the same mood rule ): ! === which is equally specific with === ! Rule 3/3 ! A placement scoring rule ( this is the Vast Staircase has higher probability rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A placement scoring rule ( this is the vertical placement scoring rule ): [ R_1143 ; ! phrase 1 ! [1: if considered room is vp-underground or considered room is vp-likely-underground begin] if (((((Global_Vars-->50).p141_vertical_placement == I110_vp_underground))) || ((((Global_Vars-->50).p141_vertical_placement == I111_vp_likely_underground)))) { ! phrase 2 ! [2: if the considered-z is less than 0 begin] if ((((Global_Vars-->54) < 0))) { ! phrase 3 ! [3: increase current room score by 0 - considered-z] (Global_Vars-->55) = (Global_Vars-->55) + (0-(Global_Vars-->54)) ; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if considered room is vp-high or considered room is vp-likely-high begin] if (((((Global_Vars-->50).p141_vertical_placement == I113_vp_high))) || ((((Global_Vars-->50).p141_vertical_placement == I114_vp_likely_high)))) { ! phrase 7 ! [7: if the considered-z is greater than 0 begin] if ((((Global_Vars-->54) > 0))) { ! phrase 8 ! [8: increase current room score by considered-z] (Global_Vars-->55) = (Global_Vars-->55) + (Global_Vars-->54); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A placement scoring rule ( this is the link rooms with the same mood rule ): [ R_1144 ; ! phrase 1 ! [1: if the mood of considered room is the mood of original room begin] if (((GProperty(9, (Global_Vars-->50),p142_mood) == GProperty(9, (Global_Vars-->51),p142_mood)))) { ! phrase 2 ! [2: increase current room score by 2] (Global_Vars-->55) = (Global_Vars-->55) + 2; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A placement scoring rule ( this is the Vast Staircase has higher probability rule ): [ R_1609 ; ! phrase 1 ! [1: if considered room is vast staircase begin] if ((((Global_Vars-->50) == I403_vast_staircase))) { ! phrase 2 ! [2: increase current room score by 1] (Global_Vars-->55) = (Global_Vars-->55) + 1; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: final monster placement (B461_final_monster_placement) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Final monster placement rule ( this is the place fanatics of Aite rule ): ! === which is equally specific with === ! Rule 2/2 ! A final monster placement rule ( this is the Nameless Horror in Eternal Prison rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Final monster placement rule ( this is the place fanatics of Aite rule ): [ R_1926 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if fanatics-of-aite-package is not off-stage begin] if (((~~(((~~Adj_9_t1_v9(I476_fanatics_of_aite_packag))))))) { ! phrase 2 ! [2: let x be the location of fanatics-of-aite-package] t_0 = LocationOf(I476_fanatics_of_aite_packag) ; ! phrase 3 ! [3: move healer of aite to x] MoveObject(I478_healer_of_aite, t_0, 0, false); ! phrase 4 ! [4: move tormentor of aite to x] MoveObject(I481_tormentor_of_aite, t_0, 0, false); ! phrase 5 ! [5: move defender of aite to x] MoveObject(I484_defender_of_aite, t_0, 0, false); ! phrase 6 ! [6: remove fanatics-of-aite-package from play] RemoveFromPlay(I476_fanatics_of_aite_packag); ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A final monster placement rule ( this is the Nameless Horror in Eternal Prison rule ): [ R_1990 ; ! phrase 1 ! [1: now nameless horror is in eternal prison] MoveObject(I499_nameless_horror,I421_eternal_prison); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: monster placement possible (B462_monster_placement_possi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First monster placement possible rule ( this is the only monsters of the right level rule ): ! --- now the mid-placed rules --- ! Rule 2/3 ! Monster placement possible rule ( this is the monster difficulty level rule ): ! --- now the last-placed rules --- ! Rule 3/3 ! Last monster placement possible rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! First monster placement possible rule ( this is the only monsters of the right level rule ): [ R_1105 ; ! phrase 1 ! [1: if the level of considered monster is not global monster level begin] if (((~~((GProperty(9, (Global_Vars-->61),p31_level) == (Global_Vars-->60)))))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Monster placement possible rule ( this is the monster difficulty level rule ): [ R_1106 ; ! phrase 1 ! [1: if the difficulty level of considered monster is greater than the difficulty begin] if (((GProperty(9, (Global_Vars-->61),p27_difficulty_level) > (Global_Vars-->131)))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Last monster placement possible rule: [ R_1107 ; ! phrase 1 ! [1: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: treasure placement (B464_treasure_placement) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/34 ! A treasure placement rule ( this is the stock minor treasure rule ): ! === which is equally specific with === ! Rule 2/34 ! A treasure placement rule ( this is the stock major treasure rule ): ! === which is equally specific with === ! Rule 3/34 ! A treasure placement rule ( this is the stock epic treasure rule ): ! === which is equally specific with === ! Rule 4/34 ! A treasure placement rule ( this is the stock special treasure rule ): ! === which is equally specific with === ! Rule 5/34 ! A treasure placement rule ( this is the acuity can be blindness rule ): ! === which is equally specific with === ! Rule 6/34 ! A treasure placement rule ( this is the crown of empire can be crown of Hargo rule ): ! === which is equally specific with === ! Rule 7/34 ! A treasure placement rule ( this is the war dance can be wandering rule ): ! === which is equally specific with === ! Rule 8/34 ! Treasure placement rule ( this is the fill the sarcophagus rule ): ! === which is equally specific with === ! Rule 9/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 10/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 11/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 12/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 13/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 14/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 15/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 16/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 17/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 18/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 19/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 20/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 21/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 22/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 23/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 24/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 25/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 26/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 27/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 28/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 29/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 30/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 31/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 32/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 33/34 ! A treasure placement rule: ! === which is equally specific with === ! Rule 34/34 ! A treasure placement rule: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! A treasure placement rule ( this is the stock minor treasure rule ): [ R_1111 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let n be the number of off-stage not-too-difficult minor things] t_0 = (Prop_292()) ; ! phrase 2 ! [2: let m be a random number between 6 and 12] t_1 = R_DecimalNumber(6, 12) ; ! phrase 3 ! [3: if m is greater than n , now m is n] if (((t_1 > t_0))) { t_1 = t_0; } ! phrase 4 ! [4: repeat with i running from 1 to m begin] for (t_2=1: t_2<=t_1: t_2++) { ! phrase 5 ! [5: let stuff be a random off-stage not-too-difficult minor thing] t_3 = (Prop_293()) ; ! phrase 6 ! [6: now considered treasure is stuff] (Global_Vars-->63) = t_3; if (~~((Global_Vars-->63) ofclass K2_thing)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->63), "now considered treasure is stuff", "thing");; ! phrase 7 ! [7: choose a room] (PHR_1115_r91 ()); ! phrase 8 ! [8: move stuff to considered room] MoveObject(t_3, (Global_Vars-->50), 0, false); ! phrase 9 ! [9: if generation info is true , say ~* placed [stuff] in [considered room]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1114; ParaContent(); print (PrintShortName) t_3; ParaContent(); print (PrintText) SC_1115; ParaContent(); print (PrintShortName) (Global_Vars-->50); .L_Say769; .L_SayX710; } ! phrase 10 ! [10: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! A treasure placement rule ( this is the stock major treasure rule ): [ R_1112 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let n be the number of off-stage not-too-difficult major things] t_0 = (Prop_294()) ; ! phrase 2 ! [2: let m be a random number between 3 and 6] t_1 = R_DecimalNumber(3, 6) ; ! phrase 3 ! [3: if m is greater than n , now m is n] if (((t_1 > t_0))) { t_1 = t_0; } ! phrase 4 ! [4: repeat with i running from 1 to m begin] for (t_2=1: t_2<=t_1: t_2++) { ! phrase 5 ! [5: let stuff be a random off-stage not-too-difficult major thing] t_3 = (Prop_295()) ; ! phrase 6 ! [6: now considered treasure is stuff] (Global_Vars-->63) = t_3; if (~~((Global_Vars-->63) ofclass K2_thing)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->63), "now considered treasure is stuff", "thing");; ! phrase 7 ! [7: choose a room] (PHR_1115_r91 ()); ! phrase 8 ! [8: move stuff to considered room] MoveObject(t_3, (Global_Vars-->50), 0, false); ! phrase 9 ! [9: if generation info is true , say ~* placed [stuff] in [considered room]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1114; ParaContent(); print (PrintShortName) t_3; ParaContent(); print (PrintText) SC_1115; ParaContent(); print (PrintShortName) (Global_Vars-->50); .L_Say770; .L_SayX711; } ! phrase 10 ! [10: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! A treasure placement rule ( this is the stock epic treasure rule ): [ R_1113 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let n be the number of off-stage not-too-difficult epic things] t_0 = (Prop_296()) ; ! phrase 2 ! [2: let m be a random number between 1 and 2] t_1 = R_DecimalNumber(1, 2) ; ! phrase 3 ! [3: if m is greater than n , now m is n] if (((t_1 > t_0))) { t_1 = t_0; } ! phrase 4 ! [4: repeat with i running from 1 to m begin] for (t_2=1: t_2<=t_1: t_2++) { ! phrase 5 ! [5: let stuff be a random off-stage not-too-difficult epic thing] t_3 = (Prop_297()) ; ! phrase 6 ! [6: now considered treasure is stuff] (Global_Vars-->63) = t_3; if (~~((Global_Vars-->63) ofclass K2_thing)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->63), "now considered treasure is stuff", "thing");; ! phrase 7 ! [7: choose a room] (PHR_1115_r91 ()); ! phrase 8 ! [8: move stuff to considered room] MoveObject(t_3, (Global_Vars-->50), 0, false); ! phrase 9 ! [9: if generation info is true , say ~* placed [stuff] in [considered room]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1114; ParaContent(); print (PrintShortName) t_3; ParaContent(); print (PrintText) SC_1115; ParaContent(); print (PrintShortName) (Global_Vars-->50); .L_Say771; .L_SayX712; } ! phrase 10 ! [10: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! A treasure placement rule ( this is the stock special treasure rule ): [ R_1114 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let n be the number of off-stage not-too-difficult special things] t_0 = (Prop_298()) ; ! phrase 2 ! [2: let m be a random number between 0 and 1] t_1 = R_DecimalNumber(0, 1) ; ! phrase 3 ! [3: if m is greater than n , now m is n] if (((t_1 > t_0))) { t_1 = t_0; } ! phrase 4 ! [4: unless m is 0 begin] if (~~(((t_1 == 0)))) { ! phrase 5 ! [5: repeat with i running from 1 to m begin] for (t_2=1: t_2<=t_1: t_2++) { ! phrase 6 ! [6: let stuff be a random off-stage not-too-difficult special thing] t_3 = (Prop_299()) ; ! phrase 7 ! [7: now considered treasure is stuff] (Global_Vars-->63) = t_3; if (~~((Global_Vars-->63) ofclass K2_thing)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->63), "now considered treasure is stuff", "thing");; ! phrase 8 ! [8: choose a room] (PHR_1115_r91 ()); ! phrase 9 ! [9: move stuff to considered room] MoveObject(t_3, (Global_Vars-->50), 0, false); ! phrase 10 ! [10: if generation info is true , say ~* placed [stuff] in [considered room]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1114; ParaContent(); print (PrintShortName) t_3; ParaContent(); print (PrintText) SC_1115; ParaContent(); print (PrintShortName) (Global_Vars-->50); .L_Say772; .L_SayX713; } ! phrase 11 ! [11: end repeat] } ! phrase 12 ! [12: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule ( this is the acuity can be blindness rule ): [ R_1415 ; ! phrase 1 ! [1: if a random chance of 1 in 6 succeeds begin] if (( (GenerateRandomNumber(1, 6) <= 1) )) { ! phrase 2 ! [2: now the hidden identity of the goggles of acuity is the goggles of blindness] WriteGProperty(9, I275_goggles_of_acuity,p58_hidden_identity,I276_goggles_of_blindness); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule ( this is the crown of empire can be crown of Hargo rule ): [ R_1418 ; ! phrase 1 ! [1: if a random chance of 1 in 6 succeeds begin] if (( (GenerateRandomNumber(1, 6) <= 1) )) { ! phrase 2 ! [2: now the hidden identity of the crown of the empire is the crown of hargo] WriteGProperty(9, I277_crown_of_the_empire,p58_hidden_identity,I278_crown_of_hargo); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule ( this is the war dance can be wandering rule ): [ R_1491 ; ! phrase 1 ! [1: if a random chance of 1 in 8 succeeds begin] if (( (GenerateRandomNumber(1, 8) <= 1) )) { ! phrase 2 ! [2: now the hidden identity of the boots of the war dance is boots of wandering] WriteGProperty(9, I349_boots_of_the_war_dance,p58_hidden_identity,I350_boots_of_wandering); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Treasure placement rule ( this is the fill the sarcophagus rule ): [ R_1603 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if the crypt is placed begin] if ((((Adj_111_t1_v9(I396_crypt))))) { ! phrase 2 ! [2: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 3 ! [3: place 1 of minor things in the sarcophagus] (PHR_1118_r92 (1,I188_minor,I398_sarcophagus)); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 6 ! [6: place 1 of major things in the sarcophagus] (PHR_1118_r92 (1,I189_major,I398_sarcophagus)); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if a random chance of 1 in 12 succeeds begin] if (( (GenerateRandomNumber(1, 12) <= 1) )) { ! phrase 9 ! [9: place 1 of epic things in the sarcophagus] (PHR_1118_r92 (1,I190_epic,I398_sarcophagus)); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if a random chance of 3 in 7 succeeds begin] if (( (GenerateRandomNumber(1, 7) <= 3) )) { ! phrase 12 ! [12: let x be a random off-stage undead person] t_0 = (Prop_300()) ; ! phrase 13 ! [13: now sarcophagus-inhabitant is x] (Global_Vars-->109) = t_0; if (~~((Global_Vars-->109) ofclass K8_person)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->109), "now sarcophagus-inhabitant is X", "person");; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1398 t_0 ! Local variable e.g. '?-1,-1?' = clothing t_1 ! Local variable e.g. '?-1,-1?' = clothing ; ! phrase 1 ! [1: repeat with item running through corruptible clothing begin] for (t_0=Prop_301(0), t_1=Prop_301(t_0): t_0: t_0=t_1, t_1=Prop_301(t_1)) { ! phrase 2 ! [2: if a random chance of 1 in 5 succeeds and a random chance of difficulty in 5 succeeds begin] if ((( (GenerateRandomNumber(1, 5) <= 1) )) && (( (GenerateRandomNumber(1, 5) <= (Global_Vars-->131)) ))) { ! phrase 3 ! [3: now item is cursed] (Adj_256_t2_v9(t_0)); ! phrase 4 ! [4: if generation info is true , say ~* Cursed [item].~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1116; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say773; .L_SayX714; } ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if item is cursed and a random chance of 1 in 5 succeeds begin] if (((((Adj_256_t1_v9(t_0))))) && (( (GenerateRandomNumber(1, 5) <= 1) ))) { ! phrase 7 ! [7: now item is curse-identified] (Adj_258_t2_v9(t_0)); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1404 t_0 ! Local variable e.g. '?-1,-1?' = weapon t_1 ! Local variable e.g. '?-1,-1?' = weapon ; ! phrase 1 ! [1: repeat with item running through corruptible weapons begin] for (t_0=Prop_302(0), t_1=Prop_302(t_0): t_0: t_0=t_1, t_1=Prop_302(t_1)) { ! phrase 2 ! [2: unless item is the gilded rapier or item is a natural weapon begin] if (~~((((t_0 == I265_gilded_rapier))) || (((t_0 ofclass K18_natural_weapon))))) { ! phrase 3 ! [3: if a random chance of 1 in 10 succeeds and a random chance of difficulty in 5 succeeds begin] if ((( (GenerateRandomNumber(1, 10) <= 1) )) && (( (GenerateRandomNumber(1, 5) <= (Global_Vars-->131)) ))) { ! phrase 4 ! [4: now item is cursed] (Adj_256_t2_v9(t_0)); ! phrase 5 ! [5: if generation info is true , say ~* Cursed [item].~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1116; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say774; .L_SayX715; } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if item is cursed and a random chance of 1 in 4 succeeds begin] if (((((Adj_256_t1_v9(t_0))))) && (( (GenerateRandomNumber(1, 4) <= 1) ))) { ! phrase 8 ! [8: now item is curse-identified] (Adj_258_t2_v9(t_0)); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end unless] } ! phrase 11 ! [11: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1439 ; ! phrase 1 ! [1: copy scroll of teleportation to small-scroll-of-teleportation-pack] (PHR_1390_r93 (I239_scroll_of_teleportation,I318_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1440 ; ! phrase 1 ! [1: copy scroll of teleportation to second-small-scroll-of-teleportation-pack] (PHR_1390_r93 (I239_scroll_of_teleportation,I319_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1441 ; ! phrase 1 ! [1: copy scroll of teleportation to large-scroll-of-teleportation-pack] (PHR_1390_r93 (I239_scroll_of_teleportation,I320_etc)); ! phrase 2 ! [2: copy scroll of teleportation to large-scroll-of-teleportation-pack] (PHR_1390_r93 (I239_scroll_of_teleportation,I320_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1443 ; ! phrase 1 ! [1: copy scroll of ghoulification to small-scroll-of-ghoulification-pack] (PHR_1390_r93 (I242_scroll_of_ghoulificatio,I321_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1445 ; ! phrase 1 ! [1: copy scroll of identify to small-scroll-of-identify-pack] (PHR_1390_r93 (I240_scroll_of_identify,I322_small_scroll_of_identif)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1446 ; ! phrase 1 ! [1: copy scroll of identify to second-small-scroll-of-identify-pack] (PHR_1390_r93 (I240_scroll_of_identify,I323_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1448 ; ! phrase 1 ! [1: copy scroll of remove curse to small-scroll-of-remove-curse-pack] (PHR_1390_r93 (I241_scroll_of_remove_curse,I324_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1449 ; ! phrase 1 ! [1: copy scroll of remove curse to second-small-scroll-of-remove-curse-pack] (PHR_1390_r93 (I241_scroll_of_remove_curse,I325_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1450 ; ! phrase 1 ! [1: copy scroll of remove curse to large-scroll-of-remove-curse-pack] (PHR_1390_r93 (I241_scroll_of_remove_curse,I326_etc)); ! phrase 2 ! [2: copy scroll of remove curse to large-scroll-of-remove-curse-pack] (PHR_1390_r93 (I241_scroll_of_remove_curse,I326_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1452 ; ! phrase 1 ! [1: copy scroll of shadows to small-scroll-of-shadows-pack] (PHR_1390_r93 (I243_scroll_of_shadows,I327_small_scroll_of_shadows)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1453 ; ! phrase 1 ! [1: copy scroll of shadows to second-small-scroll-of-shadows-pack] (PHR_1390_r93 (I243_scroll_of_shadows,I328_etc)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1454 ; ! phrase 1 ! [1: copy scroll of shadows to large-scroll-of-shadows-pack] (PHR_1390_r93 (I243_scroll_of_shadows,I329_large_scroll_of_shadows)); ! phrase 2 ! [2: copy scroll of shadows to large-scroll-of-shadows-pack] (PHR_1390_r93 (I243_scroll_of_shadows,I329_large_scroll_of_shadows)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1456 ; ! phrase 1 ! [1: copy scroll of summoning to small-scroll-of-summoning-pack] (PHR_1390_r93 (I244_scroll_of_summoning,I330_small_scroll_of_summoni)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1458 ; ! phrase 1 ! [1: if a random chance of 1 in 30 succeeds begin] if (( (GenerateRandomNumber(1, 30) <= 1) )) { ! phrase 2 ! [2: copy scroll of fireworks to small-scroll-of-fireworks-pack] (PHR_1390_r93 (I245_scroll_of_fireworks,I331_small_scroll_of_firewor)); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1462 ; ! phrase 1 ! [1: copy scroll of the blade to small-scroll-of-the-blade-pack] (PHR_1390_r93 (I246_scroll_of_the_blade,I333_small_scroll_of_the_bla)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1463 ; ! phrase 1 ! [1: copy scroll of the blade to large-scroll-of-the-blade-pack] (PHR_1390_r93 (I246_scroll_of_the_blade,I334_large_scroll_of_the_bla)); ! phrase 2 ! [2: copy scroll of the blade to large-scroll-of-the-blade-pack] (PHR_1390_r93 (I246_scroll_of_the_blade,I334_large_scroll_of_the_bla)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1467 ; ! phrase 1 ! [1: copy scroll of protection to small-scroll-of-shadows-pack] (PHR_1390_r93 (I247_scroll_of_protection,I327_small_scroll_of_shadows)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1475 ; ! phrase 1 ! [1: copy scroll of skill to small-scroll-of-skill-pack] (PHR_1390_r93 (I249_scroll_of_skill,I336_small_scroll_of_skill_p)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1476 ; ! phrase 1 ! [1: copy scroll of skill to large-scroll-of-skill-pack] (PHR_1390_r93 (I249_scroll_of_skill,I337_large_scroll_of_skill_p)); ! phrase 2 ! [2: copy scroll of skill to large-scroll-of-skill-pack] (PHR_1390_r93 (I249_scroll_of_skill,I337_large_scroll_of_skill_p)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1479 ; ! phrase 1 ! [1: copy scroll of death to small-scroll-of-death-pack] (PHR_1390_r93 (I250_scroll_of_death,I338_small_scroll_of_death_p)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1480 ; ! phrase 1 ! [1: copy scroll of death to large-scroll-of-death-pack] (PHR_1390_r93 (I250_scroll_of_death,I339_large_scroll_of_death_p)); ! phrase 2 ! [2: copy scroll of death to large-scroll-of-death-pack] (PHR_1390_r93 (I250_scroll_of_death,I339_large_scroll_of_death_p)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1481 ; ! phrase 1 ! [1: copy scroll of summoning to deathly-pack] (PHR_1390_r93 (I244_scroll_of_summoning,I340_deathly_pack)); ! phrase 2 ! [2: copy scroll of ghoulification to deathly-pack] (PHR_1390_r93 (I242_scroll_of_ghoulificatio,I340_deathly_pack)); ! phrase 3 ! [3: copy scroll of death to deathly-pack] (PHR_1390_r93 (I250_scroll_of_death,I340_deathly_pack)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1482 ; ! phrase 1 ! [1: copy scroll of the blade to combat-scroll-pack] (PHR_1390_r93 (I246_scroll_of_the_blade,I341_combat_scroll_pack)); ! phrase 2 ! [2: copy scroll of protection to combat-scroll-pack] (PHR_1390_r93 (I247_scroll_of_protection,I341_combat_scroll_pack)); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure placement rule: [ R_1483 ; ! phrase 1 ! [1: copy scroll of shadows to thief-scroll-pack] (PHR_1390_r93 (I243_scroll_of_shadows,I342_thief_scroll_pack)); ! phrase 2 ! [2: copy scroll of teleportation to thief-scroll-pack] (PHR_1390_r93 (I239_scroll_of_teleportation,I342_thief_scroll_pack)); ! phrase 3 ! [3: copy scroll of etherealness to thief-scroll-pack] (PHR_1390_r93 (I248_scroll_of_etherealness,I342_thief_scroll_pack)); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: treasure scoring (B465_treasure_scoring) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A treasure scoring rule ( this is the better treasures farther away rule ): ! === which is equally specific with === ! Rule 2/3 ! A treasure scoring rule ( this is the mood rule ): ! === which is equally specific with === ! Rule 3/3 ! A treasure scoring rule ( this is the scrolls in library rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure scoring rule ( this is the better treasures farther away rule ): [ R_1348 ; ! phrase 1 ! [1: if considered treasure is major begin] if ((((Global_Vars-->63).p214_valuation == I189_major))) { ! phrase 2 ! [2: increase current room score by distance of considered room] (Global_Vars-->55) = (Global_Vars-->55) + (PHR_1081_r94 ((Global_Vars-->50))); ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if considered treasure is epic begin] if ((((Global_Vars-->63).p214_valuation == I190_epic))) { ! phrase 5 ! [5: increase current room score by two times distance of considered room] (Global_Vars-->55) = (Global_Vars-->55) + (2*(PHR_1081_r94 ((Global_Vars-->50)))) ; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if considered treasure is special begin] if ((((Global_Vars-->63).p214_valuation == I192_special))) { ! phrase 8 ! [8: increase current room score by two times distance of considered room] (Global_Vars-->55) = (Global_Vars-->55) + (2*(PHR_1081_r94 ((Global_Vars-->50)))) ; ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A treasure scoring rule ( this is the mood rule ): [ R_1349 ; ! phrase 1 ! [1: if mood of considered treasure is mood of considered room begin] if (((GProperty(9, (Global_Vars-->63),p142_mood) == GProperty(9, (Global_Vars-->50),p142_mood)))) { ! phrase 2 ! [2: increase current room score by 2] (Global_Vars-->55) = (Global_Vars-->55) + 2; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if mood of considered treasure is non-mood begin] if (((GProperty(9, (Global_Vars-->63),p142_mood) == I123_non_mood))) { ! phrase 5 ! [5: say ~BUG: forgot to set mood of [considered treasure].~] say__p=1;ParaContent(); print (PrintText) SC_1117; ParaContent(); print (PrintShortName) (Global_Vars-->63); ParaContent(); print (PrintText) SC_310; new_line; .L_Say775; .L_SayX716; ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A treasure scoring rule ( this is the scrolls in library rule ): [ R_1634 ; ! phrase 1 ! [1: if considered treasure contains a scroll and considered room is the library begin] if (((Prop_303())) && ((((Global_Vars-->50) == I413_library)))) { ! phrase 2 ! [2: increase current room score by 2] (Global_Vars-->55) = (Global_Vars-->55) + 2; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: dungeon interest (B466_dungeon_interest) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/13 ! A dungeon interest rule ( this is the add rust to the dungeon rule ): ! === which is equally specific with === ! Rule 2/13 ! A dungeon interest rule ( this is the open or close pipes in Hall of Vapours rule ): ! === which is equally specific with === ! Rule 3/13 ! A dungeon interest rule ( this is the potentially add the Eternal Prison rule ): ! === which is equally specific with === ! Rule 4/13 ! A dungeon interest rule ( this is the potentially add the Hidden Treasury rule ): ! === which is equally specific with === ! Rule 5/13 ! A dungeon interest rule ( this is the potentially add the Cavern of Rust rule ): ! === which is equally specific with === ! Rule 6/13 ! A dungeon interest rule ( this is the potentially add the Portal of Smoke rule ): ! === which is equally specific with === ! Rule 7/13 ! Dungeon interest rule ( this is the add imp to its lair rule ): ! === which is equally specific with === ! Rule 8/13 ! Dungeon interest rule ( this is the add extra scenery rule ): ! === which is equally specific with === ! Rule 9/13 ! A dungeon interest rule ( this is the eleportation-beacon-on rule ): ! === which is equally specific with === ! Rule 10/13 ! A dungeon interest rule ( this is the statue of shards rule ): ! === which is equally specific with === ! Rule 11/13 ! Dungeon interest rule ( this is the fill the stomach rule ): ! --- now the last-placed rules --- ! Rule 12/13 ! Last dungeon interest rule ( this is the set ethereal timer for ethereal people rule ): ! === which is equally specific with === ! Rule 13/13 ! Last dungeon interest rule ( this is the set up scroll identities rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A dungeon interest rule ( this is the add rust to the dungeon rule ): [ R_1247 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if a random chance of 1 in 50 succeeds begin] if (( (GenerateRandomNumber(1, 50) <= 1) )) { ! phrase 2 ! [2: let place be a random placed room] t_0 = (Prop_304()) ; ! phrase 3 ! [3: now place is rust-spored] (Adj_207_t2_v9(t_0)); ! phrase 4 ! [4: if generation info is true begin] if (((((Global_Vars-->135) && true) == (1 && true)))) { ! phrase 5 ! [5: say ~* [Place] is full of rust spores.~] say__p=1;ParaContent(); print (PrintText) SC_1118; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_1119; new_line; .L_Say776; .L_SayX717; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A dungeon interest rule ( this is the open or close pipes in Hall of Vapours rule ): [ R_1619 ; ! phrase 1 ! [1: if a random chance of 3 in 4 succeeds begin] if (( (GenerateRandomNumber(1, 4) <= 3) )) { ! phrase 2 ! [2: now pipes-open is true] (Global_Vars-->111) = 1; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: now pipes-open is false] (Global_Vars-->111) = 0; ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A dungeon interest rule ( this is the potentially add the Eternal Prison rule ): [ R_1654 ; ! phrase 1 ! [1: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 2 ! [2: put eternal prison in a near location] (PHR_1652_r95 (I421_eternal_prison)); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A dungeon interest rule ( this is the potentially add the Hidden Treasury rule ): [ R_1655 ; ! phrase 1 ! [1: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 2 ! [2: put hidden treasury in a near location] (PHR_1652_r95 (I422_hidden_treasury)); ! phrase 3 ! [3: place 3 of minor things in ornate chest] (PHR_1118_r92 (3,I188_minor,I423_ornate_chest)); ! phrase 4 ! [4: place 1 of major things in ornate chest] (PHR_1118_r92 (1,I189_major,I423_ornate_chest)); ! phrase 5 ! [5: if a random chance of 1 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 1) )) { ! phrase 6 ! [6: place 1 of epic things in ornate chest] (PHR_1118_r92 (1,I190_epic,I423_ornate_chest)); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A dungeon interest rule ( this is the potentially add the Cavern of Rust rule ): [ R_1656 ; ! phrase 1 ! [1: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 2 ! [2: put cavern of rust in a near location] (PHR_1652_r95 (I424_cavern_of_rust)); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A dungeon interest rule ( this is the potentially add the Portal of Smoke rule ): [ R_1661 ; ! phrase 1 ! [1: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 2 ! [2: put portal of smoke in a near location] (PHR_1652_r95 (I425_portal_of_smoke)); ! phrase 3 ! [3: place 3 of minor things in elemental plane of smoke storage] (PHR_1118_r92 (3,I188_minor,I522_elemental_plane_of_smok)); ! phrase 4 ! [4: place 1 of major things in elemental plane of smoke storage] (PHR_1118_r92 (1,I189_major,I522_elemental_plane_of_smok)); ! phrase 5 ! [5: if a random chance of 1 in 3 succeeds begin] if (( (GenerateRandomNumber(1, 3) <= 1) )) { ! phrase 6 ! [6: place 1 of epic things in elemental plane of smoke storage] (PHR_1118_r92 (1,I190_epic,I522_elemental_plane_of_smok)); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Dungeon interest rule ( this is the add imp to its lair rule ): [ R_1663 ; ! phrase 1 ! [1: if lair of the imp is placed begin] if ((((Adj_111_t1_v9(I427_lair_of_the_imp))))) { ! phrase 2 ! [2: move imp to lair of the imp] MoveObject(I519_imp, I427_lair_of_the_imp, 0, false); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Dungeon interest rule ( this is the add extra scenery rule ): [ R_1664 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let n be the number of off-stage extras] t_0 = (Prop_305()) ; ! phrase 2 ! [2: if n is greater than 8 , now n is 8] if (((t_0 > 8))) { t_0 = 8; } ! phrase 3 ! [3: now n is a random number between 1 and n] t_0 = R_DecimalNumber(1, t_0) ; ! phrase 4 ! [4: repeat with i running from 1 to n begin] for (t_1=1: t_1<=t_0: t_1++) { ! phrase 5 ! [5: let considered extra be a random off-stage extra] t_2 = (Prop_306()) ; ! phrase 6 ! [6: choose an extra room] (PHR_1665_r96 ()); ! phrase 7 ! [7: unless considered room is entrance hall begin] if (~~((((Global_Vars-->50) == I375_entrance_hall)))) { ! phrase 8 ! [8: move considered extra to considered room] MoveObject(t_2, (Global_Vars-->50), 0, false); ! phrase 9 ! [9: if generation info is true , say ~* placed [considered extra] in [considered room]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1114; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_1115; ParaContent(); print (PrintShortName) (Global_Vars-->50); .L_Say777; .L_SayX718; } ! phrase 10 ! [10: end unless] } ! phrase 11 ! [11: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! A dungeon interest rule ( this is the eleportation-beacon-on rule ): [ R_1670 ; ! phrase 1 ! [1: if a random chance of 1 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 2 ! [2: now teleportation-beacon-on is true] (Global_Vars-->116) = 1; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: now teleportation-beacon-on is false] (Global_Vars-->116) = 0; ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! A dungeon interest rule ( this is the statue of shards rule ): [ R_1675 ; ! phrase 1 ! [1: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 2 ! [2: now statue-of-shards-unstable is true] (Global_Vars-->117) = 1; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: now statue-of-shards-unstable is false] (Global_Vars-->117) = 0; ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Dungeon interest rule ( this is the fill the stomach rule ): [ R_1730 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if ravenous armadillo is not off-stage begin] if (((~~(((~~Adj_9_t1_v9(I442_ravenous_armadillo))))))) { ! phrase 2 ! [2: let item be a random off-stage minor thing] t_0 = (Prop_307()) ; ! phrase 3 ! [3: unless item is nothing begin] if (~~(((t_0 == nothing)))) { ! phrase 4 ! [4: move item to the armadillo stomach] MoveObject(t_0, I444_armadillo_stomach, 0, false); ! phrase 5 ! [5: if generation info is true , say ~* Moved [item] to the stomach of the armadillo.~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1120; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_1121; new_line; .L_Say778; .L_SayX719; } ! phrase 6 ! [6: end unless] } ! phrase 7 ! [7: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Last dungeon interest rule ( this is the set ethereal timer for ethereal people rule ): [ R_1335 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with guy running through ethereal persons begin] for (t_0=Prop_308(0), t_1=Prop_308(t_0): t_0: t_0=t_1, t_1=Prop_308(t_1)) { ! phrase 2 ! [2: if ethereal timer of guy is 0 begin] if (((GProperty(9, t_0,p55_ethereal_timer) == 0))) { ! phrase 3 ! [3: now ethereal timer of guy is -1] WriteGProperty(9, t_0,p55_ethereal_timer,-1); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last dungeon interest rule ( this is the set up scroll identities rule ): [ R_1388 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD7_list_of_scrolltoffecttoalu); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_72(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_72 I7BASPL t_0 ! Local variable e.g. 'l' = list of scroll-effect-values t_1 ! Local variable e.g. 'i' = number t_2 ! Local variable e.g. '?-1,-1?' = scroll t_3 ! Local variable e.g. '?-1,-1?' = scroll t_4 ! Local variable e.g. '?-1,-1?' = scroll t_5 ! Local variable e.g. '?-1,-1?' = scroll ; ! phrase 1 ! [1: let l be a list of scroll-effect-values] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: repeat with eachscroll running through every plain prototypical scroll begin] for (t_1=Prop_309(0), t_2=Prop_309(t_1): t_1: t_1=t_2, t_2=Prop_309(t_2)) { ! phrase 3 ! [3: add scroll-effect of eachscroll to l] LIST_OF_TY_InsertItem(t_0, GProperty(9, t_1,p56_scroll_effect), 0, 0, 0); ! phrase 4 ! [4: end repeat] } ! phrase 5 ! [5: sort l in random order] LIST_OF_TY_Sort(t_0, 2); ! phrase 6 ! [6: let i be 1] t_1 = 1; ! phrase 7 ! [7: repeat with eachscroll running through every obfuscated scroll begin] for (t_2=Prop_310(0), t_3=Prop_310(t_2): t_2: t_2=t_3, t_3=Prop_310(t_3)) { ! phrase 8 ! [8: now scroll-effect of eachscroll is entry i of l] WriteGProperty(9, t_2,p56_scroll_effect,LIST_OF_TY_GetItem(t_0,t_1)); ! phrase 9 ! [9: if generation info is true , say ~* [eachscroll]: [scroll-effect of eachscroll].~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1118; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_396; ParaContent(); @push self; print (T91) GProperty(9, self=t_2,p56_scroll_effect); @pull self; ParaContent(); print (PrintText) SC_310; new_line; .L_Say779; .L_SayX720; } ! phrase 10 ! [10: repeat with item running through every plain scroll begin] for (t_4=Prop_311(0), t_5=Prop_311(t_4): t_4: t_4=t_5, t_5=Prop_311(t_5)) { ! phrase 11 ! [11: if scroll-effect of item is scroll-effect of eachscroll begin] if (((GProperty(9, t_4,p56_scroll_effect) == GProperty(9, t_2,p56_scroll_effect)))) { ! phrase 12 ! [12: now scroll-parsable of item is scroll-parsable of eachscroll] WriteGProperty(9, t_4,p218_scroll_parsable,GProperty(9, t_2,p218_scroll_parsable)); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end repeat] } ! phrase 15 ! [15: increase i by 1] t_1 = t_1 + 1; ! phrase 16 ! [16: end repeat] } ! phrase 17 ! [17: amnesia all scrolls] (PHR_1389_r97 ()); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: dungeon finish (B467_dungeon_finish) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Dungeon finish rule ( this is the remove treasure packs rule ): ! --- now the last-placed rules --- ! Rule 2/2 ! Last dungeon finish rule ( this is the sometimes containers release rust rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Dungeon finish rule ( this is the remove treasure packs rule ): [ R_1350 t_0 ! Local variable e.g. '?-1,-1?' = treasure pack t_1 ! Local variable e.g. '?-1,-1?' = treasure pack t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = thing t_4 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through treasure packs begin] for (t_0=Prop_312(0), t_1=Prop_312(t_0): t_0: t_0=t_1, t_1=Prop_312(t_1)) { ! phrase 2 ! [2: if item is not off-stage begin] if (((~~(((~~Adj_9_t1_v9(t_0))))))) { ! phrase 3 ! [3: let x be a random thing that contains item] t_2 = (Prop_313(,t_0)) ; ! phrase 4 ! [4: if the location of item contains item , let x be the location of item] if ((( LocationOf(t_0) == ContainerOf(t_0)))) { t_2 = LocationOf(t_0) ; } ! phrase 5 ! [5: repeat with y running through things contained by item begin] for (t_3=Prop_314(,t_0,0), t_4=Prop_314(,t_0,t_3): t_3: t_3=t_4, t_4=Prop_314(,t_0,t_4)) { ! phrase 6 ! [6: move y to x] MoveObject(t_3, t_2, 0, false); ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: remove item from play] RemoveFromPlay(t_0); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last dungeon finish rule ( this is the sometimes containers release rust rule ): [ R_1250 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if a random chance of 1 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 2 ! [2: if at least one closed openable container is not off-stage begin] if ((Prop_315())) { ! phrase 3 ! [3: let item be a random closed openable not off-stage container] t_0 = (Prop_316()) ; ! phrase 4 ! [4: if location of item is placed begin] if ((((Adj_111_t1_v9( LocationOf(t_0) ))))) { ! phrase 5 ! [5: now item is rust-releasing] (Adj_211_t2_v9(t_0)); ! phrase 6 ! [6: if generation info is true , say ~Made [item] rust-releasing.~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1122; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_1123; new_line; .L_Say780; .L_SayX721; } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: falling destination (B468_falling_destination) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Falling destination rule ( this is the standard falling destination rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Falling destination rule ( this is the standard falling destination rule ): [ R_1267 ; ! phrase 1 ! [1: now falling-destination is the room down from falling-place] (Global_Vars-->67) = MapConnection((Global_Vars-->65),I55_down) ; ! phrase 2 ! [2: unless falling-destination is a room begin] if (~~((((Global_Vars-->67) ofclass K1_room)))) { ! phrase 3 ! [3: now falling-destination is the location of falling-guy] (Global_Vars-->67) = LocationOf((Global_Vars-->64)) ; ! phrase 4 ! [4: end unless] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: falling (B470_falling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Falling rule ( this is the move the falling person to the destination rule ): ! === which is equally specific with === ! Rule 2/3 ! Falling rule ( this is the Lake of Lava kills fallers rule ): ! --- now the last-placed rules --- ! Rule 3/3 ! Last falling rule ( this is the standard deal falling damage rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Falling rule ( this is the move the falling person to the destination rule ): [ R_1268 ; ! phrase 1 ! [1: if falling-test-person is the player begin] if ((((Global_Vars-->88) == player))) { ! phrase 2 ! [2: consider the sudden combat reset rules] ProcessRulebook(506); ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: move falling-test-person to falling-destination] MoveObject((Global_Vars-->88), (Global_Vars-->67), 0, false); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Falling rule ( this is the Lake of Lava kills fallers rule ): [ R_1557 ; ! phrase 1 ! [1: if falling-destination is lake of lava begin] if ((((Global_Vars-->67) == I383_lake_of_lava))) { ! phrase 2 ! [2: if falling-guy is not ethereal begin] if (((~~(((Adj_231_t1_v9((Global_Vars-->64)))))))) { ! phrase 3 ! [3: if falling-guy is player begin] if ((((Global_Vars-->64) == player))) { ! phrase 4 ! [4: end the game saying ~You fell into the lava.~] deadflag=SC_567; story_complete=false; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: now the health of falling-guy is -10] WriteGProperty(9, (Global_Vars-->64),p14_health,-10); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Last falling rule ( this is the standard deal falling damage rule ): [ R_1269 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: unless falling-test-person is flying begin] if (~~(((PHR_1166_r51 ((Global_Vars-->88)))))) { ! phrase 2 ! [2: unless falling-test-person is ethereal begin] if (~~((((Adj_231_t1_v9((Global_Vars-->88))))))) { ! phrase 3 ! [3: let m be a random number between 2 and 5] t_0 = R_DecimalNumber(2, 5) ; ! phrase 4 ! [4: if falling-reason is 2 begin] if ((((Global_Vars-->66) == 2))) { ! phrase 5 ! [5: decrease m by 1] t_0 = t_0 - 1; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if a random chance of 1 in 4 succeeds begin] if (( (GenerateRandomNumber(1, 4) <= 1) )) { ! phrase 8 ! [8: increase m by 5] t_0 = t_0 + 5; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: calculate the pdr for falling-guy] (PHR_1260_r62 ((Global_Vars-->64))); ! phrase 11 ! [11: decrease m by pdr] t_0 = t_0 - (Global_Vars-->87); ! phrase 12 ! [12: if m is less than 0 begin] if (((t_0 < 0))) { ! phrase 13 ! [13: now m is 0] t_0 = 0; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: if falling-test-person is the player begin] if ((((Global_Vars-->88) == player))) { ! phrase 16 ! [16: say ~With a loud smack, you land in [the location], [if m is 0]receiving no damage[otherwise]receiving [bold type][m] damage[roman type][end if].~] say__p=1;ParaContent(); print (PrintText) SC_1124; ParaContent(); print (the) real_location; ParaContent(); print (PrintText) SC_592; if (~~((((t_0 == 0))))) jump L_Say781; ParaContent(); print (PrintText) SC_1125; jump L_SayX722; .L_Say781; ParaContent(); print (PrintText) SC_1126; ParaContent(); style bold; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; .L_Say782; .L_SayX722; ParaContent(); print (PrintText) SC_310; new_line; .L_Say783; .L_SayX723; ! phrase 17 ! [17: decrease health of player by m] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - t_0); ! phrase 18 ! [18: now concentration of player is 0] WriteGProperty(9, player,p26_concentration,0); ! phrase 19 ! [19: now the take no time boolean is false] (Global_Vars-->34) = 0; ! phrase 20 ! [20: if player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 21 ! [21: end the story saying ~Your death was not particularly heroic.~] deadflag=SC_1127; story_complete=false; ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: otherwise] } else { ! phrase 24 ! [24: decrease the health of the falling-test-person by m] WriteGProperty(9, (Global_Vars-->88),p14_health,GProperty(9, (Global_Vars-->88),p14_health) - t_0); ! phrase 25 ! [25: now concentration of the falling-test-person is 0] WriteGProperty(9, (Global_Vars-->88),p26_concentration,0); ! phrase 26 ! [26: if the location of falling-test-person is the location of the player and m is not 0 begin] if (((( LocationOf((Global_Vars-->88)) == LocationOf(player) ))) && (((~~((t_0 == 0)))))) { ! phrase 27 ! [27: say ~[The falling-test-person] receives [m] damage from the fall.~] say__p=1;ParaContent(); print (The) (Global_Vars-->88); ParaContent(); print (PrintText) SC_1128; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_1129; new_line; .L_Say784; .L_SayX724; ! phrase 28 ! [28: end if] } ! phrase 29 ! [29: end if] } ! phrase 30 ! [30: end unless] } ! phrase 31 ! [31: end unless] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: fragmentation (B471_fragmentation) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! First fragmentation rule ( this is the remove item from play rule ): ! --- now the mid-placed rules --- ! Rule 2/4 ! A fragmentation rule ( this is the basic fragmentation damage rule ): ! === which is equally specific with === ! Rule 3/4 ! A fragmentation rule ( this is the glass items can shatter through fragmentation rule ): ! === which is equally specific with === ! Rule 4/4 ! Fragmentation rule ( this is the hall of mirrors fragmentation rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Events" by Victor Gijsbers ! First fragmentation rule ( this is the remove item from play rule ): [ R_1123 ; ! phrase 1 ! [1: remove fragmentation-item from play] RemoveFromPlay((Global_Vars-->70)); rfalse; ]; ! No specific request ! From "Kerkerkruip Events" by Victor Gijsbers ! A fragmentation rule ( this is the basic fragmentation damage rule ): [ R_1124 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'original n' = number t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = person t_4 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: let n be the number of alive persons in fragmentation-place] t_0 = (Prop_317()) ; ! phrase 2 ! [2: let original n be n] t_1 = t_0; ! phrase 3 ! [3: repeat with guy running through all alive persons in fragmentation-place begin] for (t_2=Prop_318(0), t_3=Prop_318(t_2): t_2: t_2=t_3, t_3=Prop_318(t_3)) { ! phrase 4 ! [4: let m be a random number between 2 and 5] t_4 = R_DecimalNumber(2, 5) ; ! phrase 5 ! [5: if fragmentation-item is silver and the guy is undead begin] if (((((Global_Vars-->70).p180_material == I167_silver))) && (((t_2.p111_faction == I158_undead)))) { ! phrase 6 ! [6: increase m by 3] t_4 = t_4 + 3; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: calculate the pdr for guy] (PHR_1260_r62 (t_2)); ! phrase 9 ! [9: decrease m by pdr] t_4 = t_4 - (Global_Vars-->87); ! phrase 10 ! [10: if m is less than 0 , now m is 0] if (((t_4 < 0))) { t_4 = 0; } ! phrase 11 ! [11: decrease health of guy by m] WriteGProperty(9, t_2,p14_health,GProperty(9, t_2,p14_health) - t_4); ! phrase 12 ! [12: say ~[if n is 1 and original n is not 1]and [end if][m] damage to [the name of the guy][if guy is dead] (which is [bold type]lethal[roman type])[end if][roman type][if concentration of the guy is greater than 0 and guy is alive and m is not 0] (which breaks [possessive of the guy] concentration)[end if][if n is not 1]; [otherwise].[line break][end if][run paragraph on]~] say__p=1; if (~~(((((t_0 == 1))) && (((~~((t_1 == 1)))))))) jump L_Say785; ParaContent(); print (PrintText) SC_654; .L_Say785; .L_SayX725; ParaContent(); print (say__n=t_4); ParaContent(); print (PrintText) SC_1130; ParaContent(); (PHR_830_r63 (t_2)); if (~~(((((~~Adj_33_t1_v9(t_2))))))) jump L_Say786; ParaContent(); print (PrintText) SC_1131; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1132; ParaContent(); style roman; ParaContent(); print (PrintText) SC_275; .L_Say786; .L_SayX726; ParaContent(); style roman; if (~~(((((GProperty(9, t_2,p26_concentration) > 0))) && (((((Adj_33_t1_v9(t_2))))) && (((~~((t_4 == 0))))))))) jump L_Say787; ParaContent(); print (PrintText) SC_1133; ParaContent(); (PHR_940_r42 (t_2));ParaContent(); print (PrintText) SC_1134; .L_Say787; .L_SayX727; if (~~((((~~((t_0 == 1))))))) jump L_Say788; ParaContent(); print (PrintText) SC_1135; jump L_SayX728; .L_Say788; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; .L_Say789; .L_SayX728; ParaContent(); RunParagraphOn(); .L_Say790; .L_SayX729; ! phrase 13 ! [13: unless m is 0 begin] if (~~(((t_4 == 0)))) { ! phrase 14 ! [14: now concentration of the guy is 0] WriteGProperty(9, t_2,p26_concentration,0); ! phrase 15 ! [15: end unless] } ! phrase 16 ! [16: decrease n by 1] t_0 = t_0 - 1; ! phrase 17 ! [17: if n is 0 begin] if (((t_0 == 0))) { ! phrase 18 ! [18: say ~~] say__p=1;ParaContent(); print (PrintText) EMPTY_TEXT_VALUE; .L_Say791; .L_SayX730; ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: end repeat] } ! phrase 21 ! [21: if health of the player is less than 1 begin] if (((GProperty(9, player,p14_health) < 1))) { ! phrase 22 ! [22: if fragmentation-guy is the player begin] if ((((Global_Vars-->69) == player))) { ! phrase 23 ! [23: end the game saying ~You have blown yourself to pieces.~] deadflag=SC_1136; story_complete=false; ! phrase 24 ! [24: otherwise] } else { ! phrase 25 ! [25: end the game saying ~You have been blown to pieces.~] deadflag=SC_1137; story_complete=false; ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Events" by Victor Gijsbers ! A fragmentation rule ( this is the glass items can shatter through fragmentation rule ): [ R_1125 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through glass things enclosed by fragmentation-place begin] for (t_0=Prop_319(0), t_1=Prop_319(t_0): t_0: t_0=t_1, t_1=Prop_319(t_1)) { ! phrase 2 ! [2: if item is not enclosed by a closed container begin] if ((~~Prop_320(,t_0))) { ! phrase 3 ! [3: if a random chance of 1 in 20 succeeds begin] if (( (GenerateRandomNumber(1, 20) <= 1) )) { ! phrase 4 ! [4: have a shatter event with item] (PHR_1127_r98 (t_0)); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Fragmentation rule ( this is the hall of mirrors fragmentation rule ): [ R_1547 ; ! phrase 1 ! [1: if fragmentation-place is hall of mirrors begin] if ((((Global_Vars-->68) == I378_hall_of_mirrors))) { ! phrase 2 ! [2: say ~All the mirrors are blown to pieces and fall down like a rain of ice and light. But after a few seconds, the shards of glass start moving up and reform the mirrors. Not a crack can be seen.~] say__p=1;ParaContent(); print (PrintText) SC_1138; new_line; .L_Say792; .L_SayX731; ! phrase 3 ! [3: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 4 ! [4: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: killing (B472_killing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Killing rule ( this is the grant powers when a monster is slain rule ): ! === which is equally specific with === ! Rule 2/3 ! Killing rule ( this is the explode after death rule ): ! === which is equally specific with === ! Rule 3/3 ! Killing rule ( this is the award I return to serve achievement rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Killing rule ( this is the grant powers when a monster is slain rule ): [ R_1157 ; ! phrase 1 ! [1: if the killer-guy is the player begin] if ((((Global_Vars-->71) == player))) { ! phrase 2 ! [2: do the absorption with killed-guy] (PHR_1159_r19 ((Global_Vars-->72))); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Killing rule ( this is the explode after death rule ): [ R_1811 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the killed-guy is the player begin] if ((((Global_Vars-->72) == player))) { ! phrase 2 ! [2: if the killer-guy is not dead begin] if (((~~(((~~Adj_33_t1_v9((Global_Vars-->71)))))))) { ! phrase 3 ! [3: if power of the bomb is granted begin] if ((((Adj_158_t1_v9(I456_power_of_the_bomb))))) { ! phrase 4 ! [4: let n be level of the killer-guy] t_0 = GProperty(9, (Global_Vars-->71),p31_level); ! phrase 5 ! [5: now n is n times 2] t_0 = (t_0*2) ; ! phrase 6 ! [6: increase n by a random number between 0 and 4] t_0 = t_0 + R_DecimalNumber(0, 4) ; ! phrase 7 ! [7: if health of the killer-guy is not greater than n begin] if (((~~((GProperty(9, (Global_Vars-->71),p14_health) > t_0))))) { ! phrase 8 ! [8: say ~Your body explodes vehemently, killing [the killer-guy][if the level of the killer-guy is 0]. Unfortunately, [the killer-guy] is levelless and cannot heal you[otherwise if the level of the killer-guy is 5]. Your soul attempts to swallow that of your enemy, but [the killer-guy] is quicker and far more powerful, swallowing yours and thus coming back to life. You, however, are destroyed for all eternity[otherwise]! As your soul swallows that of your enemy whole, you feel your body reconstituting itself[end if].[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1139; ParaContent(); print (the) (Global_Vars-->71); if (~~((((GProperty(9, (Global_Vars-->71),p31_level) == 0))))) jump L_Say793; ParaContent(); print (PrintText) SC_1140; ParaContent(); print (the) (Global_Vars-->71); ParaContent(); print (PrintText) SC_1141; ParaContent(); jump L_SayX732; .L_Say793; if (~~((((GProperty(9, (Global_Vars-->71),p31_level) == 5))))) jump L_Say794; ParaContent(); print (PrintText) SC_1142; ParaContent(); print (the) (Global_Vars-->71); ParaContent(); print (PrintText) SC_1143; jump L_SayX732; .L_Say794; ParaContent(); print (PrintText) SC_1144; .L_Say795; .L_SayX732; ParaContent(); print (PrintText) SC_310; ParaContent(); DivideParagraphPoint(); new_line; .L_Say796; .L_SayX733; ! phrase 9 ! [9: if the level of the killer-guy is not 0 and the level of the killer-guy is not 5 begin] if ((((~~((GProperty(9, (Global_Vars-->71),p31_level) == 0))))) && (((~~((GProperty(9, (Global_Vars-->71),p31_level) == 5)))))) { ! phrase 10 ! [10: now the health of the player is 1] WriteGProperty(9, player,p14_health,1); ! phrase 11 ! [11: now the health of the killer-guy is -1] WriteGProperty(9, (Global_Vars-->71),p14_health,-1); ! phrase 12 ! [12: have an event of the player killing killer-guy] (PHR_1126_r64 (player,(Global_Vars-->71))); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: otherwise] } else { ! phrase 15 ! [15: say ~Your body explodes vehemently, but [the killer-guy] survives the blast.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1145; ParaContent(); print (the) (Global_Vars-->71); ParaContent(); print (PrintText) SC_1146; ParaContent(); DivideParagraphPoint(); new_line; .L_Say797; .L_SayX734; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Killing rule ( this is the award I return to serve achievement rule ): [ R_2164 ; ! phrase 1 ! [1: if killer-guy is undead and the player is undead and killer-guy is not the player begin] if (((((Global_Vars-->71).p111_faction == I158_undead))) && ((((player.p111_faction == I158_undead))) && (((~~(((Global_Vars-->71) == player))))))) { ! phrase 2 ! [2: award achievement i return to serve] (PHR_2161_r13 (I535_i_return_to_serve)); ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: shatter (B473_shatter) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Shatter rule ( this is the people shattering rule ): ! === which is equally specific with === ! Rule 2/2 ! Shatter rule ( this is the things shattering rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Events" by Victor Gijsbers ! Shatter rule ( this is the people shattering rule ): [ R_1128 ; ! phrase 1 ! [1: if shatter-item is a person begin] if ((((Global_Vars-->73) ofclass K8_person))) { ! phrase 2 ! [2: now health of shatter-item is -100] WriteGProperty(9, (Global_Vars-->73),p14_health,-100); ! phrase 3 ! [3: if shatter-item is the player begin] if ((((Global_Vars-->73) == player))) { ! phrase 4 ! [4: end the game saying ~Your body shattered to pieces!~] deadflag=SC_1147; story_complete=false; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~[The shatter-item] [bold type]shatter[unless shatter-item is plural-named]s[end if][roman type] to pieces!~] say__p=1;ParaContent(); print (The) (Global_Vars-->73); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1148; if (((((Adj_48_t1_v9((Global_Vars-->73))))))) jump L_Say798; ParaContent(); print (PrintText) SC_1149; .L_Say798; .L_SayX735; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1150; new_line; .L_Say799; .L_SayX736; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 9 ! [9: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Events" by Victor Gijsbers ! Shatter rule ( this is the things shattering rule ): [ R_1129 ; ! phrase 1 ! [1: remove shatter-item from play] RemoveFromPlay((Global_Vars-->73)); ! phrase 2 ! [2: say ~[The shatter-item] [bold type]shatter[unless shatter-item is plural-named]s[end if][roman type].~] say__p=1;ParaContent(); print (The) (Global_Vars-->73); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1148; if (((((Adj_48_t1_v9((Global_Vars-->73))))))) jump L_Say800; ParaContent(); print (PrintText) SC_1149; .L_Say800; .L_SayX737; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say801; .L_SayX738; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: teleportation event (B474_teleportation_event) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! A teleportation event rule ( this is the reset last-seen-location after some teleports rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! A teleportation event rule ( this is the reset last-seen-location after some teleports rule ): [ R_2104 ; ! phrase 1 ! [1: if teleportation-guy is not the player begin] if (((~~(((Global_Vars-->74) == player))))) { ! phrase 2 ! [2: if teleportation-from is the location of the player begin] if ((((Global_Vars-->76) == LocationOf(player) ))) { ! phrase 3 ! [3: if teleportation-destination is not the location of the player begin] if (((~~(((Global_Vars-->75) == LocationOf(player) ))))) { ! phrase 4 ! [4: now last-seen-location of teleportation-guy is null-room] WriteGProperty(9, (Global_Vars-->74),p62_last_seen_location,I524_null_room); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: ability test (B475_ability_test) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! An ability test rule ( this is the ment ability bonus rule ): ! === which is equally specific with === ! Rule 2/2 ! An ability test rule ( this is the feeling down ability penalty rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An ability test rule ( this is the ment ability bonus rule ): [ R_1531 ; ! phrase 1 ! [1: if the test subject is the player begin] if ((((Global_Vars-->79) == player))) { ! phrase 2 ! [2: if ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 3 ! [3: increase test score by ment bonus] (Global_Vars-->77) = (Global_Vars-->77) + (PHR_1528_r78 ()); ! phrase 4 ! [4: say ~ + [ment bonus] (ment)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_913; ParaContent(); RunParagraphOn(); .L_Say802; .L_SayX739; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An ability test rule ( this is the feeling down ability penalty rule ): [ R_1536 ; ! phrase 1 ! [1: if the test subject is the player begin] if ((((Global_Vars-->79) == player))) { ! phrase 2 ! [2: if the ment addiction is greater than 0 begin] if ((((Global_Vars-->96) > 0))) { ! phrase 3 ! [3: if the ment timer is 0 begin] if ((((Global_Vars-->97) == 0))) { ! phrase 4 ! [4: decrease test score by ment addiction] (Global_Vars-->77) = (Global_Vars-->77) - (Global_Vars-->96); ! phrase 5 ! [5: say ~ - [ment addiction] (feeling down)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=(Global_Vars-->96)); ParaContent(); print (PrintText) SC_915; ParaContent(); RunParagraphOn(); .L_Say803; .L_SayX740; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: perception test (B476_perception_test) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! A perception test rule when the attacker is affected by smoke ( this is the perception penalty of smoke rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/5 ! A perception test rule ( this is the blindness affects perception rule ): ! === which is equally specific with === ! Rule 3/5 ! A perception test rule ( this is the perception bonus of the goggles of acuity rule ): ! === which is equally specific with === ! Rule 4/5 ! A perception test rule ( this is the perception bonus of being skilled rule ): ! === which is equally specific with === ! Rule 5/5 ! A perception test rule ( this is the concentration bonus in Hall of Mirrors rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A perception test rule when the attacker is affected by smoke ( this is the perception penalty of smoke rule ): [ R_1334 t_0 ! Local variable e.g. 'n' = number ; if ((((((PHR_1328_r77 ())))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1334, 1334); ! phrase 1 ! [1: let n be smoke penalty of the location] t_0 = (Resolver_9(real_location,"source", 308)); ! phrase 2 ! [2: decrease test score by n] (Global_Vars-->77) = (Global_Vars-->77) - t_0; ! phrase 3 ! [3: say ~ - [n] (smoke)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_775; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_879; ParaContent(); RunParagraphOn(); .L_Say804; .L_SayX741; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1334, 1334, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A perception test rule ( this is the blindness affects perception rule ): [ R_1175 ; ! phrase 1 ! [1: if the test subject is blind and the test subject is not eyeless begin] if ((((PHR_1169_r17 ((Global_Vars-->79))))) && (((~~(((Adj_164_t1_v9((Global_Vars-->79))))))))) { ! phrase 2 ! [2: decrease test score by 3] (Global_Vars-->77) = (Global_Vars-->77) - 3; ! phrase 3 ! [3: say ~ - 3 (blindness)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_900; ParaContent(); RunParagraphOn(); .L_Say805; .L_SayX742; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A perception test rule ( this is the perception bonus of the goggles of acuity rule ): [ R_1416 ; ! phrase 1 ! [1: if the test subject wears the goggles of acuity begin] if ((((Global_Vars-->79) == WearerOf(I275_goggles_of_acuity)))) { ! phrase 2 ! [2: increase test score by 2] (Global_Vars-->77) = (Global_Vars-->77) + 2; ! phrase 3 ! [3: say ~ + 2 (goggles of acuity)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1151; ParaContent(); RunParagraphOn(); .L_Say806; .L_SayX743; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A perception test rule ( this is the perception bonus of being skilled rule ): [ R_1472 ; ! phrase 1 ! [1: if the test subject is the player and the player skill bonus timer is greater than 0 begin] if (((((Global_Vars-->79) == player))) && ((((Global_Vars-->92) > 0)))) { ! phrase 2 ! [2: increase test score by 3] (Global_Vars-->77) = (Global_Vars-->77) + 3; ! phrase 3 ! [3: say ~ + 3 (skilled)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1152; ParaContent(); RunParagraphOn(); .L_Say807; .L_SayX744; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! A perception test rule ( this is the concentration bonus in Hall of Mirrors rule ): [ R_1550 ; ! phrase 1 ! [1: if an actor attacking in hall of mirrors and the actor is the test subject begin] if (((action ==##Attack) && (act_requester==nothing) && (actor_location = LocationOf(actor)) && ((actor_location == I378_hall_of_mirrors) && (true))) && (((actor == (Global_Vars-->79))))) { ! phrase 2 ! [2: unless the test subject is blind begin] if (~~(((PHR_1169_r17 ((Global_Vars-->79)))))) { ! phrase 3 ! [3: if concentration of the actor is greater than 0 begin] if (((GProperty(9, actor,p26_concentration) > 0))) { ! phrase 4 ! [4: increase test score by concentration of the actor] (Global_Vars-->77) = (Global_Vars-->77) + GProperty(9, actor,p26_concentration); ! phrase 5 ! [5: say ~ + [concentration of the actor] (concentration)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); @push self; print (say__n=GProperty(9, self=actor,p26_concentration)); @pull self; ParaContent(); print (PrintText) SC_898; ParaContent(); RunParagraphOn(); .L_Say808; .L_SayX745; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: dexterity test (B477_dexterity_test) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! A dexterity test rule ( this is the dexterity bonus of being skilled rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A dexterity test rule ( this is the dexterity bonus of being skilled rule ): [ R_1474 ; ! phrase 1 ! [1: if the test subject is the player and the player skill bonus timer is greater than 0 begin] if (((((Global_Vars-->79) == player))) && ((((Global_Vars-->92) > 0)))) { ! phrase 2 ! [2: increase test score by 3] (Global_Vars-->77) = (Global_Vars-->77) + 3; ! phrase 3 ! [3: say ~ + 3 (skilled)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1152; ParaContent(); RunParagraphOn(); .L_Say809; .L_SayX746; ! phrase 4 ! [4: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: willpower test (B478_willpower_test) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! A willpower test rule ( this is the willpower bonus of vampire rule ): ! === which is equally specific with === ! Rule 2/4 ! A willpower test rule ( this is the willpower bonus of the crown of the empire rule ): ! === which is equally specific with === ! Rule 3/4 ! A willpower test rule ( this is the willpower bonus of crown of Hargo rule ): ! === which is equally specific with === ! Rule 4/4 ! A willpower test rule ( this is the willpower bonus of being skilled rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A willpower test rule ( this is the willpower bonus of vampire rule ): [ R_1278 ; ! phrase 1 ! [1: if the test subject is the player and the player form of the player is vampire begin] if (((((Global_Vars-->79) == player))) && (((GProperty(9, player,p201_player_form) == I183_vampire)))) { ! phrase 2 ! [2: increase test score by 2] (Global_Vars-->77) = (Global_Vars-->77) + 2; ! phrase 3 ! [3: say ~ + 2 (vampire)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1153; ParaContent(); RunParagraphOn(); .L_Say810; .L_SayX747; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A willpower test rule ( this is the willpower bonus of the crown of the empire rule ): [ R_1419 ; ! phrase 1 ! [1: if the test subject wears the crown of the empire begin] if ((((Global_Vars-->79) == WearerOf(I277_crown_of_the_empire)))) { ! phrase 2 ! [2: increase test score by 2] (Global_Vars-->77) = (Global_Vars-->77) + 2; ! phrase 3 ! [3: say ~ + 2 (crown of the empire)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1154; ParaContent(); RunParagraphOn(); .L_Say811; .L_SayX748; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A willpower test rule ( this is the willpower bonus of crown of Hargo rule ): [ R_1422 ; ! phrase 1 ! [1: if the test subject wears the crown of hargo begin] if ((((Global_Vars-->79) == WearerOf(I278_crown_of_hargo)))) { ! phrase 2 ! [2: increase test score by 4] (Global_Vars-->77) = (Global_Vars-->77) + 4; ! phrase 3 ! [3: say ~ + 4 (crown of Hargo)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1155; ParaContent(); RunParagraphOn(); .L_Say812; .L_SayX749; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A willpower test rule ( this is the willpower bonus of being skilled rule ): [ R_1473 ; ! phrase 1 ! [1: if the test subject is the player and the player skill bonus timer is greater than 0 begin] if (((((Global_Vars-->79) == player))) && ((((Global_Vars-->92) > 0)))) { ! phrase 2 ! [2: increase test score by 3] (Global_Vars-->77) = (Global_Vars-->77) + 3; ! phrase 3 ! [3: say ~ + 3 (skilled)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1152; ParaContent(); RunParagraphOn(); .L_Say813; .L_SayX750; ! phrase 4 ! [4: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Digging (B479_check_digging) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check digging ( this is the dig in a direct rule ): ! === which is equally specific with === ! Rule 2/3 ! Check digging ( this is the can only dig when carrying a digging tool rule ): ! === which is equally specific with === ! Rule 3/3 ! Check digging ( this is the only dig in connectable rooms rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check digging ( this is the dig in a direct rule ): [ R_1146 ; if (actor == player) { if (debug_rules) DB_Rule(R_1146, 1146); ! phrase 1 ! [1: if noun is not a cardinal direction begin] if (((~~((noun ofclass K3_direction) && ((Adj_109_t1_v9(noun))))))) { ! phrase 2 ! [2: say ~You can only dig north, south, west, east, up, or down.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1156; new_line; rtrue; .L_Say814; .L_SayX751; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1146, 1146, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check digging ( this is the can only dig when carrying a digging tool rule ): [ R_1147 ; if (actor == player) { if (debug_rules) DB_Rule(R_1147, 1147); ! phrase 1 ! [1: unless the player has a digging tool begin] if (~~((Prop_321()))) { ! phrase 2 ! [2: say ~You need a suitable tool to dig.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1157; new_line; rtrue; .L_Say815; .L_SayX752; rtrue; ! phrase 3 ! [3: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1147, 1147, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check digging ( this is the only dig in connectable rooms rule ): [ R_1148 ; if (actor == player) { if (debug_rules) DB_Rule(R_1148, 1148); ! phrase 1 ! [1: unless location is connectable begin] if (~~((((Adj_113_t1_v9(real_location)))))) { ! phrase 2 ! [2: say ~A magical force prevents you from digging.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1158; new_line; rtrue; .L_Say816; .L_SayX753; rtrue; ! phrase 3 ! [3: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1148, 1148, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Digging (B480_carry_out_digging) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out digging: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Carry out digging: [ R_1149 t_0 ! Local variable e.g. 'x' = number t_1 ! Local variable e.g. 'y' = number t_2 ! Local variable e.g. 'z' = number t_3 ! Local variable e.g. '?-1,-1?' = object t_4 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1149, 1149); ! phrase 1 ! [1: let x be the x noun of location] t_0 = (Resolver_5(noun,real_location,"source", 140)); ! phrase 2 ! [2: let y be the y noun of location] t_1 = (Resolver_6(noun,real_location,"source", 141)); ! phrase 3 ! [3: let z be the z noun of location] t_2 = (Resolver_7(noun,real_location,"source", 142)); ! phrase 4 ! [4: if the space at x by y by z is free begin] if (((PHR_1094_r38 (t_0,t_1,t_2)))) { ! phrase 5 ! [5: if there is at least one not placed tunnel begin] if ((Prop_322())) { ! phrase 6 ! [6: let item be a random not placed tunnel] t_3 = (Prop_323()) ; ! phrase 7 ! [7: place item from location at x by y by z] (Resolver_23(t_3,real_location,t_0,t_1,t_2,"source", 146)); ! phrase 8 ! [8: say ~You magically create a tunnel [noun].~] say__p=1;ParaContent(); print (PrintText) SC_1159; ParaContent(); print (PrintShortName) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say817; .L_SayX754; ! phrase 9 ! [9: do the dig move] (PHR_1150_r99 ()); ! phrase 10 ! [10: otherwise] } else { ! phrase 11 ! [11: say ~The laws of this place prevent further digging.~] say__p=1;ParaContent(); print (PrintText) SC_1160; new_line; .L_Say818; .L_SayX755; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: let item be the room at x by y by z] t_3 = (PHR_1095_r39 (t_0,t_1,t_2)); ! phrase 15 ! [15: if item is the room noun from the location begin] if (((t_3 == (Resolver_8(noun,real_location,"source", 153))))) { ! phrase 16 ! [16: say ~There already is a passage there.~] say__p=1;ParaContent(); print (PrintText) SC_1161; new_line; .L_Say819; .L_SayX756; ! phrase 17 ! [17: take no time] (PHR_853_r33 ()); ! phrase 18 ! [18: otherwise] } else { ! phrase 19 ! [19: if item is connectable begin] if ((((Adj_113_t1_v9(t_3))))) { ! phrase 20 ! [20: change the noun exit of the location to item] (Resolver_28(noun,real_location,t_3,"source", 158)); ! phrase 21 ! [21: let reverse be the opposite of noun] t_4 = GProperty(OBJECT_TY, noun,p9_opposite); ! phrase 22 ! [22: change the reverse exit of item to the location] (Resolver_28(t_4,t_3,real_location,"source", 160)); ! phrase 23 ! [23: say ~You magically create a tunnel [noun].~] say__p=1;ParaContent(); print (PrintText) SC_1159; ParaContent(); print (PrintShortName) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say820; .L_SayX757; ! phrase 24 ! [24: do the dig move] (PHR_1150_r99 ()); ! phrase 25 ! [25: otherwise] } else { ! phrase 26 ! [26: say ~A magical force prevents you from digging.~] say__p=1;ParaContent(); print (PrintText) SC_1158; new_line; .L_Say821; .L_SayX758; ! phrase 27 ! [27: end if] } ! phrase 28 ! [28: end if] } ! phrase 29 ! [29: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1149, 1149, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Collapsing (B482_check_collapsing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check collapsing ( this is the collapse in a direct rule ): ! === which is equally specific with === ! Rule 2/3 ! Check collapsing ( this is the can only collapse when carrying a collapsing tool rule ): ! === which is equally specific with === ! Rule 3/3 ! Check collapsing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check collapsing ( this is the collapse in a direct rule ): [ R_1152 ; if (actor == player) { if (debug_rules) DB_Rule(R_1152, 1152); ! phrase 1 ! [1: if noun is not a cardinal direction begin] if (((~~((noun ofclass K3_direction) && ((Adj_109_t1_v9(noun))))))) { ! phrase 2 ! [2: say ~You can only collapse a passage to the north, south, west, east, up, or down.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1162; new_line; rtrue; .L_Say822; .L_SayX759; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1152, 1152, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check collapsing ( this is the can only collapse when carrying a collapsing tool rule ): [ R_1153 ; if (actor == player) { if (debug_rules) DB_Rule(R_1153, 1153); ! phrase 1 ! [1: unless the player has a collapsing tool begin] if (~~((Prop_324()))) { ! phrase 2 ! [2: say ~You need a suitable tool to collapse passages.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1163; new_line; rtrue; .L_Say823; .L_SayX760; rtrue; ! phrase 3 ! [3: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1153, 1153, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check collapsing: [ R_1154 t_0 ! Local variable e.g. 'place' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1154, 1154); ! phrase 1 ! [1: let place be the room noun from location] t_0 = (Resolver_8(noun,real_location,"source", 220)); ! phrase 2 ! [2: unless place is a room begin] if (~~(((t_0 ofclass K1_room)))) { ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~There is no passage there to collapse.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1164; new_line; rtrue; .L_Say824; .L_SayX761; rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: if the location is not connectable or place is not connectable begin] if ((((~~(((Adj_113_t1_v9(real_location))))))) || (((~~(((Adj_113_t1_v9(t_0)))))))) { ! phrase 7 ! [7: take no time] (PHR_853_r33 ()); ! phrase 8 ! [8: say ~A magical force prevents you from collapsing that passage.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1165; new_line; rtrue; .L_Say825; .L_SayX762; rtrue; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1154, 1154, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Collapsing (B483_carry_out_collapsing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out collapsing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Carry out collapsing: [ R_1155 t_0 ! Local variable e.g. 'place' = object t_1 ! Local variable e.g. 'reverse' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_1155, 1155); ! phrase 1 ! [1: let place be room noun of location] t_0 = (Resolver_8(noun,real_location,"source", 230)); ! phrase 2 ! [2: change the noun exit of location to nothing] (Resolver_13(noun,real_location,"source", 231)); ! phrase 3 ! [3: let reverse be the opposite of noun] t_1 = GProperty(OBJECT_TY, noun,p9_opposite); ! phrase 4 ! [4: change the reverse exit of place to nothing] (Resolver_13(t_1,t_0,"source", 233)); ! phrase 5 ! [5: say ~With a huge crash, the [if noun is up or noun is down]staircase[otherwise]corridor[end if] collapses!~] say__p=1;ParaContent(); print (PrintText) SC_640; if (~~(((((noun == I54_up))) || (((noun == I55_down)))))) jump L_Say826; ParaContent(); print (PrintText) SC_641; jump L_SayX763; .L_Say826; ParaContent(); print (PrintText) SC_642; .L_Say827; .L_SayX763; ParaContent(); print (PrintText) SC_1166; new_line; .L_Say828; .L_SayX764; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1155, 1155, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Absorbing (B485_absorbing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/13 ! First absorbing a power: ! --- now the mid-placed rules --- ! Rule 2/13 ! Absorbing power of the daggers: ! === which is equally specific with === ! Rule 3/13 ! Absorbing power of the ape: ! === which is equally specific with === ! Rule 4/13 ! Absorbing power of the armadillo: ! === which is equally specific with === ! Rule 5/13 ! Absorbing power of Miranda: ! === which is equally specific with === ! Rule 6/13 ! Absorbing power of the chains: ! === which is equally specific with === ! Rule 7/13 ! Absorbing power of the bomb: ! === which is equally specific with === ! Rule 8/13 ! Absorbing power of the Reaper: ! === which is equally specific with === ! Rule 9/13 ! Absorbing power of the mindslug: ! === which is equally specific with === ! Rule 10/13 ! Absorbing power of the tentacle: ! === which is equally specific with === ! Rule 11/13 ! Absorbing power of the Fanatics of Aite: ! === which is equally specific with === ! Rule 12/13 ! Absorbing power of Bodmall: ! --- now the last-placed rules --- ! Rule 13/13 ! Last absorbing a power ( called the granted power ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! First absorbing a power: [ R_1502 ; if (((parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1502, 1502); ! phrase 1 ! [1: now greed-health-variable is permanent health of the player] (Global_Vars-->93) = GProperty(9, player,p17_permanent_health); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1502, 1502, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the daggers: [ R_1693 ; if (((parameter_object == I438_power_of_the_daggers) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1693, 1693); ! phrase 1 ! [1: increase melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 2); ! phrase 2 ! [2: increase inherent damage modifier of the player by 2] WriteGProperty(9, player,p36_inherent_damage_modifier,GProperty(9, player,p36_inherent_damage_modifier) + 2); ! phrase 3 ! [3: decrease defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 1); ! phrase 4 ! [4: increase permanent health of the player by 6] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 6); ! phrase 5 ! [5: increase dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) + 1); ! phrase 6 ! [6: say ~As the daggers fall down, you feel the soul that animated them absorbed into your own body. You are sharp. You are deadly. ([bold type]Power of the daggers[roman type]: +2 attack, +1 damage, -1 defence, +6 health, +1 dexterity, and the [italic type]pierce[roman type] skill.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1167; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1168; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1169; ParaContent(); style underline; ParaContent(); print (PrintText) SC_139; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1170; ParaContent(); DivideParagraphPoint(); new_line; .L_Say829; .L_SayX765; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1693, 1693, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the ape: [ R_1710 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number ; if (((parameter_object == I441_power_of_the_ape) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1710, 1710); ! phrase 1 ! [1: let n be 0] t_0 = 0; ! phrase 2 ! [2: let m be 1] t_1 = 1; ! phrase 3 ! [3: if the blood ape is small begin] if ((((Adj_153_t1_v9(I439_blood_ape))))) { ! phrase 4 ! [4: now n is 2] t_0 = 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the blood ape is medium begin] if ((((Adj_154_t1_v9(I439_blood_ape))))) { ! phrase 7 ! [7: now n is 4] t_0 = 4; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if the blood ape is large begin] if ((((Adj_155_t1_v9(I439_blood_ape))))) { ! phrase 10 ! [10: now n is 6] t_0 = 6; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: if the blood ape is huge begin] if ((((Adj_156_t1_v9(I439_blood_ape))))) { ! phrase 13 ! [13: now n is 8] t_0 = 8; ! phrase 14 ! [14: now m is 2] t_1 = 2; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: if the blood ape is gargantuan begin] if ((((Adj_157_t1_v9(I439_blood_ape))))) { ! phrase 17 ! [17: now n is 10] t_0 = 10; ! phrase 18 ! [18: now m is 2] t_1 = 2; ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: increase permanent health of the player by n] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + t_0); ! phrase 21 ! [21: increase melee of the player by m] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + t_1); ! phrase 22 ! [22: increase defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 1); ! phrase 23 ! [23: increase inherent damage modifier of the player by 1] WriteGProperty(9, player,p36_inherent_damage_modifier,GProperty(9, player,p36_inherent_damage_modifier) + 1); ! phrase 24 ! [24: say ~The blood-hungry soul that animated the ape is absorbed into your own body. You are strong. You hunger for blood. ([bold type]Power of the ape[roman type]: +[m] attack, +1 defence, +[n] health; when you score a hit, your damage will increase for a short time.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1171; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1172; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1173; ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_1174; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_1175; ParaContent(); DivideParagraphPoint(); new_line; .L_Say830; .L_SayX766; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1710, 1710, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the armadillo: [ R_1735 ; if (((parameter_object == I445_power_of_the_armadillo) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1735, 1735); ! phrase 1 ! [1: do the armadillo stomach trick] (PHR_1732_r100 ()); ! phrase 2 ! [2: increase melee of the player by 1] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 1); ! phrase 3 ! [3: increase permanent health of the player by 5] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 5); ! phrase 4 ! [4: decrease dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) - 1); ! phrase 5 ! [5: say ~As the armadillo succumbs, you feel its soul absorbed into your own body. ([bold type]Power of the armadillo[roman type]: +1 attack, +1 damage resistance, +5 health, -1 dexterity, and the [italic type]scales[roman type] skill, which gives you a temporary damage reduction that costs some health to use and expires as soon as you attack.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1176; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1177; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1178; ParaContent(); style underline; ParaContent(); print (PrintText) SC_142; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1179; ParaContent(); DivideParagraphPoint(); new_line; .L_Say831; .L_SayX767; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1735, 1735, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of Miranda: [ R_1770 ; if (((parameter_object == I450_power_of_miranda) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1770, 1770); ! phrase 1 ! [1: increase melee of the player by 1] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 1); ! phrase 2 ! [2: increase defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 1); ! phrase 3 ! [3: increase permanent health of the player by 5] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 5); ! phrase 4 ! [4: increase perception of the player by 1] WriteGProperty(9, player,p33_perception,GProperty(9, player,p33_perception) + 1); ! phrase 5 ! [5: say ~As Miranda dies, you feel her soul absorbed into your own body. ([bold type]Power of Miranda[roman type]: +1 attack, +1 defence, +5 health, +1 perception, and the [italic type]stun[roman type] skill.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1180; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1181; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1182; ParaContent(); style underline; ParaContent(); print (PrintText) SC_147; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1170; ParaContent(); DivideParagraphPoint(); new_line; .L_Say832; .L_SayX768; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1770, 1770, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the chains: [ R_1787 ; if (((parameter_object == I453_power_of_the_chains) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1787, 1787); ! phrase 1 ! [1: increase melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 2); ! phrase 2 ! [2: increase inherent damage modifier of the player by 2] WriteGProperty(9, player,p36_inherent_damage_modifier,GProperty(9, player,p36_inherent_damage_modifier) + 2); ! phrase 3 ! [3: increase defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 1); ! phrase 4 ! [4: increase permanent health of the player by 12] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 12); ! phrase 5 ! [5: say ~As the chain golem bursts apart into its constituent links, you feel the soul that animated it absorbed into your own body. ([bold type]Power of the chains[roman type]: +2 attack, +2 damage, +1 defence, +12 health, and the [italic type]lash[roman type] skill.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1183; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1184; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1185; ParaContent(); style underline; ParaContent(); print (PrintText) SC_149; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1170; ParaContent(); DivideParagraphPoint(); new_line; .L_Say833; .L_SayX769; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1787, 1787, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the bomb: [ R_1809 ; if (((parameter_object == I456_power_of_the_bomb) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1809, 1809); ! phrase 1 ! [1: increase melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 2); ! phrase 2 ! [2: increase defence of the player by 2] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 2); ! phrase 3 ! [3: increase permanent health of the player by 10] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 10); ! phrase 4 ! [4: say ~As the bomb deflates, you feel its insane, beastly soul absorbed into your own body. ([bold type]Power of the bomb[roman type]: +2 attack, +2 defence, +10 health, and you will now [italic type]explode[roman type] when killed, giving you a last chance to defeat your enemy and perhaps absorb his soul in the process.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1186; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1187; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1188; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1189; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1190; ParaContent(); DivideParagraphPoint(); new_line; .L_Say834; .L_SayX770; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1809, 1809, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the Reaper: [ R_1824 ; if (((parameter_object == I462_power_of_the_reaper) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1824, 1824); ! phrase 1 ! [1: increase melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 2); ! phrase 2 ! [2: increase defence of the player by 2] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 2); ! phrase 3 ! [3: increase permanent health of the player by 10] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 10); ! phrase 4 ! [4: say ~As the Reaper dies, his twisted mind becomes one with yours. ([bold type]Power of the Reaper[roman type]: +2 attack, +2 defence, +10 health; and since Death attends on us all, you can now [italic type]reap[roman type] any non-undead person you have seen, instantly teleporting to their location.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1191; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1192; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1193; ParaContent(); style underline; ParaContent(); print (PrintText) SC_156; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1194; ParaContent(); DivideParagraphPoint(); new_line; .L_Say835; .L_SayX771; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1824, 1824, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the mindslug: [ R_1871 ; if (((parameter_object == I472_power_of_the_mindslug) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1871, 1871); ! phrase 1 ! [1: increase melee of the player by 3] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 3); ! phrase 2 ! [2: increase defence of the player by 3] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 3); ! phrase 3 ! [3: increase permanent health of the player by 15] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 15); ! phrase 4 ! [4: increase willpower of the player by 4] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) + 4); ! phrase 5 ! [5: say ~As the mindslug dies, you feel its powerful intelligence absorbed into your own body. ([bold type]Power of the mindslug[roman type]: +3 attack, +3 defence, +15 health, +4 willpower, and you can attempt to [italic type]dominate[roman type] an enemy.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1195; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1196; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1197; ParaContent(); style underline; ParaContent(); print (PrintText) SC_163; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1198; ParaContent(); DivideParagraphPoint(); new_line; .L_Say836; .L_SayX772; ! phrase 6 ! [6: make slaves followers] (PHR_1873_r101 ()); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1871, 1871, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the tentacle: [ R_1920 ; if (((parameter_object == I475_power_of_the_tentacle) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1920, 1920); ! phrase 1 ! [1: increase melee of the player by 3] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 3); ! phrase 2 ! [2: increase defence of the player by 3] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 3); ! phrase 3 ! [3: increase permanent health of the player by 15] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 15); ! phrase 4 ! [4: say ~As the giant tentacle dies, you feel its soul absorbed into your own body. ([bold type]Power of the tentacle[roman type]: +3 attack, +3 defence, +15 health, and you can attempt to [italic type]confuse[roman type] an enemy when you are attacked.)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1199; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1200; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1201; ParaContent(); style underline; ParaContent(); print (PrintText) SC_166; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1202; ParaContent(); DivideParagraphPoint(); new_line; .L_Say837; .L_SayX773; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1920, 1920, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of the Fanatics of Aite: [ R_1945 ; if (((parameter_object == I487_power_of_the_fanatics_o) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1945, 1945); ! phrase 1 ! [1: increase melee of the player by 4] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 4); ! phrase 2 ! [2: increase defence of the player by 4] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 4); ! phrase 3 ! [3: increase permanent health of the player by 20] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 20); ! phrase 4 ! [4: increase willpower of the player by 2] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) + 2); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1945, 1945, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Absorbing power of Bodmall: [ R_1973 ; if (((parameter_object == I492_power_of_bodmall) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1973, 1973); ! phrase 1 ! [1: increase melee of the player by 4] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 4); ! phrase 2 ! [2: increase defence of the player by 4] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 4); ! phrase 3 ! [3: increase permanent health of the player by 20] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 20); ! phrase 4 ! [4: increase willpower of the player by 1] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) + 1); ! phrase 5 ! [5: increase perception of the player by 1] WriteGProperty(9, player,p33_perception,GProperty(9, player,p33_perception) + 1); ! phrase 6 ! [6: increase dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) + 1); ! phrase 7 ! [7: say ~As Bodmall dies, you feel her soul absorbed into your own body. ([bold type]Power of Bodmall[roman type]: +4 attack, +4 defence, +20 health, +1 to all attributes, and you can summon [italic type]thorns[roman type].)[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1203; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1204; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1205; ParaContent(); style underline; ParaContent(); print (PrintText) SC_180; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1206; ParaContent(); DivideParagraphPoint(); new_line; .L_Say838; .L_SayX774; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1973, 1973, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last absorbing a power ( called the granted power ): [ R_1503 t_0 ! Local variable e.g. 'granted power' = power t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = number ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K21_power))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1503, 1503); ! phrase 1 ! [1: if the player is greedy begin] if ((((Adj_266_t1_v9(player))))) { ! phrase 2 ! [2: let greed bonus be permanent health of the player minus greed-health-variable] t_1 = (GProperty(9, player,p17_permanent_health)-(Global_Vars-->93)) ; ! phrase 3 ! [3: increase permanent health of the player by greed bonus] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + t_1); ! phrase 4 ! [4: let guy be a random person that grants the granted power] t_2 = (Prop_325(,t_0)) ; ! phrase 5 ! [5: let n be 0] t_3 = 0; ! phrase 6 ! [6: if level of guy is less than 3 begin] if (((GProperty(OBJECT_TY, t_2,p31_level) < 3))) { ! phrase 7 ! [7: now n is 1] t_3 = 1; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: now n is 2] t_3 = 2; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: decrease defence of the player by n] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - t_3); ! phrase 12 ! [12: say ~Your greed causes you to absorb an extra [greed bonus] health, but it also gives you a permanent -[n] defence penalty.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1207; ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_1208; ParaContent(); print (say__n=t_3); ParaContent(); print (PrintText) SC_1209; ParaContent(); DivideParagraphPoint(); new_line; .L_Say839; .L_SayX775; ! phrase 13 ! [13: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1503, 1503, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Repelling (B486_repelling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11 ! Repelling power of the daggers: ! === which is equally specific with === ! Rule 2/11 ! Repelling power of the ape: ! === which is equally specific with === ! Rule 3/11 ! Repelling power of the armadillo: ! === which is equally specific with === ! Rule 4/11 ! Repelling power of Miranda: ! === which is equally specific with === ! Rule 5/11 ! Repelling power of the chains: ! === which is equally specific with === ! Rule 6/11 ! Repelling power of the bomb: ! === which is equally specific with === ! Rule 7/11 ! Repelling power of the Reaper: ! === which is equally specific with === ! Rule 8/11 ! Repelling power of the mindslug: ! === which is equally specific with === ! Rule 9/11 ! Repelling power of the tentacle: ! === which is equally specific with === ! Rule 10/11 ! Repelling power of the Fanatics of Aite: ! === which is equally specific with === ! Rule 11/11 ! Repelling power of Bodmall: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the daggers: [ R_1694 ; if (((parameter_object == I438_power_of_the_daggers) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1694, 1694); ! phrase 1 ! [1: decrease melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 2); ! phrase 2 ! [2: decrease inherent damage modifier of the player by 2] WriteGProperty(9, player,p36_inherent_damage_modifier,GProperty(9, player,p36_inherent_damage_modifier) - 2); ! phrase 3 ! [3: increase defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 1); ! phrase 4 ! [4: decrease permanent health of the player by 6] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 6); ! phrase 5 ! [5: decrease dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) - 1); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1694, 1694, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the ape: [ R_1711 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number ; if (((parameter_object == I441_power_of_the_ape) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1711, 1711); ! phrase 1 ! [1: let n be 0] t_0 = 0; ! phrase 2 ! [2: let m be 1] t_1 = 1; ! phrase 3 ! [3: if the blood ape is small begin] if ((((Adj_153_t1_v9(I439_blood_ape))))) { ! phrase 4 ! [4: now n is 2] t_0 = 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if the blood ape is medium begin] if ((((Adj_154_t1_v9(I439_blood_ape))))) { ! phrase 7 ! [7: now n is 4] t_0 = 4; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if the blood ape is large begin] if ((((Adj_155_t1_v9(I439_blood_ape))))) { ! phrase 10 ! [10: now n is 6] t_0 = 6; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: if the blood ape is huge begin] if ((((Adj_156_t1_v9(I439_blood_ape))))) { ! phrase 13 ! [13: now n is 8] t_0 = 8; ! phrase 14 ! [14: now m is 2] t_1 = 2; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: if the blood ape is gargantuan begin] if ((((Adj_157_t1_v9(I439_blood_ape))))) { ! phrase 17 ! [17: now n is 10] t_0 = 10; ! phrase 18 ! [18: now m is 2] t_1 = 2; ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: decrease permanent health of the player by n] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - t_0); ! phrase 21 ! [21: decrease melee of the player by m] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - t_1); ! phrase 22 ! [22: decrease defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 1); ! phrase 23 ! [23: decrease inherent damage modifier of the player by 1] WriteGProperty(9, player,p36_inherent_damage_modifier,GProperty(9, player,p36_inherent_damage_modifier) - 1); ! phrase 24 ! [24: now ape power damage is 0] (Global_Vars-->119) = 0; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1711, 1711, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the armadillo: [ R_1737 ; if (((parameter_object == I445_power_of_the_armadillo) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1737, 1737); ! phrase 1 ! [1: decrease melee of the player by 1] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 1); ! phrase 2 ! [2: decrease permanent health of the player by 5] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 5); ! phrase 3 ! [3: increase dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) + 1); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1737, 1737, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of Miranda: [ R_1771 ; if (((parameter_object == I450_power_of_miranda) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1771, 1771); ! phrase 1 ! [1: decrease melee of the player by 1] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 1); ! phrase 2 ! [2: decrease defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 1); ! phrase 3 ! [3: decrease permanent health of the player by 5] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 5); ! phrase 4 ! [4: decrease perception of the player by 1] WriteGProperty(9, player,p33_perception,GProperty(9, player,p33_perception) - 1); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1771, 1771, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the chains: [ R_1788 ; if (((parameter_object == I453_power_of_the_chains) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1788, 1788); ! phrase 1 ! [1: decrease melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 2); ! phrase 2 ! [2: decrease inherent damage modifier of the player by 2] WriteGProperty(9, player,p36_inherent_damage_modifier,GProperty(9, player,p36_inherent_damage_modifier) - 2); ! phrase 3 ! [3: decrease defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 1); ! phrase 4 ! [4: decrease permanent health of the player by 12] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 12); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1788, 1788, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the bomb: [ R_1810 ; if (((parameter_object == I456_power_of_the_bomb) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1810, 1810); ! phrase 1 ! [1: decrease melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 2); ! phrase 2 ! [2: decrease defence of the player by 2] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 2); ! phrase 3 ! [3: decrease permanent health of the player by 10] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 10); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1810, 1810, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the Reaper: [ R_1825 ; if (((parameter_object == I462_power_of_the_reaper) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1825, 1825); ! phrase 1 ! [1: decrease melee of the player by 2] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 2); ! phrase 2 ! [2: decrease defence of the player by 2] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 2); ! phrase 3 ! [3: decrease permanent health of the player by 10] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 10); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1825, 1825, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the mindslug: [ R_1872 ; if (((parameter_object == I472_power_of_the_mindslug) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1872, 1872); ! phrase 1 ! [1: decrease melee of the player by 3] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 3); ! phrase 2 ! [2: decrease defence of the player by 3] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 3); ! phrase 3 ! [3: decrease permanent health of the player by 15] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 15); ! phrase 4 ! [4: decrease willpower of the player by 4] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) - 4); ! phrase 5 ! [5: unmake slaves followers] (PHR_1874_r102 ()); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1872, 1872, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the tentacle: [ R_1921 ; if (((parameter_object == I475_power_of_the_tentacle) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1921, 1921); ! phrase 1 ! [1: decrease melee of the player by 3] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 3); ! phrase 2 ! [2: decrease defence of the player by 3] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 3); ! phrase 3 ! [3: decrease permanent health of the player by 15] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 15); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1921, 1921, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of the Fanatics of Aite: [ R_1946 ; if (((parameter_object == I487_power_of_the_fanatics_o) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1946, 1946); ! phrase 1 ! [1: decrease melee of the player by 4] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 4); ! phrase 2 ! [2: decrease defence of the player by 4] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 4); ! phrase 3 ! [3: decrease permanent health of the player by 20] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 20); ! phrase 4 ! [4: decrease willpower of the player by 2] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) - 2); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1946, 1946, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Repelling power of Bodmall: [ R_1974 ; if (((parameter_object == I492_power_of_bodmall) && (parameter_object ofclass K21_power))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1974, 1974); ! phrase 1 ! [1: decrease melee of the player by 4] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) - 4); ! phrase 2 ! [2: decrease defence of the player by 4] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) - 4); ! phrase 3 ! [3: decrease permanent health of the player by 20] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 20); ! phrase 4 ! [4: decrease willpower of the player by 1] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) - 1); ! phrase 5 ! [5: decrease perception of the player by 1] WriteGProperty(9, player,p33_perception,GProperty(9, player,p33_perception) - 1); ! phrase 6 ! [6: decrease dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) - 1); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1974, 1974, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: absorption stopping (B487_absorption_stopping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! An absorption stopping rule ( this is the abyss of the soul absorbs all souls rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An absorption stopping rule ( this is the abyss of the soul absorbs all souls rule ): [ R_2045 ; ! phrase 1 ! [1: if the abyss of the soul is alive and the abyss of the soul is not off-stage begin] if (((((Adj_33_t1_v9(I515_abyss_of_the_soul))))) && (((~~(((~~Adj_9_t1_v9(I515_abyss_of_the_soul)))))))) { ! phrase 2 ! [2: if the level of test subject is not 0 and the level of test subject is not 10 begin] if ((((~~((GProperty(9, (Global_Vars-->79),p31_level) == 0))))) && (((~~((GProperty(9, (Global_Vars-->79),p31_level) == 10)))))) { ! phrase 3 ! [3: if the abyss of the soul is not gargantuan begin] if (((~~(((Adj_157_t1_v9(I515_abyss_of_the_soul))))))) { ! phrase 4 ! [4: now the abyss of the soul is the size after the size of the abyss of the soul] I515_abyss_of_the_soul.p154_size = A_T68(GProperty(9, I515_abyss_of_the_soul,p154_size)) ; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: increase health of the abyss of the soul by 15] WriteGProperty(9, I515_abyss_of_the_soul,p14_health,GProperty(9, I515_abyss_of_the_soul,p14_health) + 15); ! phrase 7 ! [7: increase abyss of the soul strength by 1] (Global_Vars-->125) = (Global_Vars-->125) + 1; ! phrase 8 ! [8: say ~You attempt to absorb the soul of [the test subject], but feel how it disappears into the [bold type]deadly abyss[roman type][if test subject is Malygris]. The abyss of the soul immediately grows to gigantic proportions, obliterating the entire dungeon[end if].~] say__p=1;ParaContent(); print (PrintText) SC_1210; ParaContent(); print (the) (Global_Vars-->79); ParaContent(); print (PrintText) SC_1211; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1212; ParaContent(); style roman; if (~~(((((Global_Vars-->79) == I493_malygris))))) jump L_Say840; ParaContent(); print (PrintText) SC_1213; .L_Say840; .L_SayX776; ParaContent(); print (PrintText) SC_310; new_line; .L_Say841; .L_SayX777; ! phrase 9 ! [9: if the level of test subject is 5 begin] if (((GProperty(9, (Global_Vars-->79),p31_level) == 5))) { ! phrase 10 ! [10: end the game saying ~Malygris is dead, and so are you. Technically, that counts as a victory.~] deadflag=SC_1214; story_complete=false; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: if the level of test subject is 10 begin] if (((GProperty(9, (Global_Vars-->79),p31_level) == 10))) { ! phrase 15 ! [15: say ~When the soul of [the test subject] disappears into the deadly abyss, the world of the living is shattered.~] say__p=1;ParaContent(); print (PrintText) SC_1215; ParaContent(); print (the) (Global_Vars-->79); ParaContent(); print (PrintText) SC_1216; new_line; .L_Say842; .L_SayX778; ! phrase 16 ! [16: end the story saying ~You have set off a cataclysm that destroys galaxies.~] deadflag=SC_1217; story_complete=false; ! phrase 17 ! [17: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: flying (B488_flying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A flying rule ( this is the flyers fly rule ): ! === which is equally specific with === ! Rule 2/3 ! A flying rule ( this is the vampire bat flies rule ): ! === which is equally specific with === ! Rule 3/3 ! A flying rule ( this is the aswang as bird flies rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A flying rule ( this is the flyers fly rule ): [ R_1167 ; ! phrase 1 ! [1: if test subject is flyer begin] if ((((Adj_160_t1_v9((Global_Vars-->79)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A flying rule ( this is the vampire bat flies rule ): [ R_1291 ; ! phrase 1 ! [1: if test subject is player and the player form of the player is vampire bat begin] if (((((Global_Vars-->79) == player))) && (((GProperty(9, player,p201_player_form) == I184_vampire_bat)))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A flying rule ( this is the aswang as bird flies rule ): [ R_2036 ; ! phrase 1 ! [1: if test subject is the aswang and the as-shape of the aswang is as-bird begin] if (((((Global_Vars-->79) == I513_aswang))) && (((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird)))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: blindness (B489_blindness) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A blindness rule ( this is the blind if blinded rule ): ! === which is equally specific with === ! Rule 2/3 ! A blindness rule ( this is the blind if eyeless rule ): ! === which is equally specific with === ! Rule 3/3 ! A blindness rule ( this is the goggles of blindness rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A blindness rule ( this is the blind if blinded rule ): [ R_1170 ; ! phrase 1 ! [1: if test subject is blinded begin] if ((((Adj_162_t1_v9((Global_Vars-->79)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A blindness rule ( this is the blind if eyeless rule ): [ R_1171 ; ! phrase 1 ! [1: if test subject is eyeless begin] if ((((Adj_164_t1_v9((Global_Vars-->79)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A blindness rule ( this is the goggles of blindness rule ): [ R_1417 ; ! phrase 1 ! [1: if the test subject wears the goggles of blindness begin] if ((((Global_Vars-->79) == WearerOf(I276_goggles_of_blindness)))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Healing (B491_carry_out_healing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor healing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Carry out an actor healing: [ R_1177 t_0 ! Local variable e.g. 'm' = number t_1 ! Local variable e.g. 'chosen one' = object t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = person t_4 ! Local variable e.g. '?-1,-1?' = number ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1177, 1177); ! phrase 1 ! [1: let m be 0] t_0 = 0; ! phrase 2 ! [2: let chosen one be the actor] t_1 = actor; ! phrase 3 ! [3: repeat with guy running through alive persons enclosed by the location begin] for (t_2=Prop_326(0), t_3=Prop_326(t_2): t_2: t_2=t_3, t_3=Prop_326(t_3)) { ! phrase 4 ! [4: if the faction of guy does not hate the faction of the actor and guy is not the actor begin] if ((((~~(((Relation_TestVtoV(GProperty(9, t_2,p111_faction),Rel_Record_67,GProperty(9, actor,p111_faction),false))))))) && (((~~((t_2 == actor)))))) { ! phrase 5 ! [5: let n be permanent health of guy minus health of guy] t_4 = (GProperty(9, t_2,p17_permanent_health)-GProperty(9, t_2,p14_health)) ; ! phrase 6 ! [6: if n is greater than 0 begin] if (((t_4 > 0))) { ! phrase 7 ! [7: if m is less than n begin] if (((t_0 < t_4))) { ! phrase 8 ! [8: now chosen one is guy] t_1 = t_2; ! phrase 9 ! [9: now m is n] t_0 = t_4; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end repeat] } ! phrase 14 ! [14: if m is greater than heal power of the actor , now m is heal power of the actor] if (((t_0 > GProperty(9, actor,p40_heal_power)))) { t_0 = GProperty(9, actor,p40_heal_power); } ! phrase 15 ! [15: say ~[The actor] casts a spell of magical healing on [the chosen one], removing [m] points of damage.~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1218; ParaContent(); print (the) t_1; ParaContent(); print (PrintText) SC_1219; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_1220; new_line; .L_Say843; .L_SayX779; ! phrase 16 ! [16: heal chosen one for m health] (Resolver_29(t_1,t_0,"source", 498)); ! phrase 17 ! [17: now current heal cooldown of the actor is heal cooldown of the actor] WriteGProperty(9, actor,p42_current_heal_cooldown,GProperty(9, actor,p41_heal_cooldown)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1177, 1177, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Teleporting (B493_check_teleporting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor teleporting ( this is the teleport impossible rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check an actor teleporting ( this is the teleport impossible rule ): [ R_1183 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1183, 1183); ! phrase 1 ! [1: if teleportation is impossible for the actor begin] if (((PHR_1179_r20 (actor)))) { ! phrase 2 ! [2: now the actor is teleport impossible aware] (Adj_170_t2_v9(actor)); ! phrase 3 ! [3: say ~[The actor] tries to teleport away, but something makes this impossible!~ instead] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1221; new_line; rtrue; .L_Say844; .L_SayX780; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1183, 1183, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Teleporting (B494_carry_out_teleporting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out an actor teleporting ( this is the standard monster teleport rule ): ! --- now the last-placed rules --- ! Rule 2/2 ! Last carry out Malygris teleporting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Carry out an actor teleporting ( this is the standard monster teleport rule ): [ R_1184 t_0 ! Local variable e.g. 'see-arriving' = truth state t_1 ! Local variable e.g. 'see-going' = truth state ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1184, 1184); ! phrase 1 ! [1: now teleportation-from is the location of the actor] (Global_Vars-->76) = LocationOf(actor) ; ! phrase 2 ! [2: now teleportation-guy is the actor] (Global_Vars-->74) = actor; ! phrase 3 ! [3: choose a teleportation destination] (PHR_1185_r103 ()); ! phrase 4 ! [4: let see-arriving be false] t_0 = 0; ! phrase 5 ! [5: let see-going be false] t_1 = 0; ! phrase 6 ! [6: if location of the actor is the location begin] if ((( LocationOf(actor) == real_location))) { ! phrase 7 ! [7: now see-going is true] t_1 = 1; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if teleportation-destination is the location begin] if ((((Global_Vars-->75) == real_location))) { ! phrase 10 ! [10: now see-arriving is true] t_0 = 1; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: move actor to teleportation-destination] MoveObject(actor, (Global_Vars-->75), 0, false); ! phrase 13 ! [13: now concentration of actor is 0] WriteGProperty(9, actor,p26_concentration,0); ! phrase 14 ! [14: unless teleport amount of actor is -1 begin] if (~~(((GProperty(9, actor,p43_teleport_amount) == -1)))) { ! phrase 15 ! [15: decrease teleport amount of actor by 1] WriteGProperty(9, actor,p43_teleport_amount,GProperty(9, actor,p43_teleport_amount) - 1); ! phrase 16 ! [16: end unless] } ! phrase 17 ! [17: if teleportation-from is the location of the player and teleportation-destination is the location of the player begin] if (((((Global_Vars-->76) == LocationOf(player) ))) && ((((Global_Vars-->75) == LocationOf(player) )))) { ! phrase 18 ! [18: say ~[The actor] teleports away, but reappears in the exact same spot.~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1222; new_line; .L_Say845; .L_SayX781; ! phrase 19 ! [19: otherwise] } else { ! phrase 20 ! [20: if see-going is true begin] if ((((t_1 && true) == (1 && true)))) { ! phrase 21 ! [21: say ~[The actor] suddenly teleports away!~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1223; new_line; .L_Say846; .L_SayX782; ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: if see-arriving is true begin] if ((((t_0 && true) == (1 && true)))) { ! phrase 24 ! [24: say ~[The actor] suddenly teleports into the room!~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1224; new_line; .L_Say847; .L_SayX783; ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: have a teleportation event] (PHR_1130_r104 ()); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1184, 1184, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Last carry out Malygris teleporting: [ R_1982 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I493_malygris) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1982, 1982); ! phrase 1 ! [1: if teleportation-destination is not the location of the player begin] if (((~~(((Global_Vars-->75) == LocationOf(player) ))))) { ! phrase 2 ! [2: if the teleport amount of malygris is 1 begin] if (((GProperty(9, I493_malygris,p43_teleport_amount) == 1))) { ! phrase 3 ! [3: now malygris-summon-countdown is a random number between 5 and 7] (Global_Vars-->123) = R_DecimalNumber(5, 7) ; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if the teleport amount of malygris is 0 begin] if (((GProperty(9, I493_malygris,p43_teleport_amount) == 0))) { ! phrase 6 ! [6: if demonic assassin is alive and demonic assassin is off-stage begin] if (((((Adj_33_t1_v9(I496_demonic_assassin))))) && ((((~~Adj_9_t1_v9(I496_demonic_assassin)))))) { ! phrase 7 ! [7: now malygris-summon-countdown is a random number between 4 and 5] (Global_Vars-->123) = R_DecimalNumber(4, 5) ; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1982, 1982, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: teleport impossible (B496_teleport_impossible) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! A teleport impossible rule ( this is the dimensional anchor rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A teleport impossible rule ( this is the dimensional anchor rule ): [ R_1434 ; ! phrase 1 ! [1: if the location of the test subject encloses the dimensional anchor begin] if (((IndirectlyContains( LocationOf((Global_Vars-->79)) ,I311_dimensional_anchor)))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: special teleportation destination (B497_special_teleportation_d) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! A special teleportation destination rule ( this is the teleportation beacon rule ): ! === which is equally specific with === ! Rule 2/2 ! Special teleportation destination rule ( this is the imp teleporting rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! A special teleportation destination rule ( this is the teleportation beacon rule ): [ R_1674 ; ! phrase 1 ! [1: unless the teleportation beacon is off-stage begin] if (~~((((~~Adj_9_t1_v9(I430_teleportation_beacon)))))) { ! phrase 2 ! [2: if teleportation-beacon-on is true begin] if (((((Global_Vars-->116) && true) == (1 && true)))) { ! phrase 3 ! [3: now teleportation-destination is location of teleportation beacon] (Global_Vars-->75) = LocationOf(I430_teleportation_beacon) ; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Special teleportation destination rule ( this is the imp teleporting rule ): [ R_2063 ; ! phrase 1 ! [1: if the teleportation-guy is the imp begin] if ((((Global_Vars-->74) == I519_imp))) { ! phrase 2 ! [2: if the location of the imp is the lair of the imp begin] if ((( LocationOf(I519_imp) == I427_lair_of_the_imp))) { ! phrase 3 ! [3: now teleportation-destination is location of the player] (Global_Vars-->75) = LocationOf(player) ; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: now teleportation-destination is lair of the imp] (Global_Vars-->75) = I427_lair_of_the_imp; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Disintegrating (B499_carry_out_disintegratin) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor disintegrating ( this is the standard disintegrate rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Carry out an actor disintegrating ( this is the standard disintegrate rule ): [ R_1189 t_0 ! Local variable e.g. 'boolean' = truth state t_1 ! Local variable e.g. 'guy' = object t_2 ! Local variable e.g. 'item' = object t_3 ! Local variable e.g. 'n' = number ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1189, 1189); ! phrase 1 ! [1: let boolean be false] t_0 = 0; ! phrase 2 ! [2: let guy be the actor] t_1 = actor; ! phrase 3 ! [3: let item be the non-thing] t_2 = I270_non_thing; ! phrase 4 ! [4: while boolean is false begin] while ((((t_0 && true) == (0 && true)))) { ! phrase 5 ! [5: now guy is a random alive person enclosed by the location] t_1 = (Prop_327()) ; ! phrase 6 ! [6: if the actor opposes the guy begin] if ((((Relation_69(actor,t_1))))) { ! phrase 7 ! [7: if guy has at least one thing begin] if ((Prop_328(,t_1))) { ! phrase 8 ! [8: now item is a random thing had by guy] t_2 = (Prop_329(,t_1)) ; ! phrase 9 ! [9: now boolean is true] t_0 = 1; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end while] } ! phrase 13 ! [13: let n be the disintegrate power of the actor] t_3 = GProperty(9, actor,p45_disintegrate_power); ! phrase 14 ! [14: if item is minor or item is non-treasure begin] if ((((t_2.p214_valuation == I188_minor))) || (((t_2.p214_valuation == I193_non_treasure)))) { ! phrase 15 ! [15: now n is n times 6] t_3 = (t_3*6) ; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: if item is major begin] if (((t_2.p214_valuation == I189_major))) { ! phrase 18 ! [18: now n is n times 4] t_3 = (t_3*4) ; ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: if item is epic begin] if (((t_2.p214_valuation == I190_epic))) { ! phrase 21 ! [21: now n is n times 2] t_3 = (t_3*2) ; ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: if item is incorruptible begin] if ((((Adj_255_t1_v9(t_2))))) { ! phrase 24 ! [24: now n is 0] t_3 = 0; ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: if a random chance of n in 100 succeeds begin] if (( (GenerateRandomNumber(1, 100) <= t_3) )) { ! phrase 27 ! [27: say ~[The actor] casts a ray of disintegration at [the item], destroying the object!~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1225; ParaContent(); print (the) t_2; ParaContent(); print (PrintText) SC_1226; new_line; .L_Say848; .L_SayX784; ! phrase 28 ! [28: remove item from play] RemoveFromPlay(t_2); ! phrase 29 ! [29: ready natural weapons] (PHR_966_r105 ()); ! phrase 30 ! [30: otherwise] } else { ! phrase 31 ! [31: say ~[The actor] casts a ray of disintegration at [the item], but the object resists!~] say__p=1;ParaContent(); print (The) actor; ParaContent(); print (PrintText) SC_1225; ParaContent(); print (the) t_2; ParaContent(); print (PrintText) SC_1227; new_line; .L_Say849; .L_SayX785; ! phrase 32 ! [32: end if] } ! phrase 33 ! [33: now current disintegrate cooldown of the actor is disintegrate cooldown of the actor] WriteGProperty(9, actor,p47_current_disintegrate_coo,GProperty(9, actor,p46_disintegrate_cooldown)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1189, 1189, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: followers (B501_followers) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A followers rule ( this is the follower percentile chance rule ): ! === which is equally specific with === ! Rule 2/3 ! A followers rule ( this is the follower cannot follow hidden person rule ): ! === which is equally specific with === ! Rule 3/3 ! Followers rule ( this is the Nameless Horror stops to kill rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A followers rule ( this is the follower percentile chance rule ): [ R_1192 t_0 ! Local variable e.g. 'n' = number ; ! phrase 1 ! [1: let n be the follower percentile chance of the test subject] t_0 = GProperty(9, (Global_Vars-->79),p48_follower_percentile_chan); ! phrase 2 ! [2: unless a random chance of n in 100 succeeds begin] if (~~(( (GenerateRandomNumber(1, 100) <= t_0) ))) { ! phrase 3 ! [3: rule fails] RulebookFails(); rtrue; ! phrase 4 ! [4: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A followers rule ( this is the follower cannot follow hidden person rule ): [ R_1193 ; ! phrase 1 ! [1: if player is hidden and test subject is not unnaturally aware and test subject is not unnaturally aware follower begin] if (((((Adj_221_t1_v9(player))))) && ((((~~(((Adj_225_t1_v9((Global_Vars-->79)))))))) && (((~~(((Adj_227_t1_v9((Global_Vars-->79)))))))))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Followers rule ( this is the Nameless Horror stops to kill rule ): [ R_1994 ; ! phrase 1 ! [1: if test subject is nameless horror begin] if ((((Global_Vars-->79) == I499_nameless_horror))) { ! phrase 2 ! [2: if the location of the nameless horror encloses more than one alive person begin] if ((Prop_330(, LocationOf(I499_nameless_horror) ))) { ! phrase 3 ! [3: rule fails] RulebookFails(); rtrue; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: beloved of Aite (B502_beloved_of_aite) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A beloved of Aite rule ( this is the Aite-loved rule ): ! === which is equally specific with === ! Rule 2/3 ! A beloved of Aite rule ( this is the war mask Aite rule ): ! === which is equally specific with === ! Rule 3/3 ! A beloved of Aite rule ( this is the aite loves the bearer of her power rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A beloved of Aite rule ( this is the Aite-loved rule ): [ R_1206 ; ! phrase 1 ! [1: if test subject is aite-loved begin] if ((((Adj_199_t1_v9((Global_Vars-->79)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A beloved of Aite rule ( this is the war mask Aite rule ): [ R_1429 ; ! phrase 1 ! [1: if the test subject wears the war mask begin] if ((((Global_Vars-->79) == WearerOf(I305_war_mask)))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A beloved of Aite rule ( this is the aite loves the bearer of her power rule ): [ R_1948 ; ! phrase 1 ! [1: if test subject is the player and power of the fanatics of aite is granted begin] if (((((Global_Vars-->79) == player))) && ((((Adj_158_t1_v9(I487_power_of_the_fanatics_o)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: heat resistance (B503_heat_resistance) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Heat resistance rule ( this is the material heat resistance rule ): ! === which is equally specific with === ! Rule 2/4 ! Heat resistance rule ( this is the intrinsic heat resistance rule ): ! === which is equally specific with === ! Rule 3/4 ! Heat resistance rule ( this is the asbestos vest heat resistance rule ): ! === which is equally specific with === ! Rule 4/4 ! Heat resistance rule ( this is the dragon armour heat resistance rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Heat resistance rule ( this is the material heat resistance rule ): [ R_1222 ; ! phrase 1 ! [1: increase temp-heat by destroying heat of the material of the test subject - 1] (Global_Vars-->84) = (Global_Vars-->84) + (GProperty(50, GProperty(9, (Global_Vars-->79),p180_material),p177_destroying_heat)-1) ; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Heat resistance rule ( this is the intrinsic heat resistance rule ): [ R_1223 ; ! phrase 1 ! [1: increase temp-heat by intrinsic heat resistance of the test subject] (Global_Vars-->84) = (Global_Vars-->84) + GProperty(9, (Global_Vars-->79),p51_intrinsic_heat_resistanc); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Heat resistance rule ( this is the asbestos vest heat resistance rule ): [ R_1484 ; ! phrase 1 ! [1: if test subject wears asbestos vest begin] if ((((Global_Vars-->79) == WearerOf(I343_asbestos_vest)))) { ! phrase 2 ! [2: increase temp-heat by 4] (Global_Vars-->84) = (Global_Vars-->84) + 4; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Heat resistance rule ( this is the dragon armour heat resistance rule ): [ R_1519 ; ! phrase 1 ! [1: if test subject is wearing the suit of dragon armour begin] if ((((Global_Vars-->79) == WearerOf(I358_suit_of_dragon_armour)))) { ! phrase 2 ! [2: increase temp-heat by 4] (Global_Vars-->84) = (Global_Vars-->84) + 4; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: rusting (B504_rusting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! A rusting rule ( this is the hot items cannot rust rule ): ! === which is equally specific with === ! Rule 2/2 ! A rusting rule ( this is the only iron items can rust rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A rusting rule ( this is the hot items cannot rust rule ): [ R_1244 ; ! phrase 1 ! [1: if heat strength of test object is greater than 1 begin] if (((GProperty(OBJECT_TY, (Global_Vars-->81),p50_heat_strength) > 1))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A rusting rule ( this is the only iron items can rust rule ): [ R_1245 ; ! phrase 1 ! [1: if material of test object is not iron begin] if (((~~((GProperty(OBJECT_TY, (Global_Vars-->81),p180_material) == I166_iron))))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: corroding (B505_corroding) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! A corroding rule ( this is the incorruptible things do not corrode rule ): ! === which is equally specific with === ! Rule 2/2 ! A corroding rule ( this is the corroding resistances rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A corroding rule ( this is the incorruptible things do not corrode rule ): [ R_1253 ; ! phrase 1 ! [1: if test object is incorruptible begin] if ((((Adj_255_t1_v9((Global_Vars-->81)))))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A corroding rule ( this is the corroding resistances rule ): [ R_1254 t_0 ! Local variable e.g. 'm' = number t_1 ! Local variable e.g. 'n' = number ; ! phrase 1 ! [1: let m be the corrosion resistance of the material of test object] t_0 = GProperty(50, GProperty(OBJECT_TY, (Global_Vars-->81),p180_material),p179_corrosion_resistance); ! phrase 2 ! [2: let n be a random number between 1 and 1000] t_1 = R_DecimalNumber(1, 1000) ; ! phrase 3 ! [3: if n is greater than m begin] if (((t_1 > t_0))) { ! phrase 4 ! [4: let m be the personal corrosion resistance of test object] t_0 = GProperty(OBJECT_TY, (Global_Vars-->81),p53_personal_corrosion_resis); ! phrase 5 ! [5: let n be a random number between 1 and 1000] t_1 = R_DecimalNumber(1, 1000) ; ! phrase 6 ! [6: if n is greater than m begin] if (((t_1 > t_0))) { ! phrase 7 ! [7: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: sudden combat reset (B506_sudden_combat_reset) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A sudden combat reset rule ( this is the sudden concentration reset rule ): ! === which is equally specific with === ! Rule 2/3 ! A sudden combat reset rule ( this is the reset the player to at-Inactive rule ): ! === which is equally specific with === ! Rule 3/3 ! A sudden combat reset rule ( this is the sudden grapple reset rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A sudden combat reset rule ( this is the sudden concentration reset rule ): [ R_1256 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with guy running through alive persons enclosed by the location begin] for (t_0=Prop_331(0), t_1=Prop_331(t_0): t_0: t_0=t_1, t_1=Prop_331(t_1)) { ! phrase 2 ! [2: now concentration of guy is 0] WriteGProperty(9, t_0,p26_concentration,0); ! phrase 3 ! [3: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A sudden combat reset rule ( this is the reset the player to at-Inactive rule ): [ R_1257 ; ! phrase 1 ! [1: now the player is at-inactive] player.p112_combat_state = I95_at_inactive; rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A sudden combat reset rule ( this is the sudden grapple reset rule ): [ R_1904 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: repeat with guy running through alive persons in the location begin] for (t_0=Prop_332(0), t_1=Prop_332(t_0): t_0: t_0=t_1, t_1=Prop_332(t_1)) { ! phrase 2 ! [2: while someone grapples guy begin] while ((((t_0.p238_grappling) ofclass K8_person))) { ! phrase 3 ! [3: let x be a random person grappling guy] t_2 = (Prop_333(,t_0)) ; ! phrase 4 ! [4: now x does not grapple guy] Relation_NowSN1to1(t_0,p238_grappling,t_2); ! phrase 5 ! [5: end while] } ! phrase 6 ! [6: end repeat] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: impeded movement (B507_impeded_movement) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! First impeded movement rule ( this is the can always move when ethereal rule ): ! --- now the mid-placed rules --- ! Rule 2/2 ! An impeded movement rule ( this is the being grappled impedes movement rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! First impeded movement rule ( this is the can always move when ethereal rule ): [ R_1343 ; ! phrase 1 ! [1: if test subject is ethereal begin] if ((((Adj_231_t1_v9((Global_Vars-->79)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! An impeded movement rule ( this is the being grappled impedes movement rule ): [ R_1905 ; ! phrase 1 ! [1: if someone grapples the test subject begin] if (((((Global_Vars-->79).p238_grappling) ofclass K8_person))) { ! phrase 2 ! [2: rule fails] RulebookFails(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: physical damage reduction (B508_physical_damage_reducti) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! A physical damage reduction rule ( this is the ghoul damage reduction rule ): ! === which is equally specific with === ! Rule 2/6 ! A physical damage reduction rule ( this is the no physical damage when ethereal rule ): ! === which is equally specific with === ! Rule 3/6 ! A physical damage reduction rule ( this is the plate mail physical damage reduction rule ): ! === which is equally specific with === ! Rule 4/6 ! A physical damage reduction rule ( this is the dragon armour damage reduction rule ): ! === which is equally specific with === ! Rule 5/6 ! A physical damage reduction rule ( this is the armadillo physical damage reduction rule ): ! === which is equally specific with === ! Rule 6/6 ! A physical damage reduction rule ( this is the scaling damage reduction rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A physical damage reduction rule ( this is the ghoul damage reduction rule ): [ R_1273 ; ! phrase 1 ! [1: if the test subject is the player and the player form of the player is ghoul begin] if (((((Global_Vars-->79) == player))) && (((GProperty(9, player,p201_player_form) == I182_ghoul)))) { ! phrase 2 ! [2: increase the pdr by 1] (Global_Vars-->87) = (Global_Vars-->87) + 1; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A physical damage reduction rule ( this is the no physical damage when ethereal rule ): [ R_1342 ; ! phrase 1 ! [1: if test subject is ethereal begin] if ((((Adj_231_t1_v9((Global_Vars-->79)))))) { ! phrase 2 ! [2: increase pdr by 100] (Global_Vars-->87) = (Global_Vars-->87) + 100; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A physical damage reduction rule ( this is the plate mail physical damage reduction rule ): [ R_1495 ; ! phrase 1 ! [1: if the test subject is wearing the suit of plate mail begin] if ((((Global_Vars-->79) == WearerOf(I351_suit_of_plate_mail)))) { ! phrase 2 ! [2: increase the pdr by 2] (Global_Vars-->87) = (Global_Vars-->87) + 2; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! A physical damage reduction rule ( this is the dragon armour damage reduction rule ): [ R_1521 ; ! phrase 1 ! [1: if the test subject is wearing the dragon armour begin] if ((((Global_Vars-->79) == WearerOf(I358_suit_of_dragon_armour)))) { ! phrase 2 ! [2: increase the pdr by 2] (Global_Vars-->87) = (Global_Vars-->87) + 2; ! phrase 3 ! [3: if the test subject is not undead begin] if (((~~(((Global_Vars-->79).p111_faction == I158_undead))))) { ! phrase 4 ! [4: increase the pdr by 2] (Global_Vars-->87) = (Global_Vars-->87) + 2; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A physical damage reduction rule ( this is the armadillo physical damage reduction rule ): [ R_1718 ; ! phrase 1 ! [1: if the test subject is the ravenous armadillo begin] if ((((Global_Vars-->79) == I442_ravenous_armadillo))) { ! phrase 2 ! [2: increase the pdr by 3] (Global_Vars-->87) = (Global_Vars-->87) + 3; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! A physical damage reduction rule ( this is the scaling damage reduction rule ): [ R_1739 ; ! phrase 1 ! [1: if the test subject is the player and the scales number is greater than 0 begin] if (((((Global_Vars-->79) == player))) && ((((Global_Vars-->120) > 0)))) { ! phrase 2 ! [2: increase the pdr by scales number] (Global_Vars-->87) = (Global_Vars-->87) + (Global_Vars-->120); ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: falling-test (B509_falling_test) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! A falling-test rule ( this is the fliers cannot fall rule ): ! === which is equally specific with === ! Rule 2/3 ! A falling-test rule ( this is the non-moving persons cannot fall rule ): ! === which is equally specific with === ! Rule 3/3 ! A falling-test rule ( this is the ethereal persons cannot fall rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A falling-test rule ( this is the fliers cannot fall rule ): [ R_1264 ; ! phrase 1 ! [1: if falling-test-person is flying begin] if (((PHR_1166_r51 ((Global_Vars-->88))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A falling-test rule ( this is the non-moving persons cannot fall rule ): [ R_1265 ; ! phrase 1 ! [1: unless falling-test-person can move begin] if (~~(((PHR_1258_r50 ((Global_Vars-->88)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! A falling-test rule ( this is the ethereal persons cannot fall rule ): [ R_1266 ; ! phrase 1 ! [1: if falling-test-person is ethereal begin] if ((((Adj_231_t1_v9((Global_Vars-->88)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Turning bat (B510_check_turning_bat) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check turning bat: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check turning bat: [ R_1284 ; if (actor == player) { if (debug_rules) DB_Rule(R_1284, 1284); ! phrase 1 ! [1: if the player form of the player is not vampire begin] if (((~~((GProperty(9, player,p201_player_form) == I183_vampire))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: if the player form of the player is vampire bat begin] if (((GProperty(9, player,p201_player_form) == I184_vampire_bat))) { ! phrase 4 ! [4: say ~You already are in bat form.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1228; new_line; rtrue; .L_Say850; .L_SayX786; rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~You do not possess that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1229; new_line; rtrue; .L_Say851; .L_SayX787; rtrue; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1284, 1284, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Turning bat (B511_carry_out_turning_bat) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out turning bat: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Carry out turning bat: [ R_1285 t_0 ! Local variable e.g. '?-1,-1?' = clothing t_1 ! Local variable e.g. '?-1,-1?' = clothing ; if (actor == player) { if (debug_rules) DB_Rule(R_1285, 1285); ! phrase 1 ! [1: say ~You turn into a bat!~] say__p=1;ParaContent(); print (PrintText) SC_1230; new_line; .L_Say852; .L_SayX788; ! phrase 2 ! [2: now player form of player is vampire bat] WriteGProperty(9, player,p201_player_form,I184_vampire_bat); ! phrase 3 ! [3: repeat with x running through weapons enclosed by the player begin] for (t_0=Prop_334(0), t_1=Prop_334(t_0): t_0: t_0=t_1, t_1=Prop_334(t_1)) { ! phrase 4 ! [4: now x is not readied] (Adj_103_t3_v9(t_0)); ! phrase 5 ! [5: end repeat] } ! phrase 6 ! [6: repeat with x running through clothing enclosed by the player begin] for (t_0=Prop_335(0), t_1=Prop_335(t_0): t_0: t_0=t_1, t_1=Prop_335(t_1)) { ! phrase 7 ! [7: now the player carries x] MoveObject(t_0,player); ! phrase 8 ! [8: end repeat] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1285, 1285, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Turning vampire (B513_check_turning_vampire) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check turning vampire: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Check turning vampire: [ R_1296 ; if (actor == player) { if (debug_rules) DB_Rule(R_1296, 1296); ! phrase 1 ! [1: if the player form of the player is not vampire bat begin] if (((~~((GProperty(9, player,p201_player_form) == I184_vampire_bat))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: if the player form of the player is vampire begin] if (((GProperty(9, player,p201_player_form) == I183_vampire))) { ! phrase 4 ! [4: say ~You already are in vampire form.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1231; new_line; rtrue; .L_Say853; .L_SayX789; rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~You do not possess that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1229; new_line; rtrue; .L_Say854; .L_SayX790; rtrue; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1296, 1296, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Turning vampire (B514_carry_out_turning_vampi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out turning vampire: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Carry out turning vampire: [ R_1297 ; if (actor == player) { if (debug_rules) DB_Rule(R_1297, 1297); ! phrase 1 ! [1: say ~You turn back into a vampire!~] say__p=1;ParaContent(); print (PrintText) SC_1232; new_line; .L_Say855; .L_SayX791; ! phrase 2 ! [2: now player form of player is vampire] WriteGProperty(9, player,p201_player_form,I183_vampire); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1297, 1297, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: detection (B516_detection) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11 ! Detection rule ( this is the vampire detection rule ): ! === which is equally specific with === ! Rule 2/11 ! Detection rule ( this is the vampire bat detection rule ): ! === which is equally specific with === ! Rule 3/11 ! A detection rule ( this is the base probability of detection rule ): ! === which is equally specific with === ! Rule 4/11 ! A detection rule ( this is the tension increases probability of detection rule ): ! === which is equally specific with === ! Rule 5/11 ! A detection rule ( this is the perception probability of detection rule ): ! === which is equally specific with === ! Rule 6/11 ! A detection rule ( this is the on-the-lookout increases probability of detection rule ): ! === which is equally specific with === ! Rule 7/11 ! A detection rule ( this is the blindness decreases probability of detection rule ): ! === which is equally specific with === ! Rule 8/11 ! A detection rule ( this is the unnatural awareness detection rule ): ! === which is equally specific with === ! Rule 9/11 ! A detection rule ( this is the smoke lessens probability of detection rule ): ! === which is equally specific with === ! Rule 10/11 ! A detection rule ( this is the ethereal makes hiding easier rule ): ! --- now the last-placed rules --- ! Rule 11/11 ! Last detection rule ( this is the flickering lamps detection rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Detection rule ( this is the vampire detection rule ): [ R_1282 ; ! phrase 1 ! [1: if the player form of the player is vampire begin] if (((GProperty(9, player,p201_player_form) == I183_vampire))) { ! phrase 2 ! [2: decrease the detection probability by 5] (Global_Vars-->89) = (Global_Vars-->89) - 5; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Detection rule ( this is the vampire bat detection rule ): [ R_1290 ; ! phrase 1 ! [1: if the player form of the player is vampire bat begin] if (((GProperty(9, player,p201_player_form) == I184_vampire_bat))) { ! phrase 2 ! [2: decrease the detection probability by 20] (Global_Vars-->89) = (Global_Vars-->89) - 20; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the base probability of detection rule ): [ R_1302 ; ! phrase 1 ! [1: increase the detection probability by 3] (Global_Vars-->89) = (Global_Vars-->89) + 3; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the tension increases probability of detection rule ): [ R_1303 ; ! phrase 1 ! [1: increase the detection probability by the tension] (Global_Vars-->89) = (Global_Vars-->89) + (Global_Vars-->48); rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the perception probability of detection rule ): [ R_1304 ; ! phrase 1 ! [1: unless the main actor is the player begin] if (~~((((Global_Vars-->30) == player)))) { ! phrase 2 ! [2: increase the detection probability by the perception of the main actor] (Global_Vars-->89) = (Global_Vars-->89) + GProperty(9, (Global_Vars-->30),p33_perception); ! phrase 3 ! [3: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the on-the-lookout increases probability of detection rule ): [ R_1305 ; ! phrase 1 ! [1: unless the main actor is the player begin] if (~~((((Global_Vars-->30) == player)))) { ! phrase 2 ! [2: if the main actor is on-the-lookout begin] if ((((Adj_223_t1_v9((Global_Vars-->30)))))) { ! phrase 3 ! [3: increase the detection probability by 5] (Global_Vars-->89) = (Global_Vars-->89) + 5; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the blindness decreases probability of detection rule ): [ R_1306 ; ! phrase 1 ! [1: unless the main actor is the player begin] if (~~((((Global_Vars-->30) == player)))) { ! phrase 2 ! [2: if the main actor is blind begin] if (((PHR_1169_r17 ((Global_Vars-->30))))) { ! phrase 3 ! [3: decrease the detection probability by 3] (Global_Vars-->89) = (Global_Vars-->89) - 3; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the unnatural awareness detection rule ): [ R_1307 ; ! phrase 1 ! [1: unless the main actor is the player begin] if (~~((((Global_Vars-->30) == player)))) { ! phrase 2 ! [2: if the main actor is unnaturally aware begin] if ((((Adj_225_t1_v9((Global_Vars-->30)))))) { ! phrase 3 ! [3: increase the detection probability by 1000] (Global_Vars-->89) = (Global_Vars-->89) + 1000; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the smoke lessens probability of detection rule ): [ R_1329 ; ! phrase 1 ! [1: unless main actor is smoke immune begin] if (~~(((PHR_1325_r48 ((Global_Vars-->30)))))) { ! phrase 2 ! [2: decrease the detection probability by smoke penalty of the location] (Global_Vars-->89) = (Global_Vars-->89) - (Resolver_9(real_location,"source", 286)); ! phrase 3 ! [3: end unless] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A detection rule ( this is the ethereal makes hiding easier rule ): [ R_1344 ; ! phrase 1 ! [1: decrease the detection probability by 25] (Global_Vars-->89) = (Global_Vars-->89) - 25; rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Last detection rule ( this is the flickering lamps detection rule ): [ R_1677 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the location encloses the flickering lamps begin] if (((IndirectlyContains(real_location,I432_flickering_lamps)))) { ! phrase 2 ! [2: let n be the detection probability divided by 2] t_0 = (IntegerDivide((Global_Vars-->89),2)) ; ! phrase 3 ! [3: now the detection probability is n] (Global_Vars-->89) = t_0; ! phrase 4 ! [4: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: smoke (B517_smoke) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Smoke rule ( this is the smoke may drift in from another room rule ): ! === which is equally specific with === ! Rule 2/6 ! Smoke rule ( this is the smoke the Hall of Vapours rule ): ! === which is equally specific with === ! Rule 3/6 ! Smoke rule ( this is the smoke at the Portal of Smoke rule ): ! === which is equally specific with === ! Rule 4/6 ! Smoke rule ( this is the smoke from the broken pipe rule ): ! === which is equally specific with === ! Rule 5/6 ! Smoke rule ( this is the smoke on the Elemental Plane of Smoke rule ): ! --- now the last-placed rules --- ! Rule 6/6 ! Last smoke rule ( this is the smoke slowly dissipates rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Smoke rule ( this is the smoke may drift in from another room rule ): [ R_1319 t_0 ! Local variable e.g. '?-1,-1?' = direction t_1 ! Local variable e.g. '?-1,-1?' = direction t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: repeat with way running through cardinal directions begin] for (t_0=Prop_336(0), t_1=Prop_336(t_0): t_0: t_0=t_1, t_1=Prop_336(t_1)) { ! phrase 2 ! [2: let place be the room way of test room] t_2 = MapConnection((Global_Vars-->80),t_0) ; ! phrase 3 ! [3: if place is a room begin] if (((t_2 ofclass K1_room))) { ! phrase 4 ! [4: let n be smoke timer of place minus temporary smoke timer] t_3 = (GProperty(OBJECT_TY, t_2,p54_smoke_timer)-(Global_Vars-->90)) ; ! phrase 5 ! [5: if n is greater than 5 begin] if (((t_3 > 5))) { ! phrase 6 ! [6: increase temporary smoke timer by 2] (Global_Vars-->90) = (Global_Vars-->90) + 2; ! phrase 7 ! [7: otherwise if n is 5] } else if (((t_3 == 5))) { ! phrase 8 ! [8: increase temporary smoke timer by 1] (Global_Vars-->90) = (Global_Vars-->90) + 1; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end repeat] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Smoke rule ( this is the smoke the Hall of Vapours rule ): [ R_1627 ; ! phrase 1 ! [1: if test room is hall of vapours and pipes-open is true begin] if (((((Global_Vars-->80) == I407_hall_of_vapours))) && (((((Global_Vars-->111) && true) == (1 && true))))) { ! phrase 2 ! [2: if temporary smoke timer is less than 10 begin] if ((((Global_Vars-->90) < 10))) { ! phrase 3 ! [3: now temporary smoke timer is 10] (Global_Vars-->90) = 10; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Smoke rule ( this is the smoke at the Portal of Smoke rule ): [ R_1657 ; ! phrase 1 ! [1: if test room is portal of smoke begin] if ((((Global_Vars-->80) == I425_portal_of_smoke))) { ! phrase 2 ! [2: if temporary smoke timer is less than 20 begin] if ((((Global_Vars-->90) < 20))) { ! phrase 3 ! [3: now temporary smoke timer is 20] (Global_Vars-->90) = 20; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! Smoke rule ( this is the smoke from the broken pipe rule ): [ R_1669 ; ! phrase 1 ! [1: if test room encloses broken pipe begin] if (((IndirectlyContains((Global_Vars-->80),I429_broken_pipe)))) { ! phrase 2 ! [2: if temporary smoke timer is less than 5 begin] if ((((Global_Vars-->90) < 5))) { ! phrase 3 ! [3: now temporary smoke timer is 5] (Global_Vars-->90) = 5; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Events and Specials" by Victor Gijsbers ! Smoke rule ( this is the smoke on the Elemental Plane of Smoke rule ): [ R_2069 ; ! phrase 1 ! [1: if test room is elemental plane of smoke begin] if ((((Global_Vars-->80) == I521_elemental_plane_of_smok))) { ! phrase 2 ! [2: if temporary smoke timer is less than 25 begin] if ((((Global_Vars-->90) < 25))) { ! phrase 3 ! [3: now temporary smoke timer is 25] (Global_Vars-->90) = 25; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Last smoke rule ( this is the smoke slowly dissipates rule ): [ R_1318 ; ! phrase 1 ! [1: if temporary smoke timer is greater than 0 begin] if ((((Global_Vars-->90) > 0))) { ! phrase 2 ! [2: decrease temporary smoke timer by 1] (Global_Vars-->90) = (Global_Vars-->90) - 1; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: smoke immunity (B518_smoke_immunity) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! A smoke immunity rule ( this is the smoke immune if smoke attuned rule ): ! === which is equally specific with === ! Rule 2/2 ! A smoke immunity rule ( this is the smoke immune if eyeless rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A smoke immunity rule ( this is the smoke immune if smoke attuned rule ): [ R_1326 ; ! phrase 1 ! [1: if test subject is smoke attuned begin] if ((((Adj_229_t1_v9((Global_Vars-->79)))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! A smoke immunity rule ( this is the smoke immune if eyeless rule ): [ R_1327 ; ! phrase 1 ! [1: if test subject is blind begin] if (((PHR_1169_r17 ((Global_Vars-->79))))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Inhaling (B519_check_inhaling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check inhaling: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check inhaling: [ R_1352 ; if (actor == player) { if (debug_rules) DB_Rule(R_1352, 1352); ! phrase 1 ! [1: if the noun is not an essence begin] if (((~~((noun ofclass K23_essence))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~Only magical essences can be consumed through inhaling.~] say__p=1;ParaContent(); print (PrintText) SC_1233; new_line; .L_Say856; .L_SayX792; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1352, 1352, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Inhaling (B520_carry_out_inhaling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! First carry out inhaling: ! --- now the mid-placed rules --- ! Rule 2/7 ! Carry out inhaling the essence of caution: ! === which is equally specific with === ! Rule 3/7 ! Carry out inhaling the essence of rage: ! === which is equally specific with === ! Rule 4/7 ! Carry out inhaling the essence of patience: ! === which is equally specific with === ! Rule 5/7 ! Carry out inhaling the essence of greed: ! === which is equally specific with === ! Rule 6/7 ! Carry out inhaling the essence of addiction: ! --- now the last-placed rules --- ! Rule 7/7 ! Last carry out inhaling: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! First carry out inhaling: [ R_1353 ; if (actor == player) { if (debug_rules) DB_Rule(R_1353, 1353); ! phrase 1 ! [1: say ~You uncork the little bottle and push its mouth deep into your [one of]left[or]right[at random] nostril, pressing the other side of your nose closed with your fingers. You inhale deeply -- and with a burning sensation, the magical essence flows up and into your brain.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1234; ParaContent(); I7_ST_say_one_of-->9 = i7_soo_ran(I7_ST_say_one_of-->9, 2); switch((I7_ST_say_one_of-->9)%(2+1)-1) { 0: ParaContent(); print (PrintText) SC_1235; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1236; ParaContent(); } ParaContent(); print (PrintText) SC_1237; ParaContent(); RunParagraphOn(); .L_Say857; .L_SayX793; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1353, 1353, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out inhaling the essence of caution: [ R_1405 ; if ( (actor==player) && ((noun == I271_essence_of_caution) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1405, 1405); ! phrase 1 ! [1: say ~ The decision to do this suddenly seems exceedingly rash.~] say__p=1;ParaContent(); print (PrintText) SC_1238; new_line; .L_Say858; .L_SayX794; ! phrase 2 ! [2: increase perception of the player by 1] WriteGProperty(9, player,p33_perception,GProperty(9, player,p33_perception) + 1); ! phrase 3 ! [3: now the player is cautious] (Adj_260_t2_v9(player)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1405, 1405, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out inhaling the essence of rage: [ R_1408 ; if ( (actor==player) && ((noun == I272_essence_of_rage) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1408, 1408); ! phrase 1 ! [1: say ~ You will show them all that you are not to be toyed with!~] say__p=1;ParaContent(); print (PrintText) SC_1239; new_line; .L_Say859; .L_SayX795; ! phrase 2 ! [2: increase willpower of the player by 1] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) + 1); ! phrase 3 ! [3: increase melee of the player by 1] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 1); ! phrase 4 ! [4: now the player is enraged] (Adj_262_t2_v9(player)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1408, 1408, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out inhaling the essence of patience: [ R_1411 ; if ( (actor==player) && ((noun == I273_essence_of_patience) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1411, 1411); ! phrase 1 ! [1: say ~ You relish the smell. There is no need to hurry.~] say__p=1;ParaContent(); print (PrintText) SC_1240; new_line; .L_Say860; .L_SayX796; ! phrase 2 ! [2: now the player is patient] (Adj_264_t2_v9(player)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1411, 1411, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out inhaling the essence of greed: [ R_1501 ; if ( (actor==player) && ((noun == I352_essence_of_greed) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1501, 1501); ! phrase 1 ! [1: say ~ You want to absorb souls. Lots of souls. Now.~] say__p=1;ParaContent(); print (PrintText) SC_1241; new_line; .L_Say861; .L_SayX797; ! phrase 2 ! [2: now the player is greedy] (Adj_266_t2_v9(player)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1501, 1501, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out inhaling the essence of addiction: [ R_1515 ; if ( (actor==player) && ((noun == I356_essence_of_addiction) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1515, 1515); ! phrase 1 ! [1: say ~ You feel very [if ment timer is less than 1]low[otherwise]high[end if]!~] say__p=1;ParaContent(); print (PrintText) SC_1242; if (~~(((((Global_Vars-->97) < 1))))) jump L_Say862; ParaContent(); print (PrintText) SC_1243; jump L_SayX798; .L_Say862; ParaContent(); print (PrintText) SC_1244; .L_Say863; .L_SayX798; ParaContent(); print (PrintText) SC_426; new_line; .L_Say864; .L_SayX799; ! phrase 2 ! [2: increase ment addiction by 2] (Global_Vars-->96) = (Global_Vars-->96) + 2; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1515, 1515, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last carry out inhaling: [ R_1354 ; if (actor == player) { if (debug_rules) DB_Rule(R_1354, 1354); ! phrase 1 ! [1: remove the noun from play] RemoveFromPlay(noun); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1354, 1354, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Throwing (B522_check_throwing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check throwing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check throwing: [ R_1371 ; if (actor == player) { if (debug_rules) DB_Rule(R_1371, 1371); ! phrase 1 ! [1: if the noun is not a grenade begin] if (((~~((noun ofclass K35_grenade))))) { ! phrase 2 ! [2: move the noun to the location] MoveObject(noun, real_location, 0, false); ! phrase 3 ! [3: say ~You throw [the noun] away.~ instead] say__p=1;ParaContent(); print (PrintText) SC_632; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_361; new_line; rtrue; .L_Say865; .L_SayX800; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1371, 1371, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Throwing (B523_carry_out_throwing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out throwing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out throwing: [ R_1372 ; if (actor == player) { if (debug_rules) DB_Rule(R_1372, 1372); ! phrase 1 ! [1: say ~Apparently, the programmer has forgotten to implement this type of grenade, because nothing happens!~] say__p=1;ParaContent(); print (PrintText) SC_1245; new_line; .L_Say866; .L_SayX801; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1372, 1372, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Applying it to (B526_carry_out_applying_it_t) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out applying something to something: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out applying something to something: [ R_1376 ; if ( (actor==player) && ((noun ofclass K2_thing)) && ((second ofclass K2_thing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1376, 1376); ! phrase 1 ! [1: say ~Nothing particular seems to happen.~] say__p=1;ParaContent(); print (PrintText) SC_1246; new_line; .L_Say867; .L_SayX802; ! phrase 2 ! [2: remove the noun from play] RemoveFromPlay(noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1376, 1376, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Spraying (B528_check_spraying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check spraying: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check spraying: [ R_1378 ; if (actor == player) { if (debug_rules) DB_Rule(R_1378, 1378); ! phrase 1 ! [1: if noun is not a sprayable begin] if (((~~((noun ofclass K37_sprayable))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~That cannot be sprayed.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1247; new_line; rtrue; .L_Say868; .L_SayX803; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1378, 1378, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Spraying (B529_carry_out_spraying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out spraying fungicide contraption: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out spraying fungicide contraption: [ R_1485 ; if ( (actor==player) && ((noun == I344_fungicide_contraption) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1485, 1485); ! phrase 1 ! [1: if location is rust-spored begin] if ((((Adj_207_t1_v9(real_location))))) { ! phrase 2 ! [2: say ~You spray the fungicide all around. The rust spores blacken and wither.~] say__p=1;ParaContent(); print (PrintText) SC_1248; new_line; .L_Say869; .L_SayX804; ! phrase 3 ! [3: now location is not rust-spored] (Adj_207_t3_v9(real_location)); ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: say ~You spray the fungicide all around.~] say__p=1;ParaContent(); print (PrintText) SC_1249; new_line; .L_Say870; .L_SayX805; ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1485, 1485, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Reading (B531_check_reading) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check reading when the noun is not a scroll ( this is the can only read scrolls rule ): ! >>> II - When/while requirement >>> ! Rule 2/3 ! Check reading when the player is blind ( this is the cannot read when blind rule ): ! --- now the last-placed rules --- ! Rule 3/3 ! Last check reading a scroll: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check reading when the noun is not a scroll ( this is the can only read scrolls rule ): [ R_1380 ; if (actor == player) { if ((((((~~((noun ofclass K38_scroll)))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1380, 1380); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~You cannot read that.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1250; new_line; rtrue; .L_Say871; .L_SayX806; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1380, 1380, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check reading when the player is blind ( this is the cannot read when blind rule ): [ R_1381 ; if (actor == player) { if ((((((PHR_1169_r17 (player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_1381, 1381); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~[The noun] has not been written in braille.~ instead] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_1251; new_line; rtrue; .L_Say872; .L_SayX807; rtrue; } ! Runs only when actor is the player } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_1381, 1381, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check reading a scroll: [ R_1387 t_0 ! Local variable e.g. 'effect' = scroll-effect-value t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1387, 1387); ! phrase 1 ! [1: let effect be scroll-effect of the noun] t_0 = GProperty(OBJECT_TY, noun,p56_scroll_effect); ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: if player does not have-knowledge-of effect begin] if (((~~((player == (GProperty(54, t_0, p217_having_knowledge_of))))))) { ! phrase 4 ! [4: repeat through table of magic scrolls begin] @push ct_0; @push ct_1; for (t_1=T18_magic_scrolls,t_2=1,ct_0=t_1,ct_1=t_2: t_2<=TableRows(t_1):t_2++,ct_0=t_1,ct_1=t_2) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 5 ! [5: if scroll-effect entry is effect and true-name entry is true begin] if ((((TableLookUpEntry(ct_0,140,ct_1) == t_0))) && ((((TableLookUpEntry(ct_0,141,ct_1) && true) == (1 && true))))) { ! phrase 6 ! [6: say ~It is a [scroll entry]!~] say__p=1;ParaContent(); print (PrintText) SC_630; ParaContent(); print (PrintShortName) TableLookUpEntry(ct_0,139,ct_1); ParaContent(); print (PrintText) SC_426; new_line; .L_Say873; .L_SayX808; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end repeat] } @pull ct_1; @pull ct_0; ! phrase 9 ! [9: scroll-effect-identify effect] (PHR_1386_r56 (t_0)); ! phrase 10 ! [10: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1387, 1387, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Reading (B532_carry_out_reading) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 2/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 3/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 4/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 5/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 6/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 7/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 8/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 9/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 10/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 11/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 12/14 ! Carry out reading a scroll: ! === which is equally specific with === ! Rule 13/14 ! Carry out reading a scroll: ! >>> I - Number of aspects constrained >>> ! Rule 14/14 ! Carry out reading: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Carry out reading a scroll: [ R_1310 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1310, 1310); ! phrase 1 ! [1: increase detection probability by 50] (Global_Vars-->89) = (Global_Vars-->89) + 50; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1310, 1310, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1438 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1438, 1438); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-teleportation begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I212_scroll_teleportation))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: unless teleportation is impossible for the player begin] if (~~(((PHR_1179_r20 (player))))) { ! phrase 4 ! [4: teleport the player] (PHR_1186_r46 ()); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~The scroll disappears, but something has stopped you from teleporting.~] say__p=1;ParaContent(); print (PrintText) SC_1252; new_line; .L_Say874; .L_SayX809; ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 9 ! [9: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1438, 1438, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1442 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1442, 1442); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-ghoulification begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I215_scroll_ghoulification))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: unless the player is undead begin] if (~~(((player.p111_faction == I158_undead)))) { ! phrase 4 ! [4: say ~As you read the scroll, your flesh starts to rot and most of your vital functions cease. You have been turned into a ghoul!~] say__p=1;ParaContent(); print (PrintText) SC_1253; new_line; .L_Say875; .L_SayX810; ! phrase 5 ! [5: ghoulify the player] (PHR_1270_r34 ()); ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: say ~As you are undead already, the scroll has no effect on you.~] say__p=1;ParaContent(); print (PrintText) SC_1254; new_line; .L_Say876; .L_SayX811; ! phrase 8 ! [8: end unless] } ! phrase 9 ! [9: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 10 ! [10: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1442, 1442, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1444 t_0 ! Local variable e.g. '?-1,-1?' = scroll t_1 ! Local variable e.g. '?-1,-1?' = scroll t_2 ! Local variable e.g. '?-1,-1?' = scroll-effect-value ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1444, 1444); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-identify begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I213_scroll_identify))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: say ~The nature of scrolls suddenly becomes clear to you.~] say__p=1;ParaContent(); print (PrintText) SC_1255; new_line; .L_Say877; .L_SayX812; ! phrase 4 ! [4: repeat with item running through prototypical obfuscated scrolls begin] for (t_0=Prop_337(0), t_1=Prop_337(t_0): t_0: t_0=t_1, t_1=Prop_337(t_1)) { ! phrase 5 ! [5: let effect be scroll-effect of item] t_2 = GProperty(9, t_0,p56_scroll_effect); ! phrase 6 ! [6: scroll-effect-identify effect] (PHR_1386_r56 (t_2)); ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 9 ! [9: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1444, 1444, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1447 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD4_list_of_things); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_73(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_73 I7BASPL t_0 ! Local variable e.g. '?-1,-1?' = list of things t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = thing ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1447, 1447); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-remove-curse begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I214_scroll_remove_curse))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: if the player has at least one cursed corruptible thing begin] if ((Prop_338())) { ! phrase 4 ! [4: let k be a list of things] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 5 ! [5: repeat with item running through cursed corruptible things had by the player begin] for (t_1=Prop_339(0), t_2=Prop_339(t_1): t_1: t_1=t_2, t_2=Prop_339(t_2)) { ! phrase 6 ! [6: now item is not cursed] (Adj_256_t3_v9(t_1)); ! phrase 7 ! [7: add item to k] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 8 ! [8: end repeat] } ! phrase 9 ! [9: say ~The scroll uncurses [K with definite articles].~] say__p=1;ParaContent(); print (PrintText) SC_1256; ParaContent(); LIST_OF_TY_Say(t_0, 2); ParaContent(); print (PrintText) SC_310; new_line; .L_Say878; .L_SayX813; ! phrase 10 ! [10: otherwise] } else { ! phrase 11 ! [11: say ~The scroll does nothing, since you had no cursed items.~] say__p=1;ParaContent(); print (PrintText) SC_1257; new_line; .L_Say879; .L_SayX814; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: now the player is not death-cursed] (Adj_215_t3_v9(player)); ! phrase 14 ! [14: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 15 ! [15: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1447, 1447, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1451 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1451, 1451); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-shadows begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I216_scroll_shadows))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: if the player is hidden begin] if ((((Adj_221_t1_v9(player))))) { ! phrase 4 ! [4: say ~The scroll disappears and you remain hidden.~] say__p=1;ParaContent(); print (PrintText) SC_1258; new_line; .L_Say880; .L_SayX815; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: hide] (PHR_1315_r15 ()); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 9 ! [9: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1451, 1451, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1455 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1455, 1455); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-summoning begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I217_scroll_summoning))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: if at least one alive undead person is off-stage begin] if ((Prop_340())) { ! phrase 4 ! [4: let guy be a random alive off-stage undead person] t_0 = (Prop_341()) ; ! phrase 5 ! [5: move guy to location of the player] MoveObject(t_0, LocationOf(player) , 0, false); ! phrase 6 ! [6: say ~You speak the awful spell, and [a guy] appears before you!~] say__p=1;ParaContent(); print (PrintText) SC_1259; ParaContent(); print (a) t_0; ParaContent(); print (PrintText) SC_1260; new_line; .L_Say881; .L_SayX816; ! phrase 7 ! [7: now guy is follower] (Adj_172_t2_v9(t_0)); ! phrase 8 ! [8: unless the follower percentile chance of guy is greater than 60 begin] if (~~(((GProperty(OBJECT_TY, t_0,p48_follower_percentile_chan) > 60)))) { ! phrase 9 ! [9: now follower percentile chance of guy is 60] WriteGProperty(OBJECT_TY, t_0,p48_follower_percentile_chan,60); ! phrase 10 ! [10: end unless] } ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~You speak the awful spell, but nothing happens. The planes must not be well-aligned.~] say__p=1;ParaContent(); print (PrintText) SC_1261; new_line; .L_Say882; .L_SayX817; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 15 ! [15: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1455, 1455, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1457 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1457, 1457); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-fireworks begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I218_scroll_fireworks))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: say ~Gratuitous purple fireworks fill the room, spelling the words [bold type]YOU HAVE LOST THE GAME[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_1262; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1263; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say883; .L_SayX818; ! phrase 4 ! [4: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1457, 1457, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1459 t_0 ! Local variable e.g. '?-1,-1?' = weapon t_1 ! Local variable e.g. '?-1,-1?' = weapon ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1459, 1459); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-blade begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I219_scroll_blade))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: repeat with item running through weapons enclosed by the player begin] for (t_0=Prop_342(0), t_1=Prop_342(t_0): t_0: t_0=t_1, t_1=Prop_342(t_1)) { ! phrase 4 ! [4: if item is readied begin] if ((((Adj_103_t1_v9(t_0))))) { ! phrase 5 ! [5: now item is not readied] (Adj_103_t3_v9(t_0)); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: move adamantine blade to player] MoveObject(I332_adamantine_blade, player, 0, false); ! phrase 9 ! [9: now adamantine blade is readied] (Adj_103_t2_v9(I332_adamantine_blade)); ! phrase 10 ! [10: do the adamantine blade shuffle] (PHR_1460_r106 ()); ! phrase 11 ! [11: if the player is not ethereal begin] if (((~~(((Adj_231_t1_v9(player))))))) { ! phrase 12 ! [12: say ~A magical sword formed of adamant suddenly appears in your hands!~] say__p=1;ParaContent(); print (PrintText) SC_1264; new_line; .L_Say884; .L_SayX819; ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: say ~A magical sword formed of adamant suddenly appears in your hands -- and falls through them to the ground!~] say__p=1;ParaContent(); print (PrintText) SC_1265; new_line; .L_Say885; .L_SayX820; ! phrase 15 ! [15: move adamantine blade to the location] MoveObject(I332_adamantine_blade, real_location, 0, false); ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 18 ! [18: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1459, 1459, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1464 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1464, 1464); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-protection begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I220_scroll_protection))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: say ~You feel protected.~] say__p=1;ParaContent(); print (PrintText) SC_1266; new_line; .L_Say886; .L_SayX821; ! phrase 4 ! [4: if hit protection of the player is less than 2 begin] if (((GProperty(9, player,p59_hit_protection) < 2))) { ! phrase 5 ! [5: now hit protection of the player is 1] WriteGProperty(9, player,p59_hit_protection,1); ! phrase 6 ! [6: if a random chance of 4 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 4) )) { ! phrase 7 ! [7: now hit protection of the player is 2] WriteGProperty(9, player,p59_hit_protection,2); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 11 ! [11: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1464, 1464, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1468 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1468, 1468); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-ethereal begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I221_scroll_ethereal))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: say ~You become ethereal[if the player has a not radiance thing]; your possessions drop to the ground[end if]!~] say__p=1;ParaContent(); print (PrintText) SC_1267; if (~~(((Prop_343())))) jump L_Say887; ParaContent(); print (PrintText) SC_1268; .L_Say887; .L_SayX822; ParaContent(); print (PrintText) SC_426; new_line; .L_Say888; .L_SayX823; ! phrase 4 ! [4: make the player ethereal] (PHR_1337_r107 (player)); ! phrase 5 ! [5: now ethereal timer of the player is a random number between 20 and 25] WriteGProperty(9, player,p55_ethereal_timer, R_DecimalNumber(20, 25) ); ! phrase 6 ! [6: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 7 ! [7: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1468, 1468, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1469 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1469, 1469); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-skill begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I222_scroll_skill))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: say ~You suddenly feel very skilled!~] say__p=1;ParaContent(); print (PrintText) SC_1269; new_line; .L_Say889; .L_SayX824; ! phrase 4 ! [4: increase the player skill bonus timer by a random number between 15 and 20] (Global_Vars-->92) = (Global_Vars-->92) + R_DecimalNumber(15, 20) ; ! phrase 5 ! [5: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 6 ! [6: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1469, 1469, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading a scroll: [ R_1478 ; if ( (actor==player) && ((noun ofclass K38_scroll))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1478, 1478); ! phrase 1 ! [1: if scroll-effect of the noun is scroll-death begin] if (((GProperty(OBJECT_TY, noun,p56_scroll_effect) == I223_scroll_death))) { ! phrase 2 ! [2: remove noun from play] RemoveFromPlay(noun); ! phrase 3 ! [3: consider the unholy wave rules] ProcessRulebook(534); ! phrase 4 ! [4: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1478, 1478, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out reading: [ R_1382 ; if (actor == player) { if (debug_rules) DB_Rule(R_1382, 1382); ! phrase 1 ! [1: say ~Hm. Interesting.~] say__p=1;ParaContent(); print (PrintText) SC_1270; new_line; .L_Say890; .L_SayX825; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1382, 1382, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: unholy wave (B534_unholy_wave) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! An unholy wave rule ( this is the standard unholy wave rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! An unholy wave rule ( this is the standard unholy wave rule ): [ R_1477 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'original n' = number t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = person t_4 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: say ~A wave of unholy energy is released, dealing [run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1271; ParaContent(); RunParagraphOn(); .L_Say891; .L_SayX826; ! phrase 2 ! [2: let n be the number of alive not undead persons in the location] t_0 = (Prop_344()) ; ! phrase 3 ! [3: let original n be n] t_1 = t_0; ! phrase 4 ! [4: if n is greater than 0 begin] if (((t_0 > 0))) { ! phrase 5 ! [5: repeat with guy running through all alive not undead persons in the location begin] for (t_2=Prop_345(0), t_3=Prop_345(t_2): t_2: t_2=t_3, t_3=Prop_345(t_3)) { ! phrase 6 ! [6: let m be a random number between 3 and 6] t_4 = R_DecimalNumber(3, 6) ; ! phrase 7 ! [7: decrease health of guy by m] WriteGProperty(9, t_2,p14_health,GProperty(9, t_2,p14_health) - t_4); ! phrase 8 ! [8: say ~[if n is 1 and original n is not 1]and [end if][m] damage to [the name of the guy][if guy is dead] (which is [bold type]lethal[roman type])[end if][roman type][if concentration of the guy is greater than 0 and guy is alive] (which breaks [possessive of the guy] concentration)[end if][if n is not 1]; [otherwise].[line break][end if][run paragraph on]~] say__p=1; if (~~(((((t_0 == 1))) && (((~~((t_1 == 1)))))))) jump L_Say892; ParaContent(); print (PrintText) SC_654; .L_Say892; .L_SayX827; ParaContent(); print (say__n=t_4); ParaContent(); print (PrintText) SC_1130; ParaContent(); (PHR_830_r63 (t_2)); if (~~(((((~~Adj_33_t1_v9(t_2))))))) jump L_Say893; ParaContent(); print (PrintText) SC_1131; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1132; ParaContent(); style roman; ParaContent(); print (PrintText) SC_275; .L_Say893; .L_SayX828; ParaContent(); style roman; if (~~(((((GProperty(9, t_2,p26_concentration) > 0))) && ((((Adj_33_t1_v9(t_2)))))))) jump L_Say894; ParaContent(); print (PrintText) SC_1133; ParaContent(); (PHR_940_r42 (t_2));ParaContent(); print (PrintText) SC_1134; .L_Say894; .L_SayX829; if (~~((((~~((t_0 == 1))))))) jump L_Say895; ParaContent(); print (PrintText) SC_1135; jump L_SayX830; .L_Say895; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; .L_Say896; .L_SayX830; ParaContent(); RunParagraphOn(); .L_Say897; .L_SayX831; ! phrase 9 ! [9: now concentration of the guy is 0] WriteGProperty(9, t_2,p26_concentration,0); ! phrase 10 ! [10: decrease n by 1] t_0 = t_0 - 1; ! phrase 11 ! [11: if n is 0 begin] if (((t_0 == 0))) { ! phrase 12 ! [12: say ~~] say__p=1;ParaContent(); print (PrintText) EMPTY_TEXT_VALUE; .L_Say898; .L_SayX832; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end repeat] } ! phrase 15 ! [15: otherwise] } else { ! phrase 16 ! [16: say ~no damage to anyone.~] say__p=1;ParaContent(); print (PrintText) SC_1272; new_line; .L_Say899; .L_SayX833; ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: if health of the player is less than 1 begin] if (((GProperty(9, player,p14_health) < 1))) { ! phrase 19 ! [19: end the game saying ~Your life force has been negated.~] deadflag=SC_1273; story_complete=false; ! phrase 20 ! [20: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Snorting (B535_check_snorting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check snorting a package of ment when hate is present: ! >>> I - Number of aspects constrained >>> ! Rule 2/2 ! Check snorting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check snorting a package of ment when hate is present: [ R_1538 ; if ( (actor==player) && ((noun ofclass K50_package_of_ment)) && (self=actor,true) && (((PHR_833_r16 ())))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1538, 1538); ! phrase 1 ! [1: unless player is hidden begin] if (~~((((Adj_221_t1_v9(player)))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~There is absolutely no way you could pull that off in a combat situation. The ment would get spilled everywhere.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1274; new_line; rtrue; .L_Say900; .L_SayX834; rtrue; ! phrase 4 ! [4: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1538, 1538, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Check snorting: [ R_1537 ; if (actor == player) { if (debug_rules) DB_Rule(R_1537, 1537); ! phrase 1 ! [1: if the noun is an essence begin] if (((noun ofclass K23_essence))) { ! phrase 2 ! [2: try inhaling the noun instead] TryAction(0, player, ##A98_inhaling, noun, 0);; rtrue; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if the noun is not a package of ment begin] if (((~~((noun ofclass K50_package_of_ment))))) { ! phrase 5 ! [5: take no time] (PHR_853_r33 ()); ! phrase 6 ! [6: say ~You cannot snort that.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1275; new_line; rtrue; .L_Say901; .L_SayX835; rtrue; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1537, 1537, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Snorting (B536_carry_out_snorting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out snorting a package of ment: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Carry out snorting a package of ment: [ R_1539 ; if ( (actor==player) && ((noun ofclass K50_package_of_ment))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1539, 1539); ! phrase 1 ! [1: if the ment addiction is 0 or at least three packages of ment are on-stage begin] if (((((Global_Vars-->96) == 0))) || ((Prop_346()))) { ! phrase 2 ! [2: say ~You take a small mirror, a razor and a straw from one of your pockets, and carefully cut the ment on the surface of the mirror. The light blue powder is looking very good. Using the straw, you manage to get almost all of it in your nose. You inhale sharply a few times -- and feel the ment do its awesome work.[paragraph break]Everything becomes clear, sharp, easy. You feel strong. You feel focused.~] say__p=1;ParaContent(); print (PrintText) SC_1276; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1277; new_line; .L_Say902; .L_SayX836; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~You repeat the ritual: cutting, forming into a line, snorting through the straw, inhaling sharply. The ment kicks in immediately.~] say__p=1;ParaContent(); print (PrintText) SC_1278; new_line; .L_Say903; .L_SayX837; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: have the ment kick in] (PHR_1540_r108 ()); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1539, 1539, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: extra scoring (B538_extra_scoring) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! An extra scoring rule ( this is the extra mood rule ): ! === which is equally specific with === ! Rule 2/2 ! An extra scoring rule ( this is the extra symbols in same room rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! An extra scoring rule ( this is the extra mood rule ): [ R_1668 ; ! phrase 1 ! [1: if mood of considered extra is mood of considered room begin] if (((GProperty(9, (Global_Vars-->115),p142_mood) == GProperty(9, (Global_Vars-->50),p142_mood)))) { ! phrase 2 ! [2: increase current room score by 2] (Global_Vars-->55) = (Global_Vars-->55) + 2; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if mood of considered extra is non-mood begin] if (((GProperty(9, (Global_Vars-->115),p142_mood) == I123_non_mood))) { ! phrase 5 ! [5: say ~BUG: forgot to set mood of [considered extra].~] say__p=1;ParaContent(); print (PrintText) SC_1117; ParaContent(); print (PrintShortName) (Global_Vars-->115); ParaContent(); print (PrintText) SC_310; new_line; .L_Say904; .L_SayX838; ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Scenery" by Victor Gijsbers ! An extra scoring rule ( this is the extra symbols in same room rule ): [ R_1678 ; ! phrase 1 ! [1: if considered extra is a symbol-extra begin] if ((((Global_Vars-->115) ofclass K52_symbol_extra))) { ! phrase 2 ! [2: if considered room encloses a symbol-extra begin] if ((Prop_347())) { ! phrase 3 ! [3: decrease current room score by 20] (Global_Vars-->55) = (Global_Vars-->55) - 20; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Piercing (B539_check_piercing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check piercing: ! === which is equally specific with === ! Rule 2/2 ! Check piercing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check piercing: [ R_1698 ; if (actor == player) { if (debug_rules) DB_Rule(R_1698, 1698); ! phrase 1 ! [1: if power of daggers is not granted begin] if (((~~(((Adj_158_t1_v9(I438_power_of_the_daggers))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not have that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1279; new_line; rtrue; .L_Say905; .L_SayX839; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1698, 1698, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check piercing: [ R_1699 ; if (actor == player) { if (debug_rules) DB_Rule(R_1699, 1699); ! phrase 1 ! [1: abide by the check attacking rules] if (ProcessRulebook(209)) rtrue; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1699, 1699, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Piercing (B540_carry_out_piercing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out piercing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out piercing: [ R_1700 t_0 ! Local variable e.g. 'n' = number ; if (actor == player) { if (debug_rules) DB_Rule(R_1700, 1700); ! phrase 1 ! [1: decrease the health of the player by 1] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - 1); ! phrase 2 ! [2: now the concentration of the player is 0] WriteGProperty(9, player,p26_concentration,0); ! phrase 3 ! [3: if player is not alive begin] if (((~~(((Adj_33_t1_v9(player))))))) { ! phrase 4 ! [4: say ~With a final effort, you manage to form part of your body into a dagger -- but you succumb from the exertion~] say__p=1;ParaContent(); print (PrintText) SC_1280; .L_Say906; .L_SayX840; ! phrase 5 ! [5: end the game saying ~You committed suicide.~] deadflag=SC_646; story_complete=false; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: let n be 8] t_0 = 8; ! phrase 8 ! [8: increase n by greatest power of the player] t_0 = t_0 + (PHR_1164_r109 ()); ! phrase 9 ! [9: increase n by greatest power of the player] t_0 = t_0 + (PHR_1164_r109 ()); ! phrase 10 ! [10: say ~You transform part of your own flesh into a magical dagger, which then speeds towards [the noun] of its own accord. [italic type][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1281; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1282; ParaContent(); style underline; ParaContent(); RunParagraphOn(); .L_Say907; .L_SayX841; ! phrase 11 ! [11: test the dexterity of the noun against n] (Resolver_30(noun,t_0,"source", 136)); ! phrase 12 ! [12: say ~[roman type] ~] say__p=1;ParaContent(); style roman; ParaContent(); print (PrintText) SC_209; .L_Say908; .L_SayX842; ! phrase 13 ! [13: if test result is true begin] if (((((Global_Vars-->78) && true) == (1 && true)))) { ! phrase 14 ! [14: say ~[The noun] manages to evade the dagger.~] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_1283; new_line; .L_Say909; .L_SayX843; ! phrase 15 ! [15: otherwise] } else { ! phrase 16 ! [16: decrease health of the noun by 1] WriteGProperty(OBJECT_TY, noun,p14_health,GProperty(OBJECT_TY, noun,p14_health) - 1); ! phrase 17 ! [17: say ~The dagger hits, dealing 1 damage and reducing [no dead property][the noun][dead property] to [health of the noun] health.~] say__p=1;ParaContent(); print (PrintText) SC_1284; ParaContent(); (PHR_828_r43 ());ParaContent(); print (the) noun; ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_443; ParaContent(); @push self; print (say__n=GProperty(OBJECT_TY, self=noun,p14_health)); @pull self; ParaContent(); print (PrintText) SC_987; new_line; .L_Say910; .L_SayX844; ! phrase 18 ! [18: now the attack damage is 1] (Global_Vars-->46) = 1; ! phrase 19 ! [19: now global attacker is the player] (Global_Vars-->41) = player; ! phrase 20 ! [20: now global defender is the noun] (Global_Vars-->42) = noun; if (~~((Global_Vars-->42) ofclass K8_person)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->42), "now global defender is the noun", "person");; ! phrase 21 ! [21: consider the aftereffects rules] ProcessRulebook(439); ! phrase 22 ! [22: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1700, 1700, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Armadillo-eating (B543_carry_out_armadillo_eat) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out the ravenous armadillo armadillo-eating: ! --- now the last-placed rules --- ! Rule 2/2 ! Last carry out the ravenous armadillo armadillo-eating: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the ravenous armadillo armadillo-eating: [ R_1729 t_0 ! Local variable e.g. 'item' = object t_1 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I442_ravenous_armadillo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1729, 1729); ! phrase 1 ! [1: let item be the armadillo food] t_0 = (PHR_1728_r110 ()); ! phrase 2 ! [2: if item is the ravenous armadillo begin] if (((t_0 == I442_ravenous_armadillo))) { ! phrase 3 ! [3: if the armadillo is visible and the location of the armadillo is the location of the player begin] if (((((Adj_3_t1_v9(I442_ravenous_armadillo))))) && ((( LocationOf(I442_ravenous_armadillo) == LocationOf(player) )))) { ! phrase 4 ! [4: say ~The armadillo sniffs along the ground, searching for food.~] say__p=1;ParaContent(); print (PrintText) SC_1285; new_line; .L_Say911; .L_SayX845; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: if the armadillo is visible and the location of the armadillo is the location of the player begin] if (((((Adj_3_t1_v9(I442_ravenous_armadillo))))) && ((( LocationOf(I442_ravenous_armadillo) == LocationOf(player) )))) { ! phrase 8 ! [8: say ~The armadillo gobbles up [the item].~] say__p=1;ParaContent(); print (PrintText) SC_1286; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say912; .L_SayX846; ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: let way be best route from location of player to location of ravenous armadillo] t_1 = MapRouteTo( LocationOf(player) , LocationOf(I442_ravenous_armadillo) ,0,0) ; ! phrase 11 ! [11: if way is a direction begin] if (((t_1 ofclass K3_direction))) { ! phrase 12 ! [12: say ~You hear a crunching noise [best route from location of player to location of ravenous armadillo].~] say__p=1;ParaContent(); print (PrintText) SC_1287; ParaContent(); print (PrintShortName) MapRouteTo( LocationOf(player) , LocationOf(I442_ravenous_armadillo) ,0,0) ; ParaContent(); print (PrintText) SC_310; new_line; .L_Say913; .L_SayX847; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: move item to the armadillo stomach] MoveObject(t_0, I444_armadillo_stomach, 0, false); ! phrase 16 ! [16: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1729, 1729, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Ugly Special Cases" by Victor Gijsbers ! Last carry out the ravenous armadillo armadillo-eating: [ R_2076 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I442_ravenous_armadillo) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2076, 2076); ! phrase 1 ! [1: if the armadillo food is drakul's lifeblood begin] if ((((PHR_1728_r110 ()) == I359_drakul_s_lifeblood))) { ! phrase 2 ! [2: remove drakul's lifeblood from play] RemoveFromPlay(I359_drakul_s_lifeblood); ! phrase 3 ! [3: if the ravenous armadillo is in the location begin] if (((real_location == ContainerOf(I442_ravenous_armadillo)))) { ! phrase 4 ! [4: say ~The armadillo suddenly becomes deathly pale!~] say__p=1;ParaContent(); print (PrintText) SC_1288; new_line; .L_Say914; .L_SayX848; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: now the printed name of the ravenous armadillo is ~vampire armadillo~] WriteGProperty(9, I442_ravenous_armadillo,short_name,SC_1289); ! phrase 7 ! [7: increase melee of ravenous armadillo by 1] WriteGProperty(9, I442_ravenous_armadillo,p18_melee,GProperty(9, I442_ravenous_armadillo,p18_melee) + 1); ! phrase 8 ! [8: decrease defence of ravenous armadillo by 2] WriteGProperty(9, I442_ravenous_armadillo,p19_defence,GProperty(9, I442_ravenous_armadillo,p19_defence) - 2); ! phrase 9 ! [9: increase willpower of ravenous armadillo by 2] WriteGProperty(9, I442_ravenous_armadillo,p35_willpower,GProperty(9, I442_ravenous_armadillo,p35_willpower) + 2); ! phrase 10 ! [10: now faction of ravenous armadillo is undead] WriteGProperty(9, I442_ravenous_armadillo,p111_faction,I158_undead); ! phrase 11 ! [11: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2076, 2076, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Scaling (B545_check_scaling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check scaling: ! === which is equally specific with === ! Rule 2/3 ! Check scaling: ! === which is equally specific with === ! Rule 3/3 ! Check scaling: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check scaling: [ R_1740 ; if (actor == player) { if (debug_rules) DB_Rule(R_1740, 1740); ! phrase 1 ! [1: if power of the armadillo is not granted begin] if (((~~(((Adj_158_t1_v9(I445_power_of_the_armadillo))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not possess that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1229; new_line; rtrue; .L_Say915; .L_SayX849; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1740, 1740, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check scaling: [ R_1741 ; if (actor == player) { if (debug_rules) DB_Rule(R_1741, 1741); ! phrase 1 ! [1: if the number understood is less than 1 begin] if (((parsed_number < 1))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You must choose a positive number.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1290; new_line; rtrue; .L_Say916; .L_SayX850; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1741, 1741, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check scaling: [ R_1742 ; if (actor == player) { if (debug_rules) DB_Rule(R_1742, 1742); ! phrase 1 ! [1: if the number understood is greater than the greatest power of the player begin] if (((parsed_number > (PHR_1164_r109 ())))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You are not powerful enough for that; the maximum level of scales you can use is [greatest power of the player].~ instead] say__p=1;ParaContent(); print (PrintText) SC_1291; ParaContent(); print (say__n=(PHR_1164_r109 ())); ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say917; .L_SayX851; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1742, 1742, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Scaling (B546_carry_out_scaling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out scaling: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out scaling: [ R_1743 t_0 ! Local variable e.g. 'n' = number ; if (actor == player) { if (debug_rules) DB_Rule(R_1743, 1743); ! phrase 1 ! [1: now the scales number is the number understood] (Global_Vars-->120) = parsed_number; ! phrase 2 ! [2: let n be a random number between 1 and the number understood] t_0 = R_DecimalNumber(1, parsed_number) ; ! phrase 3 ! [3: decrease the health of the player by n] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - t_0); ! phrase 4 ! [4: say ~Hard scales appear all over your body; the power drains [n] of your health.~] say__p=1;ParaContent(); print (PrintText) SC_1292; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_1293; new_line; .L_Say918; .L_SayX852; ! phrase 5 ! [5: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 6 ! [6: end the story saying ~That transformation was more than your body could handle.~] deadflag=SC_1294; story_complete=false; ! phrase 7 ! [7: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1743, 1743, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Stunning (B548_check_stunning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! First check stunning: ! --- now the mid-placed rules --- ! Rule 2/3 ! Check stunning ( this is the stun yourself rule ): ! === which is equally specific with === ! Rule 3/3 ! Check stunning: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! First check stunning: [ R_1750 ; if (actor == player) { if (debug_rules) DB_Rule(R_1750, 1750); ! phrase 1 ! [1: if power of miranda is not granted begin] if (((~~(((Adj_158_t1_v9(I450_power_of_miranda))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not have that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1279; new_line; rtrue; .L_Say919; .L_SayX853; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1750, 1750, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check stunning ( this is the stun yourself rule ): [ R_1751 ; if (actor == player) { if (debug_rules) DB_Rule(R_1751, 1751); ! phrase 1 ! [1: if the noun is the player begin] if (((noun == player))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You can't bring yourself to do it.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1295; new_line; rtrue; .L_Say920; .L_SayX854; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1751, 1751, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check stunning: [ R_1752 ; if (actor == player) { if (debug_rules) DB_Rule(R_1752, 1752); ! phrase 1 ! [1: abide by the check attacking rules] if (ProcessRulebook(209)) rtrue; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1752, 1752, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Stunning (B549_carry_out_stunning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor stunning: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out an actor stunning: [ R_1753 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1753, 1753); ! phrase 1 ! [1: now the actor is at-stun] (Adj_268_t2_v9(actor)); ! phrase 2 ! [2: try the actor attacking the noun instead] TryAction(0, actor, ##Attack, noun, 0);; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1753, 1753, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Golem-disarming (B552_carry_out_golem_disarmi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out a person golem-disarming: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out a person golem-disarming: [ R_1779 t_0 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor~=player) && (act_requester==nothing) && ((actor ofclass K8_person))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1779, 1779); ! phrase 1 ! [1: say ~[The chain golem] suddenly launches several of its chains in an attempt to grab [possessive of the noun] weapon. [italic type]~] say__p=1;ParaContent(); print (The) I451_chain_golem; ParaContent(); print (PrintText) SC_1296; ParaContent(); (Resolver_10(noun,"source", 883));ParaContent(); print (PrintText) SC_1297; ParaContent(); style underline; .L_Say921; .L_SayX855; ! phrase 2 ! [2: test the perception of the noun against 10] (Resolver_31(noun,10,"source", 884)); ! phrase 3 ! [3: if test result is true begin] if (((((Global_Vars-->78) && true) == (1 && true)))) { ! phrase 4 ! [4: say ~[roman type] [The noun] see[s] it coming in time, and manage[s] to keep the weapon out of the golem's reach.~] say__p=1;ParaContent(); style roman; ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_1298; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1299; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1300; new_line; .L_Say922; .L_SayX856; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: let x be a random readied weapon carried by the noun] t_0 = (Prop_348()) ; ! phrase 7 ! [7: say ~[roman type] [The noun] realise[s] what is happening only when it is too late, and a chain has already wrapped itself around [possessive of the noun] [X], pulls sharply, and sends the weapon flying across the room.~] say__p=1;ParaContent(); style roman; ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_1301; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1302; ParaContent(); (Resolver_10(noun,"source", 889));ParaContent(); print (PrintText) SC_209; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_1303; new_line; .L_Say923; .L_SayX857; ! phrase 8 ! [8: now x is not readied] (Adj_103_t3_v9(t_0)); ! phrase 9 ! [9: now a random natural weapon part of the noun is readied] (Adj_103_t2_v9( (Prop_349()) )); ! phrase 10 ! [10: move x to the location] MoveObject(t_0, real_location, 0, false); ! phrase 11 ! [11: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1779, 1779, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Lashing (B554_check_lashing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check lashing: ! === which is equally specific with === ! Rule 2/2 ! Check lashing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check lashing: [ R_1789 ; if (actor == player) { if (debug_rules) DB_Rule(R_1789, 1789); ! phrase 1 ! [1: if power of the chains is not granted begin] if (((~~(((Adj_158_t1_v9(I453_power_of_the_chains))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not possess that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1229; new_line; rtrue; .L_Say924; .L_SayX858; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1789, 1789, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check lashing: [ R_1790 ; if (actor == player) { if (debug_rules) DB_Rule(R_1790, 1790); ! phrase 1 ! [1: if the combat state of the actor is not at-react begin] if (((~~((GProperty(9, actor,p112_combat_state) == I97_at_react))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You can only lash as a reaction to an attack.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1304; new_line; rtrue; .L_Say925; .L_SayX859; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1790, 1790, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Lashing (B555_carry_out_lashing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out lashing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out lashing: [ R_1791 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(STORED_ACTION_TY,0,STORED_ACTION_TY); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_74(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_74 I7BASPL ct_0 ct_1 ! Used for table searches ; if (actor == player) { if (debug_rules) DB_Rule(R_1791, 1791); ! phrase 1 ! [1: choose a blank row in the table of delayed actions] ct_0 = T9_delayed_actions; ct_1 = TableBlankRow(ct_0); ! phrase 2 ! [2: now the action speed entry is a random number between 8 and 14] TableLookUpEntry(ct_0,118,ct_1,1, R_DecimalNumber(8, 14) ); ! phrase 3 ! [3: now the action entry is the action of the actor attacking the main actor] BlkValueCopy(TableLookUpEntry(ct_0,119,ct_1,5), TryAction(0, actor, ##Attack, (Global_Vars-->30), 0, STORED_ACTION_TY_Current((blockv_stack-->(I7BASPL+0)))) ); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1791, 1791, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Lashing (B556_report_lashing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report lashing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Report lashing: [ R_1792 ; if (actor == player) { if (debug_rules) DB_Rule(R_1792, 1792); ! phrase 1 ! [1: say ~You will attempt to strike swiftly, before you are hit.~] say__p=1;ParaContent(); print (PrintText) SC_1305; new_line; .L_Say926; .L_SayX860; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1792, 1792, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Reaping (B557_check_reaping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check reaping ( this is the need the Power of the Reaper rule ): ! === which is equally specific with === ! Rule 2/6 ! Check reaping ( this is the cannot reap the unseen rule ): ! === which is equally specific with === ! Rule 3/6 ! Check reaping ( this is the cannot reap the undead rule ): ! === which is equally specific with === ! Rule 4/6 ! Check reaping ( this is the cannot reap yourself rule ): ! === which is equally specific with === ! Rule 5/6 ! Check reaping ( this is the reaping a dead person rule ): ! === which is equally specific with === ! Rule 6/6 ! Check reaping ( this is the reaping with one health rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check reaping ( this is the need the Power of the Reaper rule ): [ R_1830 ; if (actor == player) { if (debug_rules) DB_Rule(R_1830, 1830); ! phrase 1 ! [1: unless power of the reaper is granted begin] if (~~((((Adj_158_t1_v9(I462_power_of_the_reaper)))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not have that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1279; new_line; rtrue; .L_Say927; .L_SayX861; rtrue; ! phrase 4 ! [4: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1830, 1830, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check reaping ( this is the cannot reap the unseen rule ): [ R_1831 ; if (actor == player) { if (debug_rules) DB_Rule(R_1831, 1831); ! phrase 1 ! [1: if the noun is not seen begin] if (((~~(((Adj_91_t1_v9(noun))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You have not yet seen [the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_1306; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say928; .L_SayX862; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1831, 1831, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check reaping ( this is the cannot reap the undead rule ): [ R_1832 ; if (actor == player) { if (debug_rules) DB_Rule(R_1832, 1832); ! phrase 1 ! [1: if the faction of the noun is undead begin] if (((GProperty(OBJECT_TY, noun,p111_faction) == I158_undead))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~The undead are no longer haunted by Death, so you cannot reap them.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1307; new_line; rtrue; .L_Say929; .L_SayX863; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1832, 1832, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check reaping ( this is the cannot reap yourself rule ): [ R_1833 ; if (actor == player) { if (debug_rules) DB_Rule(R_1833, 1833); ! phrase 1 ! [1: if the noun is the player begin] if (((noun == player))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You cannot do that to yourself.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1308; new_line; rtrue; .L_Say930; .L_SayX864; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1833, 1833, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check reaping ( this is the reaping a dead person rule ): [ R_1834 ; if (actor == player) { if (debug_rules) DB_Rule(R_1834, 1834); ! phrase 1 ! [1: if the noun is dead begin] if ((((~~Adj_33_t1_v9(noun))))) { ! phrase 2 ! [2: end the story saying ~Your dedication to Death went too far.~] deadflag=SC_1309; story_complete=false; ! phrase 3 ! [3: say ~You are instantly transported to the Land of the Dead, where [no dead property][the noun][dead property] currently resides.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1310; ParaContent(); (PHR_828_r43 ());ParaContent(); print (the) noun; ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_1311; new_line; rtrue; .L_Say931; .L_SayX865; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1834, 1834, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check reaping ( this is the reaping with one health rule ): [ R_1835 ; if (actor == player) { if (debug_rules) DB_Rule(R_1835, 1835); ! phrase 1 ! [1: if the health of the player is 1 begin] if (((GProperty(9, player,p14_health) == 1))) { ! phrase 2 ! [2: end the story saying ~Your dedication to Death went too far.~] deadflag=SC_1309; story_complete=false; ! phrase 3 ! [3: say ~You attempt to reap [the noun], but the strain is too much for your weak body.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1312; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1313; new_line; rtrue; .L_Say932; .L_SayX866; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1835, 1835, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Reaping (B558_carry_out_reaping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out reaping: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out reaping: [ R_1836 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = person ; if (actor == player) { if (debug_rules) DB_Rule(R_1836, 1836); ! phrase 1 ! [1: repeat with guy running through persons in the location begin] for (t_0=Prop_350(0), t_1=Prop_350(t_0): t_0: t_0=t_1, t_1=Prop_350(t_1)) { ! phrase 2 ! [2: now concentration of guy is 0] WriteGProperty(9, t_0,p26_concentration,0); ! phrase 3 ! [3: end repeat] } ! phrase 4 ! [4: decrease health of the player by greatest power of the player] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - (PHR_1164_r109 ())); ! phrase 5 ! [5: decrease permanent health of the player by greatest power of the player] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - (PHR_1164_r109 ())); ! phrase 6 ! [6: unless teleportation is impossible for the player begin] if (~~(((PHR_1179_r20 (player))))) { ! phrase 7 ! [7: let destination be the location of the noun] t_0 = LocationOf(noun) ; ! phrase 8 ! [8: say ~You live in the aging cells of an infant's face, and your voice can be heard in the silence after each heartbeat. Death attends on us always, and in his guise you find yourself poised to reap [the noun] --[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1314; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1315; ParaContent(); DivideParagraphPoint(); new_line; .L_Say933; .L_SayX867; ! phrase 9 ! [9: now retreat location is destination] (Global_Vars-->126) = t_0; if (~~((Global_Vars-->126) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->126), "now retreat location is destination", "room");; ! phrase 10 ! [10: move player to destination] MoveObject(player, t_0, 0, false); ! phrase 11 ! [11: now the take no time boolean is false] (Global_Vars-->34) = 0; ! phrase 12 ! [12: otherwise] } else { ! phrase 13 ! [13: say ~Something prevents you from teleporting.~] say__p=1;ParaContent(); print (PrintText) SC_1316; new_line; .L_Say934; .L_SayX868; ! phrase 14 ! [14: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1836, 1836, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Mindblasting (B561_carry_out_mindblasting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the mindslug mindblasting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the mindslug mindblasting: [ R_1842 t_0 ! Local variable e.g. 'n' = number ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I463_mindslug) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1842, 1842); ! phrase 1 ! [1: say ~The mindslug blasts [the global defender] with psionic energy. [italic type]~] say__p=1;ParaContent(); print (PrintText) SC_1317; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1318; ParaContent(); style underline; .L_Say935; .L_SayX869; ! phrase 2 ! [2: let n be 10] t_0 = 10; ! phrase 3 ! [3: increase n by concentration of the mindslug] t_0 = t_0 + GProperty(9, I463_mindslug,p26_concentration); ! phrase 4 ! [4: test the willpower of the global defender against n] (PHR_1136_r111 ((Global_Vars-->42),t_0)); ! phrase 5 ! [5: say ~[roman type]~] say__p=1;ParaContent(); style roman; .L_Say936; .L_SayX870; ! phrase 6 ! [6: if test result is true begin] if (((((Global_Vars-->78) && true) == (1 && true)))) { ! phrase 7 ! [7: say ~ [The global defender] resist[s] the mindslug's influence!~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1319; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1320; new_line; .L_Say937; .L_SayX871; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: decrease willpower of the global defender by 1] WriteGProperty(9, (Global_Vars-->42),p35_willpower,GProperty(9, (Global_Vars-->42),p35_willpower) - 1); ! phrase 10 ! [10: say ~ [The global defender] fail[s] to resist the mindslug's mental blast, and [possessive of the global defender] willpower decreases to [willpower of the global defender].~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1321; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1322; ParaContent(); (PHR_940_r42 ((Global_Vars-->42)));ParaContent(); print (PrintText) SC_1323; ParaContent(); @push self; print (say__n=GProperty(9, self=(Global_Vars-->42),p35_willpower)); @pull self; ParaContent(); print (PrintText) SC_310; new_line; .L_Say938; .L_SayX872; ! phrase 11 ! [11: if willpower of the global defender is less than 1 begin] if (((GProperty(9, (Global_Vars-->42),p35_willpower) < 1))) { ! phrase 12 ! [12: if the global defender is the player begin] if ((((Global_Vars-->42) == player))) { ! phrase 13 ! [13: end the game saying ~You will live on as the unquestioning slave of a giant slug.~] deadflag=SC_1324; story_complete=false; ! phrase 14 ! [14: otherwise] } else { ! phrase 15 ! [15: now the faction of the global defender is enslaved] WriteGProperty(9, (Global_Vars-->42),p111_faction,I465_enslaved); ! phrase 16 ! [16: say ~[The global defender] is now under the control of the mindslug.~] say__p=1;ParaContent(); print (The) (Global_Vars-->42); ParaContent(); print (PrintText) SC_1325; new_line; .L_Say939; .L_SayX873; ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: otherwise] } else { ! phrase 19 ! [19: if the concentration of the global defender is greater than 0 begin] if (((GProperty(9, (Global_Vars-->42),p26_concentration) > 0))) { ! phrase 20 ! [20: let the global defender lose concentration] (PHR_1016_r82 ((Global_Vars-->42))); ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: now the concentration of the mindslug is 0] WriteGProperty(9, I463_mindslug,p26_concentration,0); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1842, 1842, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Dominating (B563_check_dominating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check dominating ( this is the need the Power of the Mindslug rule ): ! === which is equally specific with === ! Rule 2/6 ! Check dominating ( this is the only dominate people rule ): ! === which is equally specific with === ! Rule 3/6 ! Check dominating ( this is the only dominate enemies rule ): ! === which is equally specific with === ! Rule 4/6 ! Check dominating ( this is the already dominating rule ): ! === which is equally specific with === ! Rule 5/6 ! Check dominating ( this is the cannot dominate the emotionless rule ): ! === which is equally specific with === ! Rule 6/6 ! Check dominating ( this is the dominated rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check dominating ( this is the need the Power of the Mindslug rule ): [ R_1877 ; if (actor == player) { if (debug_rules) DB_Rule(R_1877, 1877); ! phrase 1 ! [1: unless power of the mindslug is granted begin] if (~~((((Adj_158_t1_v9(I472_power_of_the_mindslug)))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not have that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1279; new_line; rtrue; .L_Say940; .L_SayX874; rtrue; ! phrase 4 ! [4: end unless] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1877, 1877, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check dominating ( this is the only dominate people rule ): [ R_1878 ; if (actor == player) { if (debug_rules) DB_Rule(R_1878, 1878); ! phrase 1 ! [1: if the noun is not a person begin] if (((~~((noun ofclass K8_person))))) { ! phrase 2 ! [2: say ~You spend some time trying to impress an inanimate object.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1326; new_line; rtrue; .L_Say941; .L_SayX875; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1878, 1878, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check dominating ( this is the only dominate enemies rule ): [ R_1879 ; if (actor == player) { if (debug_rules) DB_Rule(R_1879, 1879); ! phrase 1 ! [1: if the faction of the player does not hate the faction of the noun begin] if (((~~(((Relation_TestVtoV(GProperty(9, player,p111_faction),Rel_Record_67,GProperty(OBJECT_TY, noun,p111_faction),false))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You can only dominate enemies.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1327; new_line; rtrue; .L_Say942; .L_SayX876; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1879, 1879, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check dominating ( this is the already dominating rule ): [ R_1880 ; if (actor == player) { if (debug_rules) DB_Rule(R_1880, 1880); ! phrase 1 ! [1: if the player dominates the noun begin] if ((((Relation_TestVtoV(player,Rel_Record_83,noun,false))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You already dominate [the noun].~ instead] say__p=1;ParaContent(); print (PrintText) SC_1328; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; rtrue; .L_Say943; .L_SayX877; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1880, 1880, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check dominating ( this is the cannot dominate the emotionless rule ): [ R_1881 ; if (actor == player) { if (debug_rules) DB_Rule(R_1881, 1881); ! phrase 1 ! [1: if the noun is emotionless begin] if ((((Adj_147_t1_v9(noun))))) { ! phrase 2 ! [2: say ~You attempt to impress [the noun], but provoke no reaction at all.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1329; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1330; new_line; rtrue; .L_Say944; .L_SayX878; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1881, 1881, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check dominating ( this is the dominated rule ): [ R_1882 ; if (actor == player) { if (debug_rules) DB_Rule(R_1882, 1882); ! phrase 1 ! [1: if the noun dominates the player begin] if ((((Relation_TestVtoV(noun,Rel_Record_83,player,false))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You are too afraid of [the noun] to try that!~ instead] say__p=1;ParaContent(); print (PrintText) SC_1331; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1332; new_line; rtrue; .L_Say945; .L_SayX879; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1882, 1882, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Dominating (B564_carry_out_dominating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out dominating: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out dominating: [ R_1883 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number ; if (actor == player) { if (debug_rules) DB_Rule(R_1883, 1883); ! phrase 1 ! [1: let n be 50 times the health of the noun] t_0 = (50*GProperty(OBJECT_TY, noun,p14_health)) ; ! phrase 2 ! [2: now n is n divided by the health of the player] t_0 = (IntegerDivide(t_0,GProperty(9, player,p14_health))) ; ! phrase 3 ! [3: increase n by 5 times willpower of the noun] t_0 = t_0 + (5*GProperty(OBJECT_TY, noun,p35_willpower)) ; ! phrase 4 ! [4: decrease n by 5 times willpower of the player] t_0 = t_0 - (5*GProperty(9, player,p35_willpower)) ; ! phrase 5 ! [5: if n is less than 10 , now n is 10] if (((t_0 < 10))) { t_0 = 10; } ! phrase 6 ! [6: if n is greater than 90 , now n is 90] if (((t_0 > 90))) { t_0 = 90; } ! phrase 7 ! [7: let m be a random number between 1 and 100] t_1 = R_DecimalNumber(1, 100) ; ! phrase 8 ! [8: if m is greater than n begin] if (((t_1 > t_0))) { ! phrase 9 ! [9: say ~[The noun] cower[s] before your imposing presence.~] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_1333; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1334; new_line; .L_Say946; .L_SayX880; ! phrase 10 ! [10: now player dominates the noun] (Relation_NowVtoV(player,Rel_Record_83,noun,false)); ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~You attempt to dominate [the noun], but suddenly feel very afraid!~] say__p=1;ParaContent(); print (PrintText) SC_1335; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_1336; new_line; .L_Say947; .L_SayX881; ! phrase 13 ! [13: now noun dominates the player] (Relation_NowVtoV(noun,Rel_Record_83,player,false)); ! phrase 14 ! [14: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1883, 1883, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Tentacle-constricting (B567_carry_out_tentacle_cons) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the giant tentacle tentacle-constricting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the giant tentacle tentacle-constricting: [ R_1908 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number t_2 ! Local variable e.g. 'preventer' = object t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = clothing t_5 ! Local variable e.g. '?-1,-1?' = clothing ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I473_giant_tentacle) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1908, 1908); ! phrase 1 ! [1: increase constriction level by 1] (Global_Vars-->121) = (Global_Vars-->121) + 1; ! phrase 2 ! [2: let n be constriction level] t_0 = (Global_Vars-->121); ! phrase 3 ! [3: let m be 0] t_1 = 0; ! phrase 4 ! [4: let preventer be a random clothing] t_2 = (Prop_351()) ; ! phrase 5 ! [5: if the chosen target wears at least one constriction-preventing clothing begin] if ((Prop_352())) { ! phrase 6 ! [6: let i be 0] t_3 = 0; ! phrase 7 ! [7: repeat with item running through clothing worn by the chosen target begin] for (t_4=Prop_353(0), t_5=Prop_353(t_4): t_4: t_4=t_5, t_5=Prop_353(t_5)) { ! phrase 8 ! [8: increase m by constriction prevention of item] t_1 = t_1 + GProperty(9, t_4,p61_constriction_prevention); ! phrase 9 ! [9: unless i is greater than constriction prevention of item begin] if (~~(((t_3 > GProperty(9, t_4,p61_constriction_prevention))))) { ! phrase 10 ! [10: now preventer is item] t_2 = t_4; ! phrase 11 ! [11: end unless] } ! phrase 12 ! [12: now i is constriction prevention of item] t_3 = GProperty(9, t_4,p61_constriction_prevention); ! phrase 13 ! [13: end repeat] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: if n is greater than m begin] if (((t_0 > t_1))) { ! phrase 16 ! [16: decrease health of the chosen target by constriction level] WriteGProperty(9, (Global_Vars-->37),p14_health,GProperty(9, (Global_Vars-->37),p14_health) - (Global_Vars-->121)); ! phrase 17 ! [17: if m is greater than 0 begin] if (((t_1 > 0))) { ! phrase 18 ! [18: remove preventer from play] RemoveFromPlay(t_2); ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: say ~The giant tentacle tightens its muscles, dealing [bold type][constriction level] damage[roman type] to [the name of the chosen target].[if m is greater than 0] [The preventer] get[s] smashed in the process[end if]~] say__p=1;ParaContent(); print (PrintText) SC_1337; ParaContent(); style bold; ParaContent(); print (say__n=(Global_Vars-->121)); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_443; ParaContent(); (PHR_830_r63 ((Global_Vars-->37)));ParaContent(); print (PrintText) SC_310; new_line; if (~~((((t_1 > 0))))) jump L_Say948; ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) t_2; ParaContent(); print (PrintText) SC_1110; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1338; .L_Say948; .L_SayX882; .L_Say949; .L_SayX883; ! phrase 21 ! [21: if the chosen target is dead begin] if ((((~~Adj_33_t1_v9((Global_Vars-->37)))))) { ! phrase 22 ! [22: have an event of the giant tentacle killing the chosen target] (PHR_1126_r64 (I473_giant_tentacle,(Global_Vars-->37))); ! phrase 23 ! [23: end if] } ! phrase 24 ! [24: if the player is dead begin] if ((((~~Adj_33_t1_v9(player))))) { ! phrase 25 ! [25: end the story saying ~You suffocate in the tentacle's deadly embrace.~] deadflag=SC_1339; story_complete=false; ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: otherwise] } else { ! phrase 28 ! [28: say ~The giant tentacle tightens its muscles, but the [preventer] protect[s] [the chosen target] against the pressure.~] say__p=1;ParaContent(); print (PrintText) SC_1340; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_1341; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) (Global_Vars-->37); ParaContent(); print (PrintText) SC_1342; new_line; .L_Say950; .L_SayX884; ! phrase 29 ! [29: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1908, 1908, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Tentacle-shaking (B570_carry_out_tentacle_shak) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the giant tentacle tentacle-shaking: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the giant tentacle tentacle-shaking: [ R_1910 t_0 ! Local variable e.g. 'n' = number ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I473_giant_tentacle) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1910, 1910); ! phrase 1 ! [1: say ~The giant tentacle vigourously shakes [the main actor], aiming to confuse and confound.[italic type] ~] say__p=1;ParaContent(); print (PrintText) SC_1343; ParaContent(); print (the) (Global_Vars-->30); ParaContent(); print (PrintText) SC_1344; ParaContent(); style underline; ParaContent(); print (PrintText) SC_209; .L_Say951; .L_SayX885; ! phrase 2 ! [2: let n be 9 + concentration of the giant tentacle] t_0 = (9+GProperty(9, I473_giant_tentacle,p26_concentration)) ; ! phrase 3 ! [3: test the willpower of the main actor against n] (PHR_1136_r111 ((Global_Vars-->30),t_0)); ! phrase 4 ! [4: say ~[roman type]~] say__p=1;ParaContent(); style roman; .L_Say952; .L_SayX886; ! phrase 5 ! [5: if test result is true begin] if (((((Global_Vars-->78) && true) == (1 && true)))) { ! phrase 6 ! [6: say ~ [The main actor] remain[s] [if the concentration of the main actor is greater than 0]concentrated[otherwise]sharp[end if].~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->30); ParaContent(); print (PrintText) SC_1345; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; if (~~((((GProperty(9, (Global_Vars-->30),p26_concentration) > 0))))) jump L_Say953; ParaContent(); print (PrintText) SC_1346; jump L_SayX887; .L_Say953; ParaContent(); print (PrintText) SC_1347; .L_Say954; .L_SayX887; ParaContent(); print (PrintText) SC_310; new_line; .L_Say955; .L_SayX888; ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: say ~ [The main actor] [is-are] confused.~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->30); ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_885_r49 ());ParaContent(); print (PrintText) SC_1348; new_line; .L_Say956; .L_SayX889; ! phrase 9 ! [9: now the main actor is tentacle-confused] (Adj_272_t2_v9((Global_Vars-->30))); ! phrase 10 ! [10: if the concentration of the main actor is greater than 0 begin] if (((GProperty(9, (Global_Vars-->30),p26_concentration) > 0))) { ! phrase 11 ! [11: let the main actor lose concentration] (PHR_1016_r82 ((Global_Vars-->30))); ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1910, 1910, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Confusing (B572_check_confusing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check confusing: ! === which is equally specific with === ! Rule 2/2 ! Check confusing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check confusing: [ R_1922 ; if (actor == player) { if (debug_rules) DB_Rule(R_1922, 1922); ! phrase 1 ! [1: if power of the tentacle is not granted begin] if (((~~(((Adj_158_t1_v9(I475_power_of_the_tentacle))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not possess that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1229; new_line; rtrue; .L_Say957; .L_SayX890; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1922, 1922, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check confusing: [ R_1923 ; if (actor == player) { if (debug_rules) DB_Rule(R_1923, 1923); ! phrase 1 ! [1: if the combat state of the actor is not at-react begin] if (((~~((GProperty(9, actor,p112_combat_state) == I97_at_react))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You can only confuse as a reaction to an attack.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1349; new_line; rtrue; .L_Say958; .L_SayX891; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1923, 1923, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Confusing (B573_carry_out_confusing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out confusing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out confusing: [ R_1924 t_0 ! Local variable e.g. 'n' = number ; if (actor == player) { if (debug_rules) DB_Rule(R_1924, 1924); ! phrase 1 ! [1: say ~A tentacle suddenly leaps out of your body and shakes [the main actor], aiming to confuse and confound.[italic type] ~] say__p=1;ParaContent(); print (PrintText) SC_1350; ParaContent(); print (the) (Global_Vars-->30); ParaContent(); print (PrintText) SC_1344; ParaContent(); style underline; ParaContent(); print (PrintText) SC_209; .L_Say959; .L_SayX892; ! phrase 2 ! [2: let n be a random number between 7 and 12] t_0 = R_DecimalNumber(7, 12) ; ! phrase 3 ! [3: if a random chance of 1 in 7 succeeds begin] if (( (GenerateRandomNumber(1, 7) <= 1) )) { ! phrase 4 ! [4: increase n by 3] t_0 = t_0 + 3; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: if a random chance of 1 in 10 succeeds begin] if (( (GenerateRandomNumber(1, 10) <= 1) )) { ! phrase 7 ! [7: increase n by 10] t_0 = t_0 + 10; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: test the willpower of the main actor against n] (PHR_1136_r111 ((Global_Vars-->30),t_0)); ! phrase 10 ! [10: say ~[roman type]~] say__p=1;ParaContent(); style roman; .L_Say960; .L_SayX893; ! phrase 11 ! [11: if test result is true begin] if (((((Global_Vars-->78) && true) == (1 && true)))) { ! phrase 12 ! [12: say ~ [The main actor] remain[s] [if the concentration of the main actor is greater than 0]concentrated[otherwise]sharp[end if].~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->30); ParaContent(); print (PrintText) SC_1345; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; if (~~((((GProperty(9, (Global_Vars-->30),p26_concentration) > 0))))) jump L_Say961; ParaContent(); print (PrintText) SC_1346; jump L_SayX894; .L_Say961; ParaContent(); print (PrintText) SC_1347; .L_Say962; .L_SayX894; ParaContent(); print (PrintText) SC_310; new_line; .L_Say963; .L_SayX895; ! phrase 13 ! [13: otherwise] } else { ! phrase 14 ! [14: say ~ [The main actor] [is-are] confused.~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) (Global_Vars-->30); ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_885_r49 ());ParaContent(); print (PrintText) SC_1348; new_line; .L_Say964; .L_SayX896; ! phrase 15 ! [15: now the main actor is tentacle-confused] (Adj_272_t2_v9((Global_Vars-->30))); ! phrase 16 ! [16: if the concentration of the main actor is greater than 0 begin] if (((GProperty(9, (Global_Vars-->30),p26_concentration) > 0))) { ! phrase 17 ! [17: let the main actor lose concentration] (PHR_1016_r82 ((Global_Vars-->30))); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1924, 1924, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Bodmall-fogging (B576_carry_out_bodmall_foggi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out Bodmall Bodmall-fogging: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out Bodmall Bodmall-fogging: [ R_1954 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I488_bodmall) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1954, 1954); ! phrase 1 ! [1: say ~Bodmall chants softly, and great [bold type]clouds of fog[roman type] or smoke rise up from the ground.~] say__p=1;ParaContent(); print (PrintText) SC_1351; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1352; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1353; new_line; .L_Say965; .L_SayX897; ! phrase 2 ! [2: now smoke timer of the location of bodmall is a random number between 5 and 12] WriteGProperty(9, LocationOf(I488_bodmall) ,p54_smoke_timer, R_DecimalNumber(5, 12) ); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1954, 1954, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Bodmall-transmuting (B579_carry_out_bodmall_trans) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out Bodmall Bodmall-transmuting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out Bodmall Bodmall-transmuting: [ R_1956 t_0 ! Local variable e.g. 'X' = object ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I488_bodmall) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1956, 1956); ! phrase 1 ! [1: let x be a random readied weapon enclosed by the chosen target] t_0 = (Prop_354()) ; ! phrase 2 ! [2: if x is iron or x is silver begin] if ((((t_0.p180_material == I166_iron))) || (((t_0.p180_material == I167_silver)))) { ! phrase 3 ! [3: if x resists bodmall transmutation begin] if ((Resolver_32(t_0,"source", 2247))) { ! phrase 4 ! [4: say ~Bodmall screams several harsh syllables and points at [the X]. Nothing happens.~] say__p=1;ParaContent(); print (PrintText) SC_1354; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_1355; new_line; .L_Say966; .L_SayX898; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~Bodmall screams several harsh syllables and points at [the X]. It immediately [bold type]turns to wood[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1354; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_1356; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1357; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say967; .L_SayX899; ! phrase 7 ! [7: now x is wood] t_0.p180_material = I170_wood; ! phrase 8 ! [8: now x is not rusted] (Adj_205_t3_v9(t_0)); ! phrase 9 ! [9: now damage die of x is damage die of x divided by 2] WriteGProperty(OBJECT_TY, t_0,p20_damage_die, (IntegerDivide(GProperty(OBJECT_TY, t_0,p20_damage_die),2)) ); ! phrase 10 ! [10: decrease weapon attack bonus of x by 2] WriteGProperty(OBJECT_TY, t_0,p25_weapon_attack_bonus,GProperty(OBJECT_TY, t_0,p25_weapon_attack_bonus) - 2); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: otherwise] } else { ! phrase 13 ! [13: say ~Bodmall chants softly.~] say__p=1;ParaContent(); print (PrintText) SC_1358; new_line; .L_Say968; .L_SayX900; ! phrase 14 ! [14: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1956, 1956, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Bodmall-barkskinning (B582_carry_out_bodmall_barks) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out Bodmall Bodmall-barkskinning: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out Bodmall Bodmall-barkskinning: [ R_1959 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I488_bodmall) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1959, 1959); ! phrase 1 ! [1: say ~Bodmall chants loudly, and her [bold type]skin[roman type] transforms and toughens. It now looks like the bark of a tree.~] say__p=1;ParaContent(); print (PrintText) SC_1359; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1360; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1361; new_line; .L_Say969; .L_SayX901; ! phrase 2 ! [2: now bodmall is barkskinned] (Adj_273_t2_v9(I488_bodmall)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1959, 1959, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Bodmall-summoning (B585_carry_out_bodmall_summo) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out Bodmall Bodmall-summoning: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out Bodmall Bodmall-summoning: [ R_1968 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I488_bodmall) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1968, 1968); ! phrase 1 ! [1: say ~Bodmall makes several complicated gestures, and [bold type]huge thorny bushes[roman type] come out of the ground everywhere around you!~] say__p=1;ParaContent(); print (PrintText) SC_1362; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1363; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1364; new_line; .L_Say970; .L_SayX902; ! phrase 2 ! [2: move thorny bushes to the location] MoveObject(I491_thorny_bushes, real_location, 0, false); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1968, 1968, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Summoning thorns (B587_check_summoning_thorns) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check summoning thorns: ! === which is equally specific with === ! Rule 2/2 ! Check summoning thorns: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check summoning thorns: [ R_1976 ; if (actor == player) { if (debug_rules) DB_Rule(R_1976, 1976); ! phrase 1 ! [1: if power of bodmall is not granted begin] if (((~~(((Adj_158_t1_v9(I492_power_of_bodmall))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You do not possess that power.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1229; new_line; rtrue; .L_Say971; .L_SayX903; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1976, 1976, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Check summoning thorns: [ R_1977 ; if (actor == player) { if (debug_rules) DB_Rule(R_1977, 1977); ! phrase 1 ! [1: if the thorny bushes are in the location begin] if (((real_location == ContainerOf(I491_thorny_bushes)))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~The thorny bushes are already here.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1365; new_line; rtrue; .L_Say972; .L_SayX904; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1977, 1977, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Summoning thorns (B588_carry_out_summoning_tho) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out summoning thorns: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out summoning thorns: [ R_1978 ; if (actor == player) { if (debug_rules) DB_Rule(R_1978, 1978); ! phrase 1 ! [1: say ~You speak the ancient syllables, and bushes full of thorns grow out of the ground!~] say__p=1;ParaContent(); print (PrintText) SC_1366; new_line; .L_Say973; .L_SayX905; ! phrase 2 ! [2: move thorny bushes to the location] MoveObject(I491_thorny_bushes, real_location, 0, false); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1978, 1978, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Unghouling (B591_carry_out_unghouling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out Malygris unghouling: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out Malygris unghouling: [ R_1985 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I493_malygris) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1985, 1985); ! phrase 1 ! [1: say ~As Malygris casts a complex spell, and you feel your flesh [bold type]returning to normal[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1367; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1368; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say974; .L_SayX906; ! phrase 2 ! [2: unghoulify the player] (PHR_1275_r113 ()); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1985, 1985, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Aswang-shifting (B594_carry_out_aswang_shifti) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the aswang aswang-shifting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the aswang aswang-shifting: [ R_2022 ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I513_aswang) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2022, 2022); ! phrase 1 ! [1: while considered-shape is as-shape of the aswang begin] while ((((Global_Vars-->124) == GProperty(9, I513_aswang,p242_as_shape)))) { ! phrase 2 ! [2: now considered-shape is a random as-shape] (Global_Vars-->124) = R_T108() ; ! phrase 3 ! [3: end while] } ! phrase 4 ! [4: say ~The aswang suddenly transforms into [bold type][if considered-shape is as-witch]an ugly witch[otherwise if considered-shape is as-dog]a bloodthirsty dog[otherwise]an owl-like bird with devilish wings[end if][roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1369; ParaContent(); style bold; if (~~(((((Global_Vars-->124) == I510_as_witch))))) jump L_Say975; ParaContent(); print (PrintText) SC_1370; ParaContent(); jump L_SayX907; .L_Say975; if (~~(((((Global_Vars-->124) == I512_as_dog))))) jump L_Say976; ParaContent(); print (PrintText) SC_1371; jump L_SayX907; .L_Say976; ParaContent(); print (PrintText) SC_1372; .L_Say977; .L_SayX907; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say978; .L_SayX908; ! phrase 5 ! [5: if the as-shape of aswang is as-dog begin] if (((GProperty(9, I513_aswang,p242_as_shape) == I512_as_dog))) { ! phrase 6 ! [6: transform away from dog] (PHR_2024_r114 ()); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if the as-shape of aswang is as-bird begin] if (((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))) { ! phrase 9 ! [9: transform away from bird] (PHR_2026_r115 ()); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if the considered-shape is as-dog begin] if ((((Global_Vars-->124) == I512_as_dog))) { ! phrase 12 ! [12: transform to dog] (PHR_2023_r116 ()); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: if the considered-shape is as-bird begin] if ((((Global_Vars-->124) == I511_as_bird))) { ! phrase 15 ! [15: transform to bird] (PHR_2025_r117 ()); ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: now as-shape of aswang is considered-shape] WriteGProperty(9, I513_aswang,p242_as_shape,(Global_Vars-->124)); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2022, 2022, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Aswang-hexing (B597_carry_out_aswang_hexing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the aswang aswang-hexing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the aswang aswang-hexing: [ R_2028 t_0 ! Local variable e.g. 'n' = number ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I513_aswang) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2028, 2028); ! phrase 1 ! [1: say ~The aswang attempts to hex [the chosen target]. [italic type]~] say__p=1;ParaContent(); print (PrintText) SC_1373; ParaContent(); print (the) (Global_Vars-->37); ParaContent(); print (PrintText) SC_506; ParaContent(); style underline; .L_Say979; .L_SayX909; ! phrase 2 ! [2: let n be 11 + concentration of the aswang] t_0 = (11+GProperty(9, I513_aswang,p26_concentration)) ; ! phrase 3 ! [3: test the willpower of the chosen target against n] (PHR_1136_r111 ((Global_Vars-->37),t_0)); ! phrase 4 ! [4: if test result is false begin] if (((((Global_Vars-->78) && true) == (0 && true)))) { ! phrase 5 ! [5: say ~ [roman type][The chosen target] [is-are] now [bold type]hexed[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); style roman; ParaContent(); print (The) (Global_Vars-->37); ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_885_r49 ());ParaContent(); print (PrintText) SC_1374; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1375; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say980; .L_SayX910; ! phrase 6 ! [6: now global defender is hexed] (Adj_278_t2_v9((Global_Vars-->42))); ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: say ~ [roman type][The chosen target] [bold type]resist[s] the hex[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); style roman; ParaContent(); print (The) (Global_Vars-->37); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1376; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_1377; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say981; .L_SayX911; ! phrase 9 ! [9: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2028, 2028, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Aswang-fleeing (B600_carry_out_aswang_fleein) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the aswang aswang-fleeing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the aswang aswang-fleeing: [ R_2034 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = object ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I513_aswang) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2034, 2034); ! phrase 1 ! [1: if at least one room is adjacent to the location begin] if ((Prop_355())) { ! phrase 2 ! [2: let place be a random room adjacent to the location] t_0 = (Prop_356()) ; ! phrase 3 ! [3: if place is retreat location begin] if (((t_0 == (Global_Vars-->126)))) { ! phrase 4 ! [4: let place be a random room adjacent to the location] t_0 = (Prop_357()) ; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: let way be the direction from the location of the aswang to place] t_1 = (Resolver_0( LocationOf(I513_aswang) ,t_0,"source", 2994)); ! phrase 7 ! [7: say ~The aswang flies up in the air and flees [way].~] say__p=1;ParaContent(); print (PrintText) SC_1378; ParaContent(); print (PrintShortName) t_1; ParaContent(); print (PrintText) SC_310; new_line; .L_Say982; .L_SayX912; ! phrase 8 ! [8: move aswang to place] MoveObject(I513_aswang, t_0, 0, false); ! phrase 9 ! [9: now aswang is not follower] (Adj_172_t3_v9(I513_aswang)); ! phrase 10 ! [10: otherwise] } else { ! phrase 11 ! [11: say ~The aswang searches for a way to flee, but finds none.~] say__p=1;ParaContent(); print (PrintText) SC_1379; new_line; .L_Say983; .L_SayX913; ! phrase 12 ! [12: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2034, 2034, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Pulsating (B603_carry_out_pulsating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the abyss of the soul pulsating: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the abyss of the soul pulsating: [ R_2044 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_75(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_75 I7BASPL t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'lijst' = list of people t_2 ! Local variable e.g. 'dodenlijst' = list of people t_3 ! Local variable e.g. 'achieve-temp' = number t_4 ! Local variable e.g. '?-1,-1?' = person t_5 ! Local variable e.g. '?-1,-1?' = number ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I515_abyss_of_the_soul) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2044, 2044); ! phrase 1 ! [1: let n be a random number between 1 and the abyss of the soul strength] t_0 = R_DecimalNumber(1, (Global_Vars-->125)) ; ! phrase 2 ! [2: let lijst be a list of person] t_1 = (blockv_stack-->(I7BASPL+0)); ! phrase 3 ! [3: let dodenlijst be a list of persons] t_2 = (blockv_stack-->(I7BASPL+1)); ! phrase 4 ! [4: let achieve-temp be 0] t_3 = 0; ! phrase 5 ! [5: repeat with guy running through alive persons in the location begin] for (t_4=Prop_358(0), t_5=Prop_358(t_4): t_4: t_4=t_5, t_5=Prop_358(t_5)) { ! phrase 6 ! [6: unless guy is undead begin] if (~~(((t_4.p111_faction == I158_undead)))) { ! phrase 7 ! [7: add guy to lijst] LIST_OF_TY_InsertItem(t_1, t_4, 0, 0, 0); ! phrase 8 ! [8: decrease health of guy by n] WriteGProperty(9, t_4,p14_health,GProperty(9, t_4,p14_health) - t_0); ! phrase 9 ! [9: if guy is dead begin] if ((((~~Adj_33_t1_v9(t_4))))) { ! phrase 10 ! [10: add guy to dodenlijst] LIST_OF_TY_InsertItem(t_2, t_4, 0, 0, 0); ! phrase 11 ! [11: if the player is undead begin] if (((player.p111_faction == I158_undead))) { ! phrase 12 ! [12: now achieve-temp is 1] t_3 = 1; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end unless] } ! phrase 16 ! [16: end repeat] } ! phrase 17 ! [17: say ~[no dead property]The abyss of the soul pulsates, [unless lijst is empty]sending out a wave of negative energy that deals [bold type][n] damage[roman type] to [lijst with definite articles][otherwise]but its negative energy dissipates harmlessly[end if][unless dodenlijst is empty], killing [dodenlijst with definite articles][end if][dead property].~] say__p=1;ParaContent(); (PHR_828_r43 ());ParaContent(); print (PrintText) SC_1380; if (((((Adj_16_t1_v30(t_1)))))) jump L_Say984; ParaContent(); print (PrintText) SC_1381; ParaContent(); style bold; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_443; ParaContent(); LIST_OF_TY_Say(t_1, 2); jump L_SayX914; .L_Say984; ParaContent(); print (PrintText) SC_1382; .L_Say985; .L_SayX914; if (((((Adj_16_t1_v30(t_2)))))) jump L_Say986; ParaContent(); print (PrintText) SC_1383; ParaContent(); LIST_OF_TY_Say(t_2, 2); .L_Say986; .L_SayX915; ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_310; new_line; .L_Say987; .L_SayX916; ! phrase 18 ! [18: unless dodenlijst is empty begin] if (~~((((Adj_16_t1_v30(t_2)))))) { ! phrase 19 ! [19: repeat with guy running through dodenlijst begin] for (t_5=1, t_4=LIST_OF_TY_GetItem(t_2, t_5, true): t_5<=LIST_OF_TY_GetLength(t_2): t_5++, t_4=LIST_OF_TY_GetItem(t_2, t_5, true)) { ! phrase 20 ! [20: have an event of the abyss of the soul killing guy] (PHR_1126_r64 (I515_abyss_of_the_soul,t_4)); ! phrase 21 ! [21: end repeat] } ! phrase 22 ! [22: end unless] } ! phrase 23 ! [23: if the player is dead , end the story saying ~Your soul descends into the darkest abyss.~] if ((((~~Adj_33_t1_v9(player))))) { deadflag=SC_1384; story_complete=false; } ! phrase 24 ! [24: if achieve-temp is 1 begin] if (((t_3 == 1))) { ! phrase 25 ! [25: award achievement i return to serve] (PHR_2161_r13 (I535_i_return_to_serve)); ! phrase 26 ! [26: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2044, 2044, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Imping (B606_carry_out_imping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the imp imping: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the imp imping: [ R_2061 t_0 ! Local variable e.g. '?-1,-1?' = number ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I519_imp) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2061, 2061); ! phrase 1 ! [1: say ~TEST: [combat state of the imp].~] say__p=1;ParaContent(); print (PrintText) SC_1385; ParaContent(); @push self; print (T60) GProperty(9, self=I519_imp,p112_combat_state); @pull self; ParaContent(); print (PrintText) SC_310; new_line; .L_Say988; .L_SayX917; ! phrase 2 ! [2: if the combat state of the imp is at-react begin] if (((GProperty(9, I519_imp,p112_combat_state) == I97_at_react))) { ! phrase 3 ! [3: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 4 ! [4: try the imp teleporting instead] TryAction(0, I519_imp, ##A94_teleporting, 0, 0);; rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: try the imp dodging instead] TryAction(0, I519_imp, ##A90_dodging, 0, 0);; rtrue; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: if the combat state of the imp is at-act begin] if (((GProperty(9, I519_imp,p112_combat_state) == I96_at_act))) { ! phrase 10 ! [10: let n be a random number between 1 and 3] t_0 = R_DecimalNumber(1, 3) ; ! phrase 11 ! [11: if n is 1 begin] if (((t_0 == 1))) { ! phrase 12 ! [12: try the imp teleporting instead] TryAction(0, I519_imp, ##A94_teleporting, 0, 0);; rtrue; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: if n is 2 begin] if (((t_0 == 2))) { ! phrase 15 ! [15: try the imp imp-grabbing instead] TryAction(0, I519_imp, ##A127_imp_grabbing, 0, 0);; rtrue; ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: if n is 3 begin] if (((t_0 == 3))) { ! phrase 18 ! [18: if the location of the imp is the location of the player begin] if ((( LocationOf(I519_imp) == LocationOf(player) ))) { ! phrase 19 ! [19: say ~The imp cackles in a loud, shrieking voice.~] say__p=1;ParaContent(); print (PrintText) SC_1386; new_line; .L_Say989; .L_SayX918; ! phrase 20 ! [20: end if] } ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2061, 2061, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Imp-grabbing (B609_carry_out_imp_grabbing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out the imp imp-grabbing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Carry out the imp imp-grabbing: [ R_2062 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD4_list_of_things); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_76(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_76 I7BASPL t_0 ! Local variable e.g. 'lijst' = list of things t_1 ! Local variable e.g. '?-1,-1?' = object t_2 ! Local variable e.g. '?-1,-1?' = thing ; if ( (actor~=player) && (act_requester==nothing) && ((actor == I519_imp) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2062, 2062); ! phrase 1 ! [1: let lijst be a list of things] t_0 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: repeat with item running through things carried by the player begin] for (t_1=Prop_359(0), t_2=Prop_359(t_1): t_1: t_1=t_2, t_2=Prop_359(t_2)) { ! phrase 3 ! [3: if item is not readied and item is not worn begin] if ((((~~(((Adj_103_t1_v9(t_1))))))) && (((~~(((Adj_0_t1_v9(t_1)))))))) { ! phrase 4 ! [4: add item to lijst] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end repeat] } ! phrase 7 ! [7: repeat with item running through things in the location begin] for (t_1=Prop_360(0), t_2=Prop_360(t_1): t_1: t_1=t_2, t_2=Prop_360(t_2)) { ! phrase 8 ! [8: if item is not a person and item is not fixed in place and item is not scenery and item is not readied and item is not worn begin] if ((((~~((t_1 ofclass K8_person))))) && ((((~~(((Adj_62_t1_v9(t_1))))))) && ((((~~(((Adj_64_t1_v9(t_1))))))) && ((((~~(((Adj_103_t1_v9(t_1))))))) && (((~~(((Adj_0_t1_v9(t_1))))))))))) { ! phrase 9 ! [9: add item to lijst] LIST_OF_TY_InsertItem(t_0, t_1, 0, 0, 0); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end repeat] } ! phrase 12 ! [12: unless lijst is empty begin] if (~~((((Adj_16_t1_v30(t_0)))))) { ! phrase 13 ! [13: sort lijst in random order] LIST_OF_TY_Sort(t_0, 2); ! phrase 14 ! [14: let item be entry 1 in lijst] t_1 = LIST_OF_TY_GetItem(t_0,1); ! phrase 15 ! [15: say ~The imp [bold type]grabs [the item][roman type] with its thieving little claws.~] say__p=1;ParaContent(); print (PrintText) SC_1387; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1388; ParaContent(); print (the) t_1; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1389; new_line; .L_Say990; .L_SayX919; ! phrase 16 ! [16: move item to imp] MoveObject(t_1, I519_imp, 0, false); ! phrase 17 ! [17: end unless] } ! phrase 18 ! [18: if lijst is empty begin] if ((((Adj_16_t1_v30(t_0))))) { ! phrase 19 ! [19: try the imp teleporting instead] TryAction(0, I519_imp, ##A94_teleporting, 0, 0);; rtrue; ! phrase 20 ! [20: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2062, 2062, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Retreating (B611_check_retreating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! Check retreating ( this is the cannot retreat when no retreat location rule ): ! === which is equally specific with === ! Rule 2/5 ! Check retreating ( this is the cannot retreat when in the retreat location rule ): ! === which is equally specific with === ! Rule 3/5 ! Check retreating ( this is the cannot retreat when there are no enemies rule ): ! === which is equally specific with === ! Rule 4/5 ! Check retreating ( this is the cannot retreat as reaction rule ): ! --- now the last-placed rules --- ! Rule 5/5 ! Last check retreating ( this is the do not retreat when enraged rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check retreating ( this is the cannot retreat when no retreat location rule ): [ R_2078 ; if (actor == player) { if (debug_rules) DB_Rule(R_2078, 2078); ! phrase 1 ! [1: if the retreat location is nothing begin] if ((((Global_Vars-->126) == nothing))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~There is nowhere to retreat to.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1390; new_line; rtrue; .L_Say991; .L_SayX920; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2078, 2078, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check retreating ( this is the cannot retreat when in the retreat location rule ): [ R_2079 ; if (actor == player) { if (debug_rules) DB_Rule(R_2079, 2079); ! phrase 1 ! [1: if the retreat location is the location begin] if ((((Global_Vars-->126) == real_location))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~There is nowhere to retreat to.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1390; new_line; rtrue; .L_Say992; .L_SayX921; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2079, 2079, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check retreating ( this is the cannot retreat when there are no enemies rule ): [ R_2080 ; if (actor == player) { if (debug_rules) DB_Rule(R_2080, 2080); ! phrase 1 ! [1: if not hate is present begin] if (~~(((PHR_833_r16 ())))) { ! phrase 2 ! [2: say ~There's nothing here to retreat from.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1391; new_line; rtrue; .L_Say993; .L_SayX922; rtrue; ! phrase 3 ! [3: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2080, 2080, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check retreating ( this is the cannot retreat as reaction rule ): [ R_2081 ; if (actor == player) { if (debug_rules) DB_Rule(R_2081, 2081); ! phrase 1 ! [1: if the combat state of the player is not at-act begin] if (((~~((GProperty(9, player,p112_combat_state) == I96_at_act))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You cannot retreat as a reaction--try to survive and run away on your own turn.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1392; new_line; rtrue; .L_Say994; .L_SayX923; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2081, 2081, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Last check retreating ( this is the do not retreat when enraged rule ): [ R_1409 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ; if (actor == player) { if (debug_rules) DB_Rule(R_1409, 1409); ! phrase 1 ! [1: if hate is present and the player is enraged begin] if ((((PHR_833_r16 ()))) && ((((Adj_262_t1_v9(player)))))) { ! phrase 2 ! [2: let y be the player] t_0 = player; ! phrase 3 ! [3: repeat with x running through persons in the location begin] for (t_1=Prop_361(0), t_2=Prop_361(t_1): t_1: t_1=t_2, t_2=Prop_361(t_2)) { ! phrase 4 ! [4: if the faction of x hates the faction of the player begin] if ((((Relation_TestVtoV(GProperty(9, t_1,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))) { ! phrase 5 ! [5: now y is x] t_0 = t_1; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: take no time] (PHR_853_r33 ()); ! phrase 9 ! [9: say ~And allow [the Y] to live? Never!~ instead] say__p=1;ParaContent(); print (PrintText) SC_636; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_637; new_line; rtrue; .L_Say995; .L_SayX924; rtrue; ! phrase 10 ! [10: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1409, 1409, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Retreating (B612_carry_out_retreating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out retreating ( this is the standard carry out retreat rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out retreating ( this is the standard carry out retreat rule ): [ R_2082 t_0 ! Local variable e.g. 'way' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_2082, 2082); ! phrase 1 ! [1: now the player is retreater] (Adj_282_t2_v9(player)); ! phrase 2 ! [2: let way be the best route from location to retreat location] t_0 = MapRouteTo(real_location,(Global_Vars-->126),0,0) ; ! phrase 3 ! [3: try going way] TryAction(0, player, ##Go, t_0, 0);; ! phrase 4 ! [4: now the player is not retreater] (Adj_282_t3_v9(player)); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2082, 2082, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Going to (B614_check_going_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check going to: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check going to: [ R_2090 ; if (actor == player) { if (debug_rules) DB_Rule(R_2090, 2090); ! phrase 1 ! [1: if the noun is the location begin] if (((noun == real_location))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You're already here.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1393; new_line; rtrue; .L_Say996; .L_SayX925; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2090, 2090, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Going to (B615_carry_out_going_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out going to: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out going to: [ R_2094 t_0 ! Local variable e.g. 'way' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_2094, 2094); ! phrase 1 ! [1: now location-to-go is the noun] (Global_Vars-->127) = noun; if (~~((Global_Vars-->127) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->127), "now location-to-go is the noun", "room");; ! phrase 2 ! [2: let way be the best route from the location of player to the noun through visited safe rooms] t_0 = MapRouteTo( LocationOf(player) ,noun,Prop_362,0) ; ! phrase 3 ! [3: unless way is a direction begin] if (~~(((t_0 ofclass K3_direction)))) { ! phrase 4 ! [4: take no time] (PHR_853_r33 ()); ! phrase 5 ! [5: say ~You don't know a safe path towards that location.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1394; new_line; rtrue; .L_Say997; .L_SayX926; rtrue; ! phrase 6 ! [6: end unless] } ! phrase 7 ! [7: try going way instead] TryAction(0, player, ##Go, t_0, 0);; rtrue; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2094, 2094, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Asking status (B621_carry_out_asking_status) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out asking status: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out asking status: [ R_2098 ; if (actor == player) { if (debug_rules) DB_Rule(R_2098, 2098); ! phrase 1 ! [1: say ~[bold type]Health[roman type]: [health of the player] of [permanent health of the player][line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1395; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p14_health)); @pull self; ParaContent(); print (PrintText) SC_560; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p17_permanent_health)); @pull self; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say998; .L_SayX927; ! phrase 2 ! [2: say ~[bold type]Attack[roman type]: [melee of the player][line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1396; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p18_melee)); @pull self; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say999; .L_SayX928; ! phrase 3 ! [3: say ~[bold type]Defence[roman type]: [defence of the player][line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1397; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p19_defence)); @pull self; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1000; .L_SayX929; ! phrase 4 ! [4: say ~[bold type]Perception[roman type]: [perception of the player][line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1398; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p33_perception)); @pull self; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1001; .L_SayX930; ! phrase 5 ! [5: say ~[bold type]Dexterity[roman type]: [Dexterity of the player][line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1399; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p34_dexterity)); @pull self; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1002; .L_SayX931; ! phrase 6 ! [6: say ~[bold type]Willpower[roman type]: [Willpower of the player][line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1400; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p35_willpower)); @pull self; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1003; .L_SayX932; ! phrase 7 ! [7: consider the status rules] ProcessRulebook(623); ! phrase 8 ! [8: consider the status skill rules] ProcessRulebook(624); ! phrase 9 ! [9: say ~[line break][run paragraph on]~] say__p=1;ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1004; .L_SayX933; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2098, 2098, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: status (B623_status) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/20 ! Status rule ( this is the flying status rule ): ! === which is equally specific with === ! Rule 2/20 ! Status rule ( this is the blindness status rule ): ! === which is equally specific with === ! Rule 3/20 ! Status rule ( this is the undead status rule ): ! === which is equally specific with === ! Rule 4/20 ! Status rule ( this is the ghoul status rule ): ! === which is equally specific with === ! Rule 5/20 ! Status rule ( this is the vampire status rule ): ! === which is equally specific with === ! Rule 6/20 ! Status rule ( this is the vampire bat status rule ): ! === which is equally specific with === ! Rule 7/20 ! Status rule ( this is the hidden status rule ): ! === which is equally specific with === ! Rule 8/20 ! Status rule ( this is the ethereal status rule ): ! === which is equally specific with === ! Rule 9/20 ! Status rule ( this is the protection status rule ): ! === which is equally specific with === ! Rule 10/20 ! Status rule ( this is the skilled status rule ): ! === which is equally specific with === ! Rule 11/20 ! Status rule ( this is the ment status rule ): ! === which is equally specific with === ! Rule 12/20 ! Status rule ( this is the ape power damage status rule ): ! === which is equally specific with === ! Rule 13/20 ! Status rule ( this is the scales status rule ): ! === which is equally specific with === ! Rule 14/20 ! Status rule ( this is the stunned status rule ): ! === which is equally specific with === ! Rule 15/20 ! Status rule ( this is the domination status rule ): ! === which is equally specific with === ! Rule 16/20 ! Status rule ( this is the grappled status rule ): ! === which is equally specific with === ! Rule 17/20 ! Status rule ( this is the tentacle-confused status rule ): ! === which is equally specific with === ! Rule 18/20 ! Status rule ( this is the hexed status rule ): ! === which is equally specific with === ! Rule 19/20 ! Status rule ( this is the status concentration rule ): ! === which is equally specific with === ! Rule 20/20 ! Status rule ( this is the status tension rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Status rule ( this is the flying status rule ): [ R_1168 ; ! phrase 1 ! [1: if player is flying begin] if (((PHR_1166_r51 (player)))) { ! phrase 2 ! [2: say ~You are [bold type]flying[roman type].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1401; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1005; .L_SayX934; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Status rule ( this is the blindness status rule ): [ R_1172 ; ! phrase 1 ! [1: if player is blind begin] if (((PHR_1169_r17 (player)))) { ! phrase 2 ! [2: say ~You are [bold type]blind[roman type].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1402; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1006; .L_SayX935; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Status rule ( this is the undead status rule ): [ R_1196 ; ! phrase 1 ! [1: if the player is undead begin] if (((player.p111_faction == I158_undead))) { ! phrase 2 ! [2: say ~You are [bold type]undead[roman type]: other undead are your allies; potential living allies are your enemies instead; absorbing a soul may heal you only partially.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1403; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1404; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1007; .L_SayX936; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Status rule ( this is the ghoul status rule ): [ R_1274 ; ! phrase 1 ! [1: if player form of the player is ghoul begin] if (((GProperty(9, player,p201_player_form) == I182_ghoul))) { ! phrase 2 ! [2: say ~You are a [bold type]ghoul[roman type]: -1 attack; +1 damage resistance.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1405; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1406; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1407; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1008; .L_SayX937; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Status rule ( this is the vampire status rule ): [ R_1277 ; ! phrase 1 ! [1: if player form of the player is vampire begin] if (((GProperty(9, player,p201_player_form) == I183_vampire))) { ! phrase 2 ! [2: say ~You are a [bold type]vampire[roman type]: +2 willpower, +1 attack, -2 defence, modest bonus to hiding, can turn into a [italic type]bat[roman type].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1405; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1408; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1409; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1410; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1009; .L_SayX938; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Status rule ( this is the vampire bat status rule ): [ R_1286 ; ! phrase 1 ! [1: if player form of the player is vampire bat begin] if (((GProperty(9, player,p201_player_form) == I184_vampire_bat))) { ! phrase 2 ! [2: say ~You are a [bold type]vampire bat[roman type]: +2 defence, -2 attack, large bonus to hiding, bonus to running away, flying, cannot use weapons or clothing, can turn back into a [italic type]vampire[roman type].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1405; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1411; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1412; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1408; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1010; .L_SayX939; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Status rule ( this is the hidden status rule ): [ R_1298 ; ! phrase 1 ! [1: if the player is hidden begin] if ((((Adj_221_t1_v9(player))))) { ! phrase 2 ! [2: say ~You are [bold type]hidden[roman type].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_794; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1011; .L_SayX940; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! Status rule ( this is the ethereal status rule ): [ R_1341 ; ! phrase 1 ! [1: if player is ethereal begin] if ((((Adj_231_t1_v9(player))))) { ! phrase 2 ! [2: say ~You are [bold type]ethereal[roman type]: you cannot interact with most physical objects.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1413; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1414; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1012; .L_SayX941; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Status rule ( this is the protection status rule ): [ R_1465 ; ! phrase 1 ! [1: if hit protection of the player is greater than 0 begin] if (((GProperty(9, player,p59_hit_protection) > 0))) { ! phrase 2 ! [2: say ~You are [bold type]protected[roman type] from damage dealt by attacks.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1415; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1416; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1013; .L_SayX942; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Status rule ( this is the skilled status rule ): [ R_1471 ; ! phrase 1 ! [1: if player skill bonus timer is greater than 0 begin] if ((((Global_Vars-->92) > 0))) { ! phrase 2 ! [2: say ~You are [bold type]skilled[roman type]: +3 bonus to perception, dexterity and willpower checks.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1417; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1418; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1014; .L_SayX943; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Status rule ( this is the ment status rule ): [ R_1541 ; ! phrase 1 ! [1: if ment timer is greater than 0 begin] if ((((Global_Vars-->97) > 0))) { ! phrase 2 ! [2: say ~You are under the influence of [bold type]ment[roman type]: +[ment bonus] attack, +[ment bonus] damage, -[ment bonus] enemy damage, +[ment bonus] defence, +[ment bonus] to all abilities.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1419; ParaContent(); style bold; ParaContent(); print (PrintText) SC_335; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1173; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_1420; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_1421; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_1422; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_1423; ParaContent(); print (say__n=(PHR_1528_r78 ())); ParaContent(); print (PrintText) SC_1424; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1015; .L_SayX944; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if ment timer is 0 and ment addiction is greater than 0 begin] if (((((Global_Vars-->97) == 0))) && ((((Global_Vars-->96) > 0)))) { ! phrase 5 ! [5: say ~You feel [bold type]down[roman type]: -[ment addiction] attack, -[ment addiction] to all abilities[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1425; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1426; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1427; ParaContent(); print (say__n=(Global_Vars-->96)); ParaContent(); print (PrintText) SC_1428; ParaContent(); print (say__n=(Global_Vars-->96)); ParaContent(); print (PrintText) SC_1429; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1016; .L_SayX945; ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status rule ( this is the ape power damage status rule ): [ R_1715 ; ! phrase 1 ! [1: if power of the ape is granted and ape power damage is greater than 0 begin] if (((((Adj_158_t1_v9(I441_power_of_the_ape))))) && ((((Global_Vars-->119) > 0)))) { ! phrase 2 ! [2: say ~[bold type]Power of the ape[roman type]: +[ape power damage] damage bonus.[line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1172; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1173; ParaContent(); print (say__n=(Global_Vars-->119)); ParaContent(); print (PrintText) SC_1430; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1017; .L_SayX946; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status rule ( this is the scales status rule ): [ R_1745 ; ! phrase 1 ! [1: if scales number is greater than 0 begin] if ((((Global_Vars-->120) > 0))) { ! phrase 2 ! [2: say ~You are covered in [bold type]scales[roman type]: +[scales number] damage reduction.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1431; ParaContent(); style bold; ParaContent(); print (PrintText) SC_142; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1173; ParaContent(); print (say__n=(Global_Vars-->120)); ParaContent(); print (PrintText) SC_1432; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1018; .L_SayX947; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status rule ( this is the stunned status rule ): [ R_1757 ; ! phrase 1 ! [1: if the player is stunned begin] if ((((Adj_43_t1_v9(player))))) { ! phrase 2 ! [2: say ~You are [bold type]stunned[roman type]: -2 to attack, cannot concentrate.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1016; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1433; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1019; .L_SayX948; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status rule ( this is the domination status rule ): [ R_1887 ;blockv_stack-->(blockv_sp+1) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_sp = blockv_sp + 2; blockv_stack-->(blockv_sp++) = R_SHELL_77(blockv_sp-2); blockv_sp = blockv_sp - 3; BlkFree(blockv_stack-->(blockv_sp+1)); BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+2); ]; [ R_SHELL_77 I7BASPL ; ! phrase 1 ! [1: if at least one alive person is dominated by the player begin] if ((Prop_363())) { ! phrase 2 ! [2: say ~You [bold type]dominate[roman type]: [list of alive persons dominated by the player with definite articles].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_601; ParaContent(); style bold; ParaContent(); print (PrintText) SC_163; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); LIST_OF_TY_Say( LIST_OF_TY_Desc((blockv_stack-->(I7BASPL+0)), Prop_364, 9) , 2); ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1020; .L_SayX949; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if at least one alive person dominates the player begin] if ((Prop_365())) { ! phrase 5 ! [5: say ~You are [bold type]dominated[roman type] by: [list of alive persons dominating the player with definite articles].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1434; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1435; ParaContent(); LIST_OF_TY_Say( LIST_OF_TY_Desc((blockv_stack-->(I7BASPL+1)), Prop_366, 9) , 2); ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1021; .L_SayX950; ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status rule ( this is the grappled status rule ): [ R_1903 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if at least one person grapples the player begin] if ((Prop_367())) { ! phrase 2 ! [2: let x be a random person grappling the player] t_0 = (Prop_368()) ; ! phrase 3 ! [3: say ~You are [bold type]grappled[roman type] by [the X].[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1436; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1437; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1022; .L_SayX951; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status rule ( this is the tentacle-confused status rule ): [ R_1914 ; ! phrase 1 ! [1: if the player is tentacle-confused begin] if ((((Adj_272_t1_v9(player))))) { ! phrase 2 ! [2: say ~You are [bold type]confused[roman type] by the giant tentacle, which gives you a -2 attack penalty on your next attack.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_308; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1438; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1439; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1023; .L_SayX952; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status rule ( this is the hexed status rule ): [ R_2030 ; ! phrase 1 ! [1: if the player is hexed begin] if ((((Adj_278_t1_v9(player))))) { ! phrase 2 ! [2: say ~You have been [bold type]hexed[roman type] by the aswang, which gives you an initiative penalty.[line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1440; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1375; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1441; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1024; .L_SayX953; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Status rule ( this is the status concentration rule ): [ R_2099 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if concentration of the player is not 0 begin] if (((~~((GProperty(9, player,p26_concentration) == 0))))) { ! phrase 2 ! [2: let n be concentration of the player] t_0 = GProperty(9, player,p26_concentration); ! phrase 3 ! [3: say ~[bold type]Concentration[roman type]: [if n is 1]+2[else if n is 2]+4[else if n is 3]+8[end if] attack bonus, [if n is 1]no[else if n is 2]+2[else if n is 3]+4[end if] damage bonus[line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_1442; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; if (~~((((t_0 == 1))))) jump L_Say1025; ParaContent(); print (PrintText) SC_1443; ParaContent(); jump L_SayX954; .L_Say1025; if (~~((((t_0 == 2))))) jump L_Say1026; ParaContent(); print (PrintText) SC_1444; ParaContent(); jump L_SayX954; .L_Say1026; if (~~((((t_0 == 3))))) jump L_Say1027; ParaContent(); print (PrintText) SC_1445; .L_Say1027; .L_SayX954; ParaContent(); print (PrintText) SC_1446; if (~~((((t_0 == 1))))) jump L_Say1028; ParaContent(); print (PrintText) SC_1447; ParaContent(); jump L_SayX955; .L_Say1028; if (~~((((t_0 == 2))))) jump L_Say1029; ParaContent(); print (PrintText) SC_1443; ParaContent(); jump L_SayX955; .L_Say1029; if (~~((((t_0 == 3))))) jump L_Say1030; ParaContent(); print (PrintText) SC_1444; .L_Say1030; .L_SayX955; ParaContent(); print (PrintText) SC_1448; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1031; .L_SayX956; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Status rule ( this is the status tension rule ): [ R_2100 ; ! phrase 1 ! [1: if tension is greater than 1 begin] if ((((Global_Vars-->48) > 1))) { ! phrase 2 ! [2: say ~[bold type]Tension[roman type]: +[tension divided by 2] attack bonus, +[tension divided by 3] damage bonus[line break][run paragraph on]~] say__p=1;ParaContent(); style bold; ParaContent(); print (PrintText) SC_244; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1173; ParaContent(); print (say__n= (IntegerDivide((Global_Vars-->48),2)) ); ParaContent(); print (PrintText) SC_1449; ParaContent(); print (say__n= (IntegerDivide((Global_Vars-->48),3)) ); ParaContent(); print (PrintText) SC_1448; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1032; .L_SayX957; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: status skill (B624_status_skill) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11 ! Status skill rule ( this is the pierce status skill rule ): ! === which is equally specific with === ! Rule 2/11 ! Status skill rule ( this is the ape power status skill rule ): ! === which is equally specific with === ! Rule 3/11 ! Status skill rule ( this is the armadillo status skill rule ): ! === which is equally specific with === ! Rule 4/11 ! Status skill rule ( this is the Miranda status skill rule ): ! === which is equally specific with === ! Rule 5/11 ! Status skill rule ( this is the chain golem power status skill rule ): ! === which is equally specific with === ! Rule 6/11 ! Status skill rule ( this is the jumping bomb power status skill rule ): ! === which is equally specific with === ! Rule 7/11 ! Status skill rule ( this is the Reaper power status skill rule ): ! === which is equally specific with === ! Rule 8/11 ! Status skill rule ( this is the domination status skill rule ): ! === which is equally specific with === ! Rule 9/11 ! Status skill rule ( this is the tentacle power status skill rule ): ! === which is equally specific with === ! Rule 10/11 ! Status skill rule ( this is the fanatics of aite status skill rule ): ! === which is equally specific with === ! Rule 11/11 ! Status skill rule ( this is the Bodmall status skill rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the pierce status skill rule ): [ R_1695 ; ! phrase 1 ! [1: if the power of daggers is granted begin] if ((((Adj_158_t1_v9(I438_power_of_the_daggers))))) { ! phrase 2 ! [2: say ~You can [bold type]pierce[roman type] an enemy, accepting one damage for a chance to deal one damage to the enemy. [italic type](Level 1)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1450; ParaContent(); style bold; ParaContent(); print (PrintText) SC_139; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1451; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1452; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1033; .L_SayX958; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the ape power status skill rule ): [ R_1716 ; ! phrase 1 ! [1: if power of the ape is granted begin] if ((((Adj_158_t1_v9(I441_power_of_the_ape))))) { ! phrase 2 ! [2: say ~Since you are strengthened by [bold type]blood[roman type], hitting an enemy gives you a temporary damage bonus. [italic type](Level 1)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1453; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1454; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1455; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1452; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1034; .L_SayX959; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the armadillo status skill rule ): [ R_1746 ; ! phrase 1 ! [1: if the power of armadillo is granted begin] if ((((Adj_158_t1_v9(I445_power_of_the_armadillo))))) { ! phrase 2 ! [2: say ~You have the [bold type]scales[roman type] power, which covers you in hard scales that reduce all damage done to you. Using this power costs you some health, and it expires when you attack. [italic type](Level 1)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1456; ParaContent(); style bold; ParaContent(); print (PrintText) SC_142; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1457; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1452; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1035; .L_SayX960; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the Miranda status skill rule ): [ R_1772 ; ! phrase 1 ! [1: if the power of miranda is granted begin] if ((((Adj_158_t1_v9(I450_power_of_miranda))))) { ! phrase 2 ! [2: say ~You have the [bold type]stun[roman type] skill: you can try to [italic type]stun[roman type] an enemy; this means you attack with a -2 damage penalty, but if you hit you will decrease the opponent's effectiveness for several rounds. [italic type](Level 1)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1456; ParaContent(); style bold; ParaContent(); print (PrintText) SC_147; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1458; ParaContent(); style underline; ParaContent(); print (PrintText) SC_147; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1459; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1452; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1036; .L_SayX961; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the chain golem power status skill rule ): [ R_1793 ; ! phrase 1 ! [1: if power of the chains is granted begin] if ((((Adj_158_t1_v9(I453_power_of_the_chains))))) { ! phrase 2 ! [2: say ~You can [bold type]lash out[roman type] as a reaction. This counterattack will sometimes, but not always, happen before the enemy hits you. [italic type](Level 2)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1450; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1460; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1461; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1462; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1037; .L_SayX962; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the jumping bomb power status skill rule ): [ R_1812 ; ! phrase 1 ! [1: if power of the bomb is granted begin] if ((((Adj_158_t1_v9(I456_power_of_the_bomb))))) { ! phrase 2 ! [2: say ~When you die, you [bold type]explode[roman type], dealing as much damage to your enemy as the enemy dealt to you. This gives you a last chance to kill your enemy, and perhaps absorb his soul and come back to life in the process. [italic type](Level 2)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1463; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1189; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1464; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1462; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1038; .L_SayX963; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the Reaper power status skill rule ): [ R_1826 ; ! phrase 1 ! [1: if power of the reaper is granted begin] if ((((Adj_158_t1_v9(I462_power_of_the_reaper))))) { ! phrase 2 ! [2: say ~You partake of the omnipresence of Death. You can [bold type]reap[roman type] anyone you have seen, which will instantly teleport you to their location -- although Death will assert his power over you in the process. [italic type](Level 2)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1465; ParaContent(); style bold; ParaContent(); print (PrintText) SC_156; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1466; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1462; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1039; .L_SayX964; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the domination status skill rule ): [ R_1888 ; ! phrase 1 ! [1: if the power of mindslug is granted begin] if ((((Adj_158_t1_v9(I472_power_of_the_mindslug))))) { ! phrase 2 ! [2: say ~You can attempt to [bold type]dominate[roman type] enemies, which will give them an attack penalty against you that only disappears when they successfully hit you. If the attempt fails, the enemy dominates you instead. Weaker enemies are easier to dominate. [italic type](Level 3)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1467; ParaContent(); style bold; ParaContent(); print (PrintText) SC_163; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1468; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1469; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1040; .L_SayX965; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the tentacle power status skill rule ): [ R_1925 ; ! phrase 1 ! [1: if power of the tentacle is granted begin] if ((((Adj_158_t1_v9(I475_power_of_the_tentacle))))) { ! phrase 2 ! [2: say ~You can [bold type]confuse[roman type] as a reaction; the attacker may lose concentration and become confused. [italic type](Level 3)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1450; ParaContent(); style bold; ParaContent(); print (PrintText) SC_166; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1470; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1469; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1041; .L_SayX966; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the fanatics of aite status skill rule ): [ R_1947 ; ! phrase 1 ! [1: if power of the fanatics of aite is granted begin] if ((((Adj_158_t1_v9(I487_power_of_the_fanatics_o))))) { ! phrase 2 ! [2: say ~You have the power of the fanatics of Aite, which allows you to [bold type]pray[roman type] to the goddess even when you are not in her temple. This power does not work in the temples of other gods. [italic type](Level 4)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1471; ParaContent(); style bold; ParaContent(); print (PrintText) SC_175; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1472; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1473; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1042; .L_SayX967; ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Status skill rule ( this is the Bodmall status skill rule ): [ R_1975 ; ! phrase 1 ! [1: if power of bodmall is granted begin] if ((((Adj_158_t1_v9(I492_power_of_bodmall))))) { ! phrase 2 ! [2: say ~You have the power of Bodmall, which allows you to summon [bold type]thorns[roman type] that will impede most enemies. [italic type](Level 4)[roman type][line break][run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1474; ParaContent(); style bold; ParaContent(); print (PrintText) SC_180; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1475; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1473; ParaContent(); style roman; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1043; .L_SayX968; ! phrase 3 ! [3: end if] } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Remembering (B626_carry_out_remembering) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out remembering: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out remembering: [ R_2102 t_0 ! Local variable e.g. 'm' = number t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = room t_4 ! Local variable e.g. '?-1,-1?' = direction t_5 ! Local variable e.g. '?-1,-1?' = direction ; if (actor == player) { if (debug_rules) DB_Rule(R_2102, 2102); ! phrase 1 ! [1: if the number of unvisited placed placeable notnogo rooms is zero begin] if ((( (Prop_369()) == 0))) { ! phrase 2 ! [2: say ~All locations have been explored.~] say__p=1;ParaContent(); print (PrintText) SC_1476; new_line; .L_Say1044; .L_SayX969; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~You have not yet explored:[line break]~] say__p=1;ParaContent(); print (PrintText) SC_1477; ParaContent(); new_line; .L_Say1045; .L_SayX970; ! phrase 5 ! [5: repeat with place running through placed unvisited notnogo rooms begin] for (t_0=Prop_370(0), t_1=Prop_370(t_0): t_0: t_0=t_1, t_1=Prop_370(t_1)) { ! phrase 6 ! [6: repeat with further place running through placed visited rooms begin] for (t_2=Prop_371(0), t_3=Prop_371(t_2): t_2: t_2=t_3, t_3=Prop_371(t_3)) { ! phrase 7 ! [7: if absolute distance between place and further place is 1 begin] if ((((PHR_1091_r118 (t_0,t_2)) == 1))) { ! phrase 8 ! [8: repeat with way running through cardinal directions begin] for (t_4=Prop_372(0), t_5=Prop_372(t_4): t_4: t_4=t_5, t_5=Prop_372(t_5)) { ! phrase 9 ! [9: if place is the room the way of further place begin] if (((t_0 == MapConnection(t_2,t_4) ))) { ! phrase 10 ! [10: say ~ - the [way] exit of [the further place] ([if further place is not the location]which lies [the road to further place] from here[otherwise]where you currently are[end if])[line break]~] say__p=1;ParaContent(); print (PrintText) SC_1478; ParaContent(); print (PrintShortName) t_4; ParaContent(); print (PrintText) SC_1479; ParaContent(); print (the) t_2; ParaContent(); print (PrintText) SC_893; if (~~((((~~((t_2 == real_location))))))) jump L_Say1046; ParaContent(); print (PrintText) SC_1480; ParaContent(); (PHR_2105_r119 (t_2));ParaContent(); print (PrintText) SC_1481; jump L_SayX971; .L_Say1046; ParaContent(); print (PrintText) SC_1482; .L_Say1047; .L_SayX971; ParaContent(); print (PrintText) SC_275; ParaContent(); new_line; .L_Say1048; .L_SayX972; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end repeat] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: say ~[line break]You have visited the following rooms: ~] say__p=1;ParaContent(); new_line; ParaContent(); print (PrintText) SC_1483; .L_Say1049; .L_SayX973; ! phrase 18 ! [18: let m be the number of visited rooms] t_0 = (Prop_373()) ; ! phrase 19 ! [19: decrease m by the number of visited tunnels] t_0 = t_0 - (Prop_374()) ; ! phrase 20 ! [20: repeat with x running through visited rooms begin] for (t_1=Prop_375(0), t_2=Prop_375(t_1): t_1: t_1=t_2, t_2=Prop_375(t_2)) { ! phrase 21 ! [21: unless x is a tunnel begin] if (~~(((t_1 ofclass K20_tunnel)))) { ! phrase 22 ! [22: say ~[X] ([the road to X])[run paragraph on]~] say__p=1;ParaContent(); print (PrintShortName) t_1; ParaContent(); print (PrintText) SC_893; ParaContent(); (PHR_2105_r119 (t_1));ParaContent(); print (PrintText) SC_275; ParaContent(); RunParagraphOn(); .L_Say1050; .L_SayX974; ! phrase 23 ! [23: decrease m by 1] t_0 = t_0 - 1; ! phrase 24 ! [24: if m is greater than 0 begin] if (((t_0 > 0))) { ! phrase 25 ! [25: say ~, ~] say__p=1;ParaContent(); print (PrintText) SC_592; .L_Say1051; .L_SayX975; ! phrase 26 ! [26: otherwise] } else { ! phrase 27 ! [27: say ~.~] say__p=1;ParaContent(); print (PrintText) SC_310; new_line; .L_Say1052; .L_SayX976; ! phrase 28 ! [28: end if] } ! phrase 29 ! [29: end unless] } ! phrase 30 ! [30: end repeat] } ! phrase 31 ! [31: if at least two seen persons are alive begin] if ((Prop_376())) { ! phrase 32 ! [32: say ~[line break]You have seen the following creatures in these locations:[line break]~] say__p=1;ParaContent(); new_line; ParaContent(); print (PrintText) SC_1484; ParaContent(); new_line; .L_Say1053; .L_SayX977; ! phrase 33 ! [33: repeat with guy running through alive seen persons begin] for (t_1=Prop_377(0), t_2=Prop_377(t_1): t_1: t_1=t_2, t_2=Prop_377(t_2)) { ! phrase 34 ! [34: unless player is guy begin] if (~~(((player == t_1)))) { ! phrase 35 ! [35: unless last-seen-location of guy is null-room begin] if (~~(((GProperty(9, t_1,p62_last_seen_location) == I524_null_room)))) { ! phrase 36 ! [36: say ~- [italic type][the guy][roman type] (level [if group level of the guy is not 0][group level of the guy][otherwise][level of the guy][end if]) in [italic type][last-seen-location of the guy][roman type] ([if last-seen-location of the guy is not the location]which lies [the road to last-seen-location of the guy] from here[otherwise]where you currently are[end if])[line break]~] say__p=1;ParaContent(); print (PrintText) SC_1485; ParaContent(); style underline; ParaContent(); print (the) t_1; ParaContent(); style roman; ParaContent(); print (PrintText) SC_274; if (~~((((~~((GProperty(9, t_1,p32_group_level) == 0))))))) jump L_Say1054; ParaContent(); @push self; print (say__n=GProperty(9, self=t_1,p32_group_level)); @pull self; jump L_SayX978; .L_Say1054; ParaContent(); @push self; print (say__n=GProperty(9, self=t_1,p31_level)); @pull self; .L_Say1055; .L_SayX978; ParaContent(); print (PrintText) SC_1486; ParaContent(); style underline; ParaContent(); @push self; print (PrintShortName) GProperty(9, self=t_1,p62_last_seen_location); @pull self; ParaContent(); style roman; ParaContent(); print (PrintText) SC_893; if (~~((((~~((GProperty(9, t_1,p62_last_seen_location) == real_location))))))) jump L_Say1056; ParaContent(); print (PrintText) SC_1480; ParaContent(); @push self; (PHR_2105_r119 (GProperty(9, self=t_1,p62_last_seen_location)));@pull self; ParaContent(); print (PrintText) SC_1481; jump L_SayX979; .L_Say1056; ParaContent(); print (PrintText) SC_1482; .L_Say1057; .L_SayX979; ParaContent(); print (PrintText) SC_275; ParaContent(); new_line; .L_Say1058; .L_SayX980; ! phrase 37 ! [37: end unless] } ! phrase 38 ! [38: end unless] } ! phrase 39 ! [39: end repeat] } ! phrase 40 ! [40: end if] } ! phrase 41 ! [41: say ~[line break][italic type]Tip[roman type]: [one of]additional information can be gotten with 'status', 'trophies' and (once you have defeated enough monsters) 'sense'[or]you can move one room towards a location by typing 'go to [italic type]location[roman type]'[or]you can 'pray' in any temple[or]'look', 'examine' and 'inventory' are free actions, so use them often[or]if a fight proves too much for you, try to 'retreat'. On entering a room for the first time, you can always retreat for free[or]remember how powers work. If you kill a level 3 creature, you will lose all powers of level 3 and lower; so if you want to have more than one power at the same time, you'll have to kill a lower level creature after defeating a higher level creature[at random].~] say__p=1;ParaContent(); new_line; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1487; ParaContent(); style roman; ParaContent(); print (PrintText) SC_396; ParaContent(); I7_ST_say_one_of-->10 = i7_soo_ran(I7_ST_say_one_of-->10, 6); switch((I7_ST_say_one_of-->10)%(6+1)-1) { 0: ParaContent(); print (PrintText) SC_1488; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1489; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1490; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1491; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1492; ParaContent(); @nop; 3: ParaContent(); print (PrintText) SC_1493; ParaContent(); @nop; 4: ParaContent(); print (PrintText) SC_1494; ParaContent(); @nop; 5: ParaContent(); print (PrintText) SC_1495; ParaContent(); } ParaContent(); print (PrintText) SC_310; new_line; .L_Say1059; .L_SayX981; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2102, 2102, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Sensing (B629_carry_out_sensing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out sensing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out sensing: [ R_2106 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing t_2 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_2106, 2106); ! phrase 1 ! [1: if greatest power of the player is less than 3 begin] if ((((PHR_1164_r109 ()) < 3))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You are not yet powerful enough to magically sense anything.~] say__p=1;ParaContent(); print (PrintText) SC_1496; new_line; .L_Say1060; .L_SayX982; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if greatest power of the player is greater than 2 begin] if ((((PHR_1164_r109 ()) > 2))) { ! phrase 6 ! [6: let the way be the best route from the location of player to the location of malygris] t_0 = MapRouteTo( LocationOf(player) , LocationOf(I493_malygris) ,0,0) ; ! phrase 7 ! [7: if way is a direction begin] if (((t_0 ofclass K3_direction))) { ! phrase 8 ! [8: say ~You feel that the shortest route towards Malygris lies [way].[line break]~] say__p=1;ParaContent(); print (PrintText) SC_1497; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; .L_Say1061; .L_SayX983; ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: if the location of the player is the location of malygris begin] if ((( LocationOf(player) == LocationOf(I493_malygris) ))) { ! phrase 11 ! [11: say ~Malygris is right here.[line break]~] say__p=1;ParaContent(); print (PrintText) SC_1498; ParaContent(); new_line; .L_Say1062; .L_SayX984; ! phrase 12 ! [12: otherwise] } else { ! phrase 13 ! [13: say ~There seems to be no available route towards Malygris.[line break]~] say__p=1;ParaContent(); print (PrintText) SC_1499; ParaContent(); new_line; .L_Say1063; .L_SayX985; ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: if greatest power of the player is greater than 3 begin] if ((((PHR_1164_r109 ()) > 3))) { ! phrase 18 ! [18: repeat with item running through not off-stage epic things begin] for (t_0=Prop_378(0), t_1=Prop_378(t_0): t_0: t_0=t_1, t_1=Prop_378(t_1)) { ! phrase 19 ! [19: if location of item is not location of the player and location of item is placed begin] if ((((~~(( LocationOf(t_0) == LocationOf(player) ))))) && ((((Adj_111_t1_v9( LocationOf(t_0) )))))) { ! phrase 20 ! [20: let the way be the best route from the location of player to the location of item] t_2 = MapRouteTo( LocationOf(player) , LocationOf(t_0) ,0,0) ; ! phrase 21 ! [21: if way is a direction begin] if (((t_2 ofclass K3_direction))) { ! phrase 22 ! [22: say ~[line break]You sense an epic artefact that can be found by going [way] from here.[line break]~] say__p=1;ParaContent(); new_line; ParaContent(); print (PrintText) SC_1500; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_1501; ParaContent(); new_line; .L_Say1064; .L_SayX986; ! phrase 23 ! [23: otherwise] } else { ! phrase 24 ! [24: say ~[line break]You sense an epic artefact that is currently unreachable, but lies somewhere [general direction from location of the player to location of the item].[line break]~] say__p=1;ParaContent(); new_line; ParaContent(); print (PrintText) SC_1502; ParaContent(); (PHR_2107_r120 ( LocationOf(player) , LocationOf(t_0) ));ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; .L_Say1065; .L_SayX987; ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end if] } ! phrase 27 ! [27: end repeat] } ! phrase 28 ! [28: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2106, 2106, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Trophylisting (B632_carry_out_trophylisting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out trophylisting: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out trophylisting: [ R_2108 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (actor == player) { if (debug_rules) DB_Rule(R_2108, 2108); ! phrase 1 ! [1: if the number of dead persons is 0 begin] if ((( (Prop_379()) == 0))) { ! phrase 2 ! [2: say ~Nobody has died yet.~] say__p=1;ParaContent(); print (PrintText) SC_1503; new_line; .L_Say1066; .L_SayX988; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~The following creatures have been vanquished:~] say__p=1;ParaContent(); print (PrintText) SC_1504; .L_Say1067; .L_SayX989; ! phrase 5 ! [5: repeat with guy running through dead seen persons begin] for (t_0=Prop_380(0), t_1=Prop_380(t_0): t_0: t_0=t_1, t_1=Prop_380(t_1)) { ! phrase 6 ! [6: say ~[line break]- [italic type][no dead property][the guy][dead property][roman type] (level [if group level of the guy is not 0][group level of the guy][otherwise][level of the guy][end if])~] say__p=1;ParaContent(); new_line; ParaContent(); print (PrintText) SC_1485; ParaContent(); style underline; ParaContent(); (PHR_828_r43 ());ParaContent(); print (the) t_0; ParaContent(); (PHR_829_r44 ());ParaContent(); style roman; ParaContent(); print (PrintText) SC_274; if (~~((((~~((GProperty(9, t_0,p32_group_level) == 0))))))) jump L_Say1068; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p32_group_level)); @pull self; jump L_SayX990; .L_Say1068; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p31_level)); @pull self; .L_Say1069; .L_SayX990; ParaContent(); print (PrintText) SC_275; .L_Say1070; .L_SayX991; ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: say ~[paragraph break]~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say1071; .L_SayX992; ! phrase 9 ! [9: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2108, 2108, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Showing commands (B635_carry_out_showing_comma) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out showing commands: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out showing commands: [ R_2109 ; if (actor == player) { if (debug_rules) DB_Rule(R_2109, 2109); ! phrase 1 ! [1: say ~The most important special commands in [italic type]Kerkerkruip[roman type] are: attack (a), parry (p), dodge (do), concentrate (c), status, remember (r), sense, pray, equip, go to. Some of the standard interactive fiction commands are: look (l), inventory (i), go, take, drop, wear, take off, read, put A in B.~] say__p=1;ParaContent(); print (PrintText) SC_1505; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1506; new_line; .L_Say1072; .L_SayX993; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2109, 2109, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Praying (B637_check_praying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! First check praying: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! First check praying: [ R_1949 ; if (actor == player) { if (debug_rules) DB_Rule(R_1949, 1949); ! phrase 1 ! [1: if the power of the fanatics of aite is granted begin] if ((((Adj_158_t1_v9(I487_power_of_the_fanatics_o))))) { ! phrase 2 ! [2: if the location is not consecrated begin] if (((~~(((Adj_141_t1_v9(real_location))))))) { ! phrase 3 ! [3: do the aite prayer instead] (PHR_1585_r40 ()); rtrue; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1949, 1949, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Praying (B638_carry_out_praying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out praying: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out praying: [ R_2110 ; if (actor == player) { if (debug_rules) DB_Rule(R_2110, 2110); ! phrase 1 ! [1: say ~You send a quick prayer to the [one of]Maiden[or]Crone[or]Knight[or]Smith[at random], but you're afraid your gods are too young to have power here.~] say__p=1;ParaContent(); print (PrintText) SC_1507; ParaContent(); I7_ST_say_one_of-->11 = i7_soo_ran(I7_ST_say_one_of-->11, 4); switch((I7_ST_say_one_of-->11)%(4+1)-1) { 0: ParaContent(); print (PrintText) SC_1508; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1509; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1510; ParaContent(); @nop; 3: ParaContent(); print (PrintText) SC_1511; ParaContent(); } ParaContent(); print (PrintText) SC_1512; new_line; .L_Say1073; .L_SayX994; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2110, 2110, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Direction-jumping (B640_check_direction_jumping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check direction-jumping down in Vast Staircase: ! === which is equally specific with === ! Rule 2/2 ! Check direction-jumping down in Vast Staircase: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Check direction-jumping down in Vast Staircase: [ R_1613 ; if ( (actor==player) && ((noun == I55_down) && (true)) && ((real_location == I403_vast_staircase) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1613, 1613); ! phrase 1 ! [1: unless staircase still goes down begin] if (~~(((PHR_1612_r85 ())))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~That passage no longer exists.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1513; new_line; rtrue; .L_Say1074; .L_SayX995; rtrue; ! phrase 4 ! [4: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1613, 1613, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Check direction-jumping down in Vast Staircase: [ R_1614 ; if ( (actor==player) && ((noun == I55_down) && (true)) && ((real_location == I403_vast_staircase) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1614, 1614); ! phrase 1 ! [1: unless the player can move begin] if (~~(((PHR_1258_r50 (player))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~Right now, you cannot move.~ instead] say__p=1;ParaContent(); print (PrintText) SC_1514; new_line; rtrue; .L_Say1075; .L_SayX996; rtrue; ! phrase 4 ! [4: end unless] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1614, 1614, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Direction-jumping (B641_carry_out_direction_jum) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Carry out direction-jumping down in Bridge of Doom: ! === which is equally specific with === ! Rule 2/3 ! Carry out direction-jumping down in Vast Staircase: ! >>> I - Number of aspects constrained >>> ! Rule 3/3 ! Carry out direction-jumping: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Carry out direction-jumping down in Bridge of Doom: [ R_1564 ; if ( (actor==player) && ((noun == I55_down) && (true)) && ((real_location == I384_bridge_of_doom) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1564, 1564); ! phrase 1 ! [1: try entering the seething lake of lava instead] TryAction(0, player, ##Enter, I386_seething_lake_of_lava, 0);; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1564, 1564, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Locations" by Victor Gijsbers ! Carry out direction-jumping down in Vast Staircase: [ R_1615 ; if ( (actor==player) && ((noun == I55_down) && (true)) && ((real_location == I403_vast_staircase) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1615, 1615); ! phrase 1 ! [1: say ~You jump down the vast staircase.~] say__p=1;ParaContent(); print (PrintText) SC_1515; new_line; .L_Say1076; .L_SayX997; ! phrase 2 ! [2: have a falling event with global defender falling in vast staircase for reason 2] (PHR_1121_r84 ((Global_Vars-->42),I403_vast_staircase,2)); ! phrase 3 ! [3: do nothing instead] ; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1615, 1615, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out direction-jumping: [ R_2111 ; if (actor == player) { if (debug_rules) DB_Rule(R_2111, 2111); ! phrase 1 ! [1: say ~You hop around.~] say__p=1;ParaContent(); print (PrintText) SC_1516; new_line; .L_Say1077; .L_SayX998; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2111, 2111, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Equipping (B643_check_equipping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check equipping: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Check equipping: [ R_2112 ; if (actor == player) { if (debug_rules) DB_Rule(R_2112, 2112); ! phrase 1 ! [1: if the noun is not a weapon and the noun is not clothing begin] if ((((~~((noun ofclass K17_weapon))))) && (((~~((noun ofclass K24_clothing)))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~You can only equip weapons and clothing.~] say__p=1;ParaContent(); print (PrintText) SC_1517; new_line; .L_Say1078; .L_SayX999; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2112, 2112, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Equipping (B644_carry_out_equipping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out equipping a weapon: ! === which is equally specific with === ! Rule 2/2 ! Carry out equipping clothing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out equipping a weapon: [ R_2113 ; if ( (actor==player) && ((noun ofclass K17_weapon))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2113, 2113); ! phrase 1 ! [1: try readying the noun instead] TryAction(0, player, ##A87_readying, noun, 0);; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2113, 2113, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out equipping clothing: [ R_2114 ; if ( (actor==player) && ((noun ofclass K24_clothing))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_2114, 2114); ! phrase 1 ! [1: try wearing the noun instead] TryAction(0, player, ##Wear, noun, 0);; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_2114, 2114, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Talking to (B648_report_talking_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Report talking to: ! --- now the last-placed rules --- ! Rule 2/3 ! Last report talking to Fafhrd when Fafhrd is friendly: ! === which is equally specific with === ! Rule 3/3 ! Last report talking to Mouser when Mouser is friendly: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Report talking to: [ R_2121 ; if (actor == player) { if (debug_rules) DB_Rule(R_2121, 2121); ! phrase 1 ! [1: say ~'[one of]I'll get back at the prince.[or]I will defeat all my enemies![or]I am immortal.[or]Pride cometh before the fall.[at random]', you say[if the player is hidden], revealing your presence[end if].[run paragraph on][line break][paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1491; ParaContent(); I7_ST_say_one_of-->12 = i7_soo_ran(I7_ST_say_one_of-->12, 4); switch((I7_ST_say_one_of-->12)%(4+1)-1) { 0: ParaContent(); print (PrintText) SC_1518; new_line;ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1519; new_line;ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1520; new_line;ParaContent(); @nop; 3: ParaContent(); print (PrintText) SC_1521; new_line;ParaContent(); } ParaContent(); print (PrintText) SC_1522; if (~~(((((Adj_221_t1_v9(player))))))) jump L_Say1079; ParaContent(); print (PrintText) SC_1523; .L_Say1079; .L_SayX1000; ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); ParaContent(); new_line; ParaContent(); DivideParagraphPoint(); new_line; .L_Say1080; .L_SayX1001; ! phrase 2 ! [2: now the player is not hidden] (Adj_221_t3_v9(player)); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2121, 2121, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Last report talking to Fafhrd when Fafhrd is friendly: [ R_1869 ; if ( (actor==player) && ((noun == I466_fafhrd) && (true)) && (self=actor,true) && ((((Adj_95_t1_v9(I466_fafhrd)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1869, 1869); ! phrase 1 ! [1: say ~Fafhrd shrugs.~] say__p=1;ParaContent(); print (PrintText) SC_1524; new_line; .L_Say1081; .L_SayX1002; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1869, 1869, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Last report talking to Mouser when Mouser is friendly: [ R_1870 ; if ( (actor==player) && ((noun == I469_mouser) && (true)) && (self=actor,true) && ((((Adj_95_t1_v9(I469_mouser)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1870, 1870); ! phrase 1 ! [1: say ~Mouser raises one his eyebrows.~] say__p=1;ParaContent(); print (PrintText) SC_1525; new_line; .L_Say1082; .L_SayX1003; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1870, 1870, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Plunking (B650_carry_out_plunking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out plunking: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out plunking: [ R_2128 ; if (actor == player) { if (debug_rules) DB_Rule(R_2128, 2128); ! phrase 1 ! [1: say ~You plunk [the noun].~] say__p=1;ParaContent(); print (PrintText) SC_1526; ParaContent(); print (the) noun; ParaContent(); print (PrintText) SC_310; new_line; .L_Say1083; .L_SayX1004; ! phrase 2 ! [2: now the health of the noun is -5] WriteGProperty(OBJECT_TY, noun,p14_health,-5); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2128, 2128, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Plonking (B653_carry_out_plonking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out plonking: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out plonking: [ R_2129 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person ; if (actor == player) { if (debug_rules) DB_Rule(R_2129, 2129); ! phrase 1 ! [1: say ~These fools are no match for you!~] say__p=1;ParaContent(); print (PrintText) SC_1527; new_line; .L_Say1084; .L_SayX1005; ! phrase 2 ! [2: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_381(0), t_1=Prop_381(t_0): t_0: t_0=t_1, t_1=Prop_381(t_1)) { ! phrase 3 ! [3: if the faction of the player hates the faction of x begin] if ((((Relation_TestVtoV(GProperty(9, player,p111_faction),Rel_Record_67,GProperty(9, t_0,p111_faction),false))))) { ! phrase 4 ! [4: now the health of x is -5] WriteGProperty(9, t_0,p14_health,-5); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end repeat] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2129, 2129, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Ramboing (B656_carry_out_ramboing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out ramboing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out ramboing: [ R_2130 ; if (actor == player) { if (debug_rules) DB_Rule(R_2130, 2130); ! phrase 1 ! [1: say ~RAMBO!~] say__p=1;ParaContent(); print (PrintText) SC_1528; new_line; .L_Say1085; .L_SayX1006; ! phrase 2 ! [2: now permanent health of the player is 100] WriteGProperty(9, player,p17_permanent_health,100); ! phrase 3 ! [3: now health of the player is 100] WriteGProperty(9, player,p14_health,100); ! phrase 4 ! [4: now melee of the player is 100] WriteGProperty(9, player,p18_melee,100); ! phrase 5 ! [5: now damage die of gilded rapier is 100] WriteGProperty(9, I265_gilded_rapier,p20_damage_die,100); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2130, 2130, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Meatboying (B659_carry_out_meatboying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out meatboying: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out meatboying: [ R_2131 ; if (actor == player) { if (debug_rules) DB_Rule(R_2131, 2131); ! phrase 1 ! [1: say ~Meatboy!~] say__p=1;ParaContent(); print (PrintText) SC_1529; new_line; .L_Say1086; .L_SayX1007; ! phrase 2 ! [2: now health of the player is 1000] WriteGProperty(9, player,p14_health,1000); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2131, 2131, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Reducing (B662_carry_out_reducing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out reducing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out reducing: [ R_2132 ; if (actor == player) { if (debug_rules) DB_Rule(R_2132, 2132); ! phrase 1 ! [1: say ~Set to 1 HP.~] say__p=1;ParaContent(); print (PrintText) SC_1530; new_line; .L_Say1087; .L_SayX1008; ! phrase 2 ! [2: now health of the noun is 1] WriteGProperty(OBJECT_TY, noun,p14_health,1); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2132, 2132, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Testreadying (B665_carry_out_testreadying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out testreadying: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Carry out testreadying: [ R_2133 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = object ; if (actor == player) { if (debug_rules) DB_Rule(R_2133, 2133); ! phrase 1 ! [1: repeat with guy running through not off-stage persons begin] for (t_0=Prop_382(0), t_1=Prop_382(t_0): t_0: t_0=t_1, t_1=Prop_382(t_1)) { ! phrase 2 ! [2: let item be a random readied weapon enclosed by guy] t_2 = (Prop_383(,t_0)) ; ! phrase 3 ! [3: say ~[guy] - [item][line break]~] say__p=1;ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_775; ParaContent(); print (PrintShortName) t_2; ParaContent(); new_line; .L_Say1088; .L_SayX1009; ! phrase 4 ! [4: end repeat] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2133, 2133, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: victory message (B667_victory_message) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Victory message rule ( this is the Nameless Horror message rule ): ! --- now the last-placed rules --- ! Rule 2/2 ! Last victory message rule ( this is the normal victory message rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Victory message rule ( this is the Nameless Horror message rule ): [ R_2147 ; ! phrase 1 ! [1: if the nameless horror is follower begin] if ((((Adj_172_t1_v9(I499_nameless_horror))))) { ! phrase 2 ! [2: end the story saying ~You have won... technically. The Nameless Horror will find you soon, and you end will not be pretty.~] deadflag=SC_1531; story_complete=false; ! phrase 3 ! [3: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Last victory message rule ( this is the normal victory message rule ): [ R_2146 ; ! phrase 1 ! [1: end the story saying ~You have defeated Malygris! With his immense magical powers now at your disposal, it is time to teleport back to Montenoir and pay a little visit to the prince.~] deadflag=SC_1532; story_complete=false; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Asking for help (B669_carry_out_asking_for_he) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out asking for help: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Carry out asking for help: [ R_2155 ; if (actor == player) { if (debug_rules) DB_Rule(R_2155, 2155); ! phrase 1 ! [1: now the current menu is the table of kerkerkruip help] (Global_Vars-->12) = T22_kerkerkruip_help; ! phrase 2 ! [2: carry out the displaying activity] CarryOutActivity(V32_displaying); ! phrase 3 ! [3: clear the screen] VM_ClearScreen(0); ! phrase 4 ! [4: try looking] TryAction(0, player, ##Look, 0, 0);; ! phrase 5 ! [5: stop the action] rtrue; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2155, 2155, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Achievemenuing (B672_carry_out_achievemenuin) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out achievemenuing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Carry out achievemenuing: [ R_2173 ; if (actor == player) { if (debug_rules) DB_Rule(R_2173, 2173); ! phrase 1 ! [1: now the current menu is the table of achievement menu] (Global_Vars-->12) = T27_achievement_menu; ! phrase 2 ! [2: carry out the displaying activity] CarryOutActivity(V32_displaying); ! phrase 3 ! [3: clear the screen] VM_ClearScreen(0); ! phrase 4 ! [4: try looking] TryAction(0, player, ##Look, 0, 0);; ! phrase 5 ! [5: stop the action] rtrue; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2173, 2173, true); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! Definitions of displaced and unbooked rules ! No specific request ! From the Standard Rules ! This is the notify score changes rule: [ R_16 ; ! phrase 1 ! [1: if the score is not the last notified score begin] if (((~~((score == last_score))))) { ! phrase 2 ! [2: issue score notification message] NotifyTheScore(); ! phrase 3 ! [3: now the last notified score is the score] last_score = score; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From the Standard Rules ! Rule for supplying a missing noun while an actor going ( this is the block vaguely going rule ): [ R_67 ; if (((((action ==##Go) && (act_requester==nothing))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_67, 67); ! phrase 1 ! [1: issue library message going action number 7] GL__M(##Go,7,noun); RulebookSucceeds(); rtrue; } ! Runs only while condition holds else if (debug_rules > 1) DB_Rule(R_67, 67, true); rfalse; ]; ! No specific request ! From the Standard Rules ! For printing the locale description ( this is the you-can-also-see rule ): [ R_76 t_0 ! Local variable e.g. 'domain' = object t_1 ! Local variable e.g. 'mentionable count' = number t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = truth state t_4 ! Local variable e.g. '?-1,-1?' = thing t_5 ! Local variable e.g. '?-1,-1?' = thing ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let the domain be the parameter-object] t_0 = parameter_object; ! phrase 2 ! [2: let the mentionable count be 0] t_1 = 0; ! phrase 3 ! [3: repeat with item running through things begin] for (t_2=Prop_384(0), t_3=Prop_384(t_2): t_2: t_2=t_3, t_3=Prop_384(t_3)) { ! phrase 4 ! [4: now the item is not marked for listing] (Adj_70_t3_v9(t_2)); ! phrase 5 ! [5: end repeat] } ! phrase 6 ! [6: repeat through the table of locale priorities begin] @push ct_0; @push ct_1; for (t_2=T1_locale_priorities,t_3=1,ct_0=t_2,ct_1=t_3: t_3<=TableRows(t_2):t_3++,ct_0=t_2,ct_1=t_3) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 7 ! [7: if the locale description priority entry is greater than 0 , now the notable-object entry is marked for listing] if (((TableLookUpEntry(ct_0,106,ct_1) > 0))) { (Adj_70_t2_v9(TableLookUpEntry(ct_0,105,ct_1))); } ! phrase 8 ! [8: increase the mentionable count by 1] t_1 = t_1 + 1; ! phrase 9 ! [9: end repeat] } @pull ct_1; @pull ct_0; ! phrase 10 ! [10: if the mentionable count is greater than 0 begin] if (((t_1 > 0))) { ! phrase 11 ! [11: repeat with item running through things begin] for (t_2=Prop_385(0), t_3=Prop_385(t_2): t_2: t_2=t_3, t_3=Prop_385(t_3)) { ! phrase 12 ! [12: if the item is mentioned begin] if ((((Adj_72_t1_v9(t_2))))) { ! phrase 13 ! [13: now the item is not marked for listing] (Adj_70_t3_v9(t_2)); ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: begin the listing nondescript items activity with the domain] BeginActivity(V7_listing_nondescript_items, t_0); ! phrase 17 ! [17: if the number of marked for listing things is 0 begin] if ((( (Prop_386()) == 0))) { ! phrase 18 ! [18: abandon the listing nondescript items activity with the domain] AbandonActivity(V7_listing_nondescript_items, t_0); ! phrase 19 ! [19: otherwise] } else { ! phrase 20 ! [20: if handling the listing nondescript items activity begin] if (( (~~(ForActivity(V7_listing_nondescript_items))) )) { ! phrase 21 ! [21: if the domain is a room begin] if (((t_0 ofclass K1_room))) { ! phrase 22 ! [22: if the domain is the location , say ~You ~] if (((t_0 == real_location))) { say__p=1;ParaContent(); print (PrintText) SC_601; .L_Say1089; .L_SayX1010; } ! phrase 23 ! [23: otherwise say ~In [the domain] you ~] else { say__p=1;ParaContent(); print (PrintText) SC_602; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say1090; .L_SayX1011; } ! phrase 24 ! [24: otherwise if the domain is a supporter] } else if (((t_0 ofclass K6_supporter))) { ! phrase 25 ! [25: say ~On [the domain] you ~] say__p=1;ParaContent(); print (PrintText) SC_604; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say1091; .L_SayX1012; ! phrase 26 ! [26: otherwise if the domain is an animal] } else if (((t_0 ofclass K12_animal))) { ! phrase 27 ! [27: say ~On [the domain] you ~] say__p=1;ParaContent(); print (PrintText) SC_604; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say1092; .L_SayX1013; ! phrase 28 ! [28: otherwise] } else { ! phrase 29 ! [29: say ~In [the domain] you ~] say__p=1;ParaContent(); print (PrintText) SC_602; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_603; .L_Say1093; .L_SayX1014; ! phrase 30 ! [30: end if] } ! phrase 31 ! [31: say ~can [if the locale paragraph count is greater than 0]also [end if]see ~] say__p=1;ParaContent(); print (PrintText) SC_605; if (~~(((((Global_Vars-->8) > 0))))) jump L_Say1094; ParaContent(); print (PrintText) SC_606; .L_Say1094; .L_SayX1015; ParaContent(); print (PrintText) SC_1533; .L_Say1095; .L_SayX1016; ! phrase 32 ! [32: let the common holder be nothing] t_2 = nothing; ! phrase 33 ! [33: let contents form of list be true] t_3 = 1; ! phrase 34 ! [34: repeat with list item running through marked for listing things begin] for (t_4=Prop_387(0), t_5=Prop_387(t_4): t_4: t_4=t_5, t_5=Prop_387(t_5)) { ! phrase 35 ! [35: if the holder of the list item is not the common holder begin] if (((~~(( (HolderOf(t_4)) == t_2))))) { ! phrase 36 ! [36: if the common holder is nothing , now the common holder is the holder of the list item] if (((t_2 == nothing))) { t_2 = (HolderOf(t_4)) ; } ! phrase 37 ! [37: otherwise now contents form of list is false] else { t_3 = 0; } ! phrase 38 ! [38: end if] } ! phrase 39 ! [39: if the list item is mentioned , now the list item is not marked for listing] if ((((Adj_72_t1_v9(t_4))))) { (Adj_70_t3_v9(t_4)); } ! phrase 40 ! [40: end repeat] } ! phrase 41 ! [41: filter list recursion to unmentioned things] list_filter_routine = Prop_388; ! phrase 42 ! [42: if contents form of list is true and the common holder is not nothing , list the contents of the common holder , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , listing marked items only] if (((((t_3 && true) == (1 && true)))) && (((~~((t_2 == nothing)))))) { WriteListFrom(child(t_2), 2776); } ! phrase 43 ! [43: otherwise say ~[a list of marked for listing things including contents]~] else { say__p=1;ParaContent(); @push subst__v; objectloop (subst__v ofclass Object) if (((subst__v ofclass K2_thing) && ((Adj_70_t1_v9(subst__v))))) give subst__v workflag2; else give subst__v ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+ TERSE_BIT+CONCEAL_BIT); @pull subst__v; .L_Say1096; .L_SayX1017; } ! phrase 44 ! [44: if the domain is the location , say ~ here~] if (((t_0 == real_location))) { say__p=1;ParaContent(); print (PrintText) SC_609; .L_Say1097; .L_SayX1018; } ! phrase 45 ! [45: say ~.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_310; ParaContent(); DivideParagraphPoint(); new_line; .L_Say1098; .L_SayX1019; ! phrase 46 ! [46: unfilter list recursion] list_filter_routine = 0; ! phrase 47 ! [47: end if] } ! phrase 48 ! [48: end the listing nondescript items activity with the domain] EndActivity(V7_listing_nondescript_items, t_0); ! phrase 49 ! [49: end if] } ! phrase 50 ! [50: end if] } ! phrase 51 ! [51: continue the activity] rfalse; RulebookSucceeds(); rtrue; rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out taking inventory ( this is the print empty inventory rule ): [ R_86 ; if (actor == player) { if (debug_rules) DB_Rule(R_86, 86); ! phrase 1 ! [1: if the first thing held by the player is nothing , stop the action with library message taking inventory action number 1] if ((( (child(player)) == nothing))) { return GL__M(##Inv,1,noun); } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_86, 86, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Carry out taking inventory ( this is the print standard inventory rule ): [ R_87 ; if (actor == player) { if (debug_rules) DB_Rule(R_87, 87); ! phrase 1 ! [1: issue library message taking inventory action number 2] GL__M(##Inv,2,noun); ! phrase 2 ! [2: say ~:[line break]~] say__p=1;ParaContent(); print (PrintText) SC_616; ParaContent(); new_line; .L_Say1099; .L_SayX1020; ! phrase 3 ! [3: list the contents of the player , with newlines , indented , including contents , giving inventory information , with extra indentation] WriteListFrom(child(player), 8215); } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_87, 87, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take people's possessions rule ): [ R_92 t_0 ! Local variable e.g. 'local ceiling' = object t_1 ! Local variable e.g. 'H' = object ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_92, 92); ! phrase 1 ! [1: let the local ceiling be the common ancestor of the actor with the noun] t_0 = (CommonAncestor(actor, noun)) ; ! phrase 2 ! [2: let h be the not-counting-parts holder of the noun] t_1 = (CoreOfParentOfCoreOf(noun)) ; ! phrase 3 ! [3: while h is not nothing and h is not the local ceiling begin] while ((((~~((t_1 == nothing))))) && (((~~((t_1 == t_0)))))) { ! phrase 4 ! [4: if h is a person , stop the action with library message taking action number 6 for h] if (((t_1 ofclass K8_person))) { return GL__M(##Take,6,t_1); } ! phrase 5 ! [5: let h be the not-counting-parts holder of h] t_1 = (CoreOfParentOfCoreOf(t_1)) ; ! phrase 6 ! [6: end while] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_92, 92, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor taking ( this is the can't take what's already taken rule ): [ R_95 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_95, 95); ! phrase 1 ! [1: if the actor is carrying the noun , stop the action with library message taking action number 5 for the noun] if (((actor == CarrierOf(noun)))) { return GL__M(##Take,5,noun); } ! phrase 2 ! [2: if the actor is wearing the noun , stop the action with library message taking action number 5 for the noun] if (((actor == WearerOf(noun)))) { return GL__M(##Take,5,noun); } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_95, 95, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor going ( this is the can't go that way rule ): [ R_143 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_143, 143); ! phrase 1 ! [1: if the room gone to is nothing begin] if ((((MStack-->MstVO(20007,1)) == nothing))) { ! phrase 2 ! [2: if the door gone through is nothing , stop the action with library message going action number 2 for the room gone from] if ((((MStack-->MstVO(20007,2)) == nothing))) { return GL__M(##Go,2,(MStack-->MstVO(20007,0))); } ! phrase 3 ! [3: stop the action with library message going action number 6 for the door gone through] return GL__M(##Go,6,(MStack-->MstVO(20007,2))); ! phrase 4 ! [4: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_143, 143, true); rfalse; ]; ! No specific request ! From the Standard Rules ! Check an actor attacking ( this is the block attacking rule ): [ R_243 ; if ((act_requester==nothing)) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_243, 243); ! phrase 1 ! [1: stop the action with library message attacking action number 1 for the noun] return GL__M(##Attack,1,noun); } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_243, 243, true); rfalse; ]; ! No specific request ! From "Menus" by Emily Short ! This is the quit rule: [ R_740 ; ! phrase 1 ! [1: decrease the menu depth by 1] (Global_Vars-->9) = (Global_Vars-->9) - 1; ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! No specific request ! From "Menus" by Emily Short ! This is the move down rule: [ R_741 ; ! phrase 1 ! [1: if current menu selection is less than the number of filled rows in the current menu , increase current menu selection by 1] if ((((Global_Vars-->13) < TableFilledRows((Global_Vars-->12)) ))) { (Global_Vars-->13) = (Global_Vars-->13) + 1; } ! phrase 2 ! [2: reprint the current menu] (PHR_745_r121 ((Global_Vars-->12))); ! phrase 3 ! [3: make no decision] rfalse; rfalse; ]; ! No specific request ! From "Menus" by Emily Short ! This is the move up rule: [ R_742 ; ! phrase 1 ! [1: if current menu selection is greater than 1 , decrease current menu selection by 1] if ((((Global_Vars-->13) > 1))) { (Global_Vars-->13) = (Global_Vars-->13) - 1; } ! phrase 2 ! [2: reprint the current menu] (PHR_745_r121 ((Global_Vars-->12))); ! phrase 3 ! [3: make no decision] rfalse; rfalse; ]; ! No specific request ! From "Menus" by Emily Short ! This is the select rule: [ R_743 t_0 ! Local variable e.g. '?-1,-1?' = text ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: choose row current menu selection in the current menu] ct_0 = (Global_Vars-->12); ct_1 = (Global_Vars-->13); ! phrase 2 ! [2: if there is a toggle entry begin] if (( (ExistsTableLookUpEntry(ct_0,110,ct_1)) )) { ! phrase 3 ! [3: follow the toggle entry] FollowRulebook(TableLookUpEntry(ct_0,110,ct_1)); ! phrase 4 ! [4: reprint the current menu] (PHR_745_r121 ((Global_Vars-->12))); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: if there is a subtable entry begin] if (( (ExistsTableLookUpEntry(ct_0,108,ct_1)) )) { ! phrase 7 ! [7: now the current menu title is title entry] (Global_Vars-->11) = TableLookUpEntry(ct_0,107,ct_1); ! phrase 8 ! [8: now the current menu selection is 1] (Global_Vars-->13) = 1; ! phrase 9 ! [9: now the current menu is subtable entry] (Global_Vars-->12) = TableLookUpEntry(ct_0,108,ct_1); ! phrase 10 ! [10: show menu contents] (PHR_746_r68 ()); ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: let the temporary title be the current menu title] t_0 = (Global_Vars-->11); ! phrase 13 ! [13: now the current menu title is title entry] (Global_Vars-->11) = TableLookUpEntry(ct_0,107,ct_1); ! phrase 14 ! [14: now the endnode flag is 1] (Global_Vars-->10) = 1; ! phrase 15 ! [15: redraw status line] DrawStatusLine(); ! phrase 16 ! [16: now the endnode flag is 0] (Global_Vars-->10) = 0; ! phrase 17 ! [17: clear only the main screen] VM_ClearScreen(2); ! phrase 18 ! [18: say ~[variable letter spacing][description entry][paragraph break]~] say__p=1;ParaContent(); font on; ParaContent(); print (PrintText) TableLookUpEntry(ct_0,109,ct_1); ParaContent(); DivideParagraphPoint(); new_line; .L_Say1100; .L_SayX1021; ! phrase 19 ! [19: pause the game] (PHR_758_r122 ()); ! phrase 20 ! [20: now the current menu title is temporary title] (Global_Vars-->11) = t_0; ! phrase 21 ! [21: reprint the current menu] (PHR_745_r121 ((Global_Vars-->12))); ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end if] } rfalse; ]; ! No specific request ! From "Menus" by Emily Short ! This is the hint toggle rule: [ R_751 t_0 ! Local variable e.g. 'temporary title' = text t_1 ! Local variable e.g. '__index' = number t_2 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: choose row current menu selection in the current menu] ct_0 = (Global_Vars-->12); ct_1 = (Global_Vars-->13); ! phrase 2 ! [2: let the temporary title be the current menu title] t_0 = (Global_Vars-->11); ! phrase 3 ! [3: now the current menu title is title entry] (Global_Vars-->11) = TableLookUpEntry(ct_0,107,ct_1); ! phrase 4 ! [4: now the endnode flag is 1] (Global_Vars-->10) = 1; ! phrase 5 ! [5: redraw status line] DrawStatusLine(); ! phrase 6 ! [6: now the endnode flag is 0] (Global_Vars-->10) = 0; ! phrase 7 ! [7: say known hints from the subtable entry] say__p=1;ParaContent(); (PHR_749_r123 (TableLookUpEntry(ct_0,108,ct_1))); .L_Say1101; .L_SayX1022; ! phrase 8 ! [8: let __index be 0] t_1 = 0; ! phrase 9 ! [9: while __index < 1 begin] while (((t_1 < 1))) { ! phrase 10 ! [10: let __x be the chosen letter] t_2 = GetKey() ; ! phrase 11 ! [11: if __x is 13 or __x is 31 or __x is 32 , let __index be 1] if ((((t_2 == 13))) || ((((t_2 == 31))) || (((t_2 == 32))))) { t_1 = 1; } ! phrase 12 ! [12: if __x is 72 or __x is 104 , say hints from the subtable entry] if ((((t_2 == 72))) || (((t_2 == 104)))) { say__p=1;ParaContent(); (PHR_750_r124 (TableLookUpEntry(ct_0,108,ct_1))); .L_Say1102; .L_SayX1023; } ! phrase 13 ! [13: end while] } ! phrase 14 ! [14: now the current menu title is temporary title] (Global_Vars-->11) = t_0; rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Last hate rule ( this is the standard hate rule ): [ R_834 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person t_3 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: if the player is a friendly alive person and friendly hates hostile and at least one hostile alive person is enclosed by the location begin] if ((((player ofclass K8_person) && ((Adj_95_t1_v9(player))) && ((Adj_33_t1_v9(player))))) && (((((Relation_TestVtoV(I91_friendly,Rel_Record_67,I93_hostile,false))))) && ((Prop_389())))) { ! phrase 2 ! [2: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: repeat with x running through alive not passive persons enclosed by the location begin] for (t_0=Prop_390(0), t_1=Prop_390(t_0): t_0: t_0=t_1, t_1=Prop_390(t_1)) { ! phrase 5 ! [5: repeat with y running through alive persons enclosed by the location begin] for (t_2=Prop_391(0), t_3=Prop_391(t_2): t_2: t_2=t_3, t_3=Prop_391(t_3)) { ! phrase 6 ! [6: if x opposes y begin] if ((((Relation_69(t_0,t_2))))) { ! phrase 7 ! [7: rule succeeds] RulebookSucceeds(); rtrue; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } ! phrase 10 ! [10: end repeat] } ! phrase 11 ! [11: rule fails] RulebookFails(); rtrue; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! First attack modifier rule ( this is the standard attack roll rule ): [ R_974 ; ! phrase 1 ! [1: now the attack strength is a random number between 1 and 10] (Global_Vars-->45) = R_DecimalNumber(1, 10) ; ! phrase 2 ! [2: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 3 ! [3: say ~[italic type]Rolling ~ , the attack strength , ~[run paragraph on]~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_865; ParaContent(); print (say__n=(Global_Vars-->45)); ParaContent(); RunParagraphOn(); .L_Say1103; .L_SayX1024; ! phrase 4 ! [4: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Report an actor hitting an alive person ( this is the basic flavour rule ): [ R_985 ; if ((act_requester==nothing) && ((noun ofclass K8_person) && ((Adj_33_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_985, 985); ! phrase 1 ! [1: if the attack damage is greater than 0 begin] if ((((Global_Vars-->46) > 0))) { ! phrase 2 ! [2: say ~[The global attacker] hit[s] [the global defender].[run paragraph on]~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_1534; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say1104; .L_SayX1025; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~[The global attacker] miss[es] [the global defender].[run paragraph on]~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_1535; ParaContent(); (PHR_902_r67 ());ParaContent(); print (PrintText) SC_209; ParaContent(); print (the) (Global_Vars-->42); ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say1105; .L_SayX1026; ! phrase 5 ! [5: end if] } } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_985, 985, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Report an actor hitting a dead pc ( this is the basic fatal player flavour rule ): [ R_986 ; if ((act_requester==nothing) && (((~~Adj_33_t1_v9(noun))) && ((Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_986, 986); ! phrase 1 ! [1: say ~You are killed by [the global attacker].[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1536; ParaContent(); print (the) (Global_Vars-->41); ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say1106; .L_SayX1027; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_986, 986, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Report an actor hitting a dead npc ( this is the basic fatal flavour rule ): [ R_987 ; if ((act_requester==nothing) && (((~~Adj_33_t1_v9(noun))) && ((~~Adj_35_t1_v9(noun))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_987, 987); ! phrase 1 ! [1: say ~[The global attacker] kill[s] [the name of the global defender].[run paragraph on]~] say__p=1;ParaContent(); print (The) (Global_Vars-->41); ParaContent(); print (PrintText) SC_1537; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; ParaContent(); (PHR_830_r63 ((Global_Vars-->42)));ParaContent(); print (PrintText) SC_310; ParaContent(); RunParagraphOn(); .L_Say1107; .L_SayX1028; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_987, 987, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Check attacking the player ( this is the do not kill yourself rule ): [ R_1002 ; if ( (actor==player) && ((noun == player) && (true))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_1002, 1002); ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); ! phrase 2 ! [2: say ~You are not that desperate!~ instead] say__p=1;ParaContent(); print (PrintText) SC_691; new_line; rtrue; .L_Say1108; .L_SayX1029; rtrue; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1002, 1002, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! A check attacking rule ( this is the do not attack friendly people rule ): [ R_1003 ; if (actor == player) { if (debug_rules) DB_Rule(R_1003, 1003); ! phrase 1 ! [1: if the faction of the player is the faction of the noun begin] if (((GProperty(9, player,p111_faction) == GProperty(OBJECT_TY, noun,p111_faction)))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~[The noun] is your friend, not your enemy!~ instead] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_712; new_line; rtrue; .L_Say1109; .L_SayX1030; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1003, 1003, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! A check attacking rule ( this is the do not attack neutral people rule ): [ R_1004 ; if (actor == player) { if (debug_rules) DB_Rule(R_1004, 1004); ! phrase 1 ! [1: if the player does not oppose the noun begin] if (((~~(((Relation_69(player,noun))))))) { ! phrase 2 ! [2: take no time] (PHR_853_r33 ()); ! phrase 3 ! [3: say ~[The noun] is not your enemy.~ instead] say__p=1;ParaContent(); print (The) noun; ParaContent(); print (PrintText) SC_713; new_line; rtrue; .L_Say1110; .L_SayX1031; rtrue; ! phrase 4 ! [4: end if] } } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_1004, 1004, true); rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Rule for damage modifier ( this is the concentration damage modifier rule ): [ R_1013 t_0 ! Local variable e.g. 'bonus' = number ; ! phrase 1 ! [1: let the bonus be 0] t_0 = 0; ! phrase 2 ! [2: if the concentration of the actor is begin] switch(GProperty(9, actor,p26_concentration)) { ! phrase 3 ! [3: -- 2] 2: ! phrase 4 ! [4: now the bonus is 2] t_0 = 2; ! phrase 5 ! [5: -- 3] ; 3: ! phrase 6 ! [6: now the bonus is 4] t_0 = 4; ! phrase 7 ! [7: -- otherwise] ; default: ! phrase 8 ! [8: make no decision] rfalse; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: if the numbers boolean is true begin] if (((((Global_Vars-->40) && true) == (1 && true)))) { ! phrase 11 ! [11: say ~ + ~ , the bonus , ~ (concentration)[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_667; ParaContent(); print (say__n=t_0); ParaContent(); print (PrintText) SC_898; ParaContent(); RunParagraphOn(); .L_Say1111; .L_SayX1032; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: increase the attack damage by the bonus] (Global_Vars-->46) = (Global_Vars-->46) + t_0; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! An aftereffects rule ( this is the lose concentration when hit rule ): [ R_1014 ; ! phrase 1 ! [1: if the attack damage is greater than 0 and the global defender is alive begin] if (((((Global_Vars-->46) > 0))) && ((((Adj_33_t1_v9((Global_Vars-->42))))))) { ! phrase 2 ! [2: let the global defender lose concentration] (PHR_1016_r82 ((Global_Vars-->42))); ! phrase 3 ! [3: end if] } rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Last lose concentration prose rule for a person ( called P ) ( this is the standard lose concentration prose rule ): [ R_1017 t_0 ! Local variable e.g. 'P' = person ; if ((t_0 = parameter_object, (((t_0=(parameter_object), true) && (parameter_object ofclass K8_person))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_1017, 1017); ! phrase 1 ! [1: say ~ [The P] lose[s] [bold type]concentration[roman type]![run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_1538; ParaContent(); STextSubstitution(); ParaContent(); print (PrintText) SC_209; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1073; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; ParaContent(); RunParagraphOn(); .L_Say1112; .L_SayX1033; } ! Runs only when pattern matches else if (debug_rules > 1) DB_Rule(R_1017, 1017, true); rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! This is the suit check rule: [ R_1368 t_0 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if the player wears a suit begin] if ((Prop_392())) { ! phrase 2 ! [2: let item be a random suit worn by the player] t_0 = (Prop_393()) ; ! phrase 3 ! [3: take no time] (PHR_853_r33 ()); ! phrase 4 ! [4: say ~You will first have to take off [the item].~] say__p=1;ParaContent(); print (PrintText) SC_684; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_310; new_line; .L_Say1113; .L_SayX1034; ! phrase 5 ! [5: rule fails] RulebookFails(); rtrue; ! phrase 6 ! [6: end if] } rfalse; ]; ! No specific request ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! Carry out asking for help ( this is the help request rule ): [ R_2154 ; if (actor == player) { if (debug_rules) DB_Rule(R_2154, 2154); ! phrase 1 ! [1: do nothing] ; } ! Runs only when actor is the player else if (debug_rules > 1) DB_Rule(R_2154, 2154, true); rfalse; ]; ! Definitions of adjectives ! No specific request ! From the Standard Rules ! Definition: [ R_0 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_1 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_2 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_3 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_4 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_5 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_6 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_7 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_37 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_38 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_39 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_40 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_41 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_42 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_43 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_44 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_45 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_46 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_47 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_48 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_49 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_50 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_51 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_52 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_53 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_54 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_55 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_56 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From the Standard Rules ! Definition: [ R_84 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Epistemology" by Eric Eve ! Definition: [ R_772 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Epistemology" by Eric Eve ! Definition: [ R_773 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Inform ATTACK Core" by Victor Gijsbers ! Definition: [ R_827 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Definition: [ R_954 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Inform ATTACK" by Victor Gijsbers ! Definition: [ R_965 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! Definition: [ R_1110 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Definition: [ R_1207 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Systems" by Victor Gijsbers ! Definition: [ R_1224 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Items" by Victor Gijsbers ! Definition: [ R_1384 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Definition: [ R_1758 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Monsters" by Victor Gijsbers ! Definition: [ R_1907 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Definition: [ R_2091 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Definition: [ R_2092 t_0 ! Call parameter 'it' = object ; rfalse; ]; ! No specific request ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! Definition: [ R_2093 t_0 ! Call parameter 'it' = object ; rfalse; ]; [ Adj_0_t1_v9 ! meaning of "worn" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((player == WearerOf(t_0))))); rfalse; ]; [ Adj_1_t1_v9 ! meaning of "carried" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((player == CarrierOf(t_0))))); rfalse; ]; [ Adj_2_t1_v9 ! meaning of "held" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((player == HolderOf(t_0))))); rfalse; ]; [ Adj_3_t1_v9 ! meaning of "visible" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((TestVisibility(player,t_0))))); rfalse; ]; [ Adj_4_t1_v9 ! meaning of "invisible" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return (~~(((((TestVisibility(player,t_0))))))); rfalse; ]; [ Adj_5_t1_v9 ! meaning of "touchable" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((TestTouchability(player,t_0))))); rfalse; ]; [ Adj_6_t1_v9 ! meaning of "untouchable" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return (~~(((((TestTouchability(player,t_0))))))); rfalse; ]; [ Adj_7_t1_v9 ! meaning of "concealed" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((TestConcealment( (HolderOf(t_0)) ,t_0))))); rfalse; ]; [ Adj_8_t1_v9 ! meaning of "unconcealed" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return (~~(((((TestConcealment( (HolderOf(t_0)) ,t_0))))))); rfalse; ]; [ Adj_9_t1_v9 ! meaning of "on-stage" t_0 ! Call parameter 'it' = number ; if (t_0 ofclass K2_thing) return ((OnStage(t_0, -1))); rfalse; ]; [ Adj_10_t1_v9 ! meaning of "off-stage" t_0 ! Call parameter 'it' = number ; if (t_0 ofclass K2_thing) return (~~(((OnStage(t_0, -1))))); rfalse; ]; [ Adj_11_t1_v9 ! meaning of "adjacent" t_0 ! Call parameter 'it' = room ; if (t_0 ofclass K1_room) return ((((TestAdjacency(real_location,t_0))))); rfalse; ]; [ Adj_12_t1_v10 ! meaning of "even" t_0 ! Call parameter 'it' = number ; return (((( (IntegerRemainder(t_0,2)) == 0)))); rfalse; ]; [ Adj_13_t1_v10 ! meaning of "odd" t_0 ! Call parameter 'it' = number ; return (~~((((( (IntegerRemainder(t_0,2)) == 0)))))); rfalse; ]; [ Adj_14_t1_v10 ! meaning of "positive" t_0 ! Call parameter 'it' = number ; return ((((t_0 > 0)))); rfalse; ]; [ Adj_15_t1_v10 ! meaning of "negative" t_0 ! Call parameter 'it' = number ; return ((((t_0 < 0)))); rfalse; ]; [ Adj_16_t1_v12 ! meaning of "empty" t_0 ! Call parameter 'it' = text ; return ((((t_0 == EMPTY_TEXT_VALUE)))); rfalse; ]; [ Adj_16_t1_v13 ! meaning of "empty" t_0 ! Call parameter 'it' = number ; return ((INDEXED_TEXT_TY_Empty(t_0))); rfalse; ]; [ Adj_16_t1_v17 ! meaning of "empty" t_0 ! Call parameter 'it' = table name ; return (((( TableFilledRows(t_0) == 0)))); rfalse; ]; [ Adj_16_t1_v28 ! meaning of "empty" t_0 ! Call parameter 'it' = number ; return ((RulebookEmpty(t_0))); rfalse; ]; [ Adj_16_t1_v29 ! meaning of "empty" t_0 ! Call parameter 'it' = number ; return ((ActivityEmpty(t_0))); rfalse; ]; [ Adj_16_t1_v30 ! meaning of "empty" t_0 ! Call parameter 'it' = number ; return ((LIST_OF_TY_Empty(t_0))); rfalse; ]; [ Adj_16_t1_v26 ! meaning of "empty" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_Empty(t_0, -1))); rfalse; ]; [ Adj_17_t1_v12 ! meaning of "non-empty" t_0 ! Call parameter 'it' = text ; return (~~(((((t_0 == EMPTY_TEXT_VALUE)))))); rfalse; ]; [ Adj_17_t1_v13 ! meaning of "non-empty" t_0 ! Call parameter 'it' = number ; return (~~(((INDEXED_TEXT_TY_Empty(t_0))))); rfalse; ]; [ Adj_17_t1_v17 ! meaning of "non-empty" t_0 ! Call parameter 'it' = table name ; return (~~((((( TableFilledRows(t_0) == 0)))))); rfalse; ]; [ Adj_17_t1_v28 ! meaning of "non-empty" t_0 ! Call parameter 'it' = number ; return (~~(((RulebookEmpty(t_0))))); rfalse; ]; [ Adj_17_t1_v29 ! meaning of "non-empty" t_0 ! Call parameter 'it' = number ; return (~~(((ActivityEmpty(t_0))))); rfalse; ]; [ Adj_17_t1_v30 ! meaning of "non-empty" t_0 ! Call parameter 'it' = number ; return (~~(((LIST_OF_TY_Empty(t_0))))); rfalse; ]; [ Adj_17_t1_v26 ! meaning of "non-empty" t_0 ! Call parameter 'it' = number ; return (~~(((RELATION_TY_Empty(t_0, -1))))); rfalse; ]; [ Adj_18_t1_v39 ! meaning of "happening" t_0 ! Call parameter 'it' = scene ; return ((scene_status-->(t_0-1)==1)); rfalse; ]; [ Adj_19_t1_v17 ! meaning of "full" t_0 ! Call parameter 'it' = table name ; return (((( TableBlankRows(t_0) == 0)))); rfalse; ]; [ Adj_20_t1_v17 ! meaning of "non-full" t_0 ! Call parameter 'it' = table name ; return (~~((((( TableBlankRows(t_0) == 0)))))); rfalse; ]; [ Adj_21_t1_v29 ! meaning of "going on" t_0 ! Call parameter 'it' = number ; return ((TestActivity(t_0))); rfalse; ]; [ Adj_22_t1_v15 ! meaning of "active" t_0 ! Call parameter 'it' = number ; return ((TestUseOption(t_0))); rfalse; ]; [ Adj_23_t1_v15 ! meaning of "inactive" t_0 ! Call parameter 'it' = number ; return (~~(((TestUseOption(t_0))))); rfalse; ]; [ Adj_24_t1_v26 ! meaning of "equivalence" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_EquivalenceAdjective(t_0, -1))); rfalse; ]; [ Adj_25_t1_v26 ! meaning of "symmetric" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_SymmetricAdjective(t_0, -1))); rfalse; ]; [ Adj_26_t1_v26 ! meaning of "one-to-one" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_OToOAdjective(t_0, -1))); rfalse; ]; [ Adj_27_t1_v26 ! meaning of "one-to-various" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_OToVAdjective(t_0, -1))); rfalse; ]; [ Adj_28_t1_v26 ! meaning of "various-to-one" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_VToOAdjective(t_0, -1))); rfalse; ]; [ Adj_29_t1_v26 ! meaning of "various-to-various" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_VToVAdjective(t_0, -1))); rfalse; ]; [ Adj_30_t1_v9 ! meaning of "locale-supportable" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return (((((~~(((Adj_64_t1_v9(t_0))))))) && ((((~~(((Adj_72_t1_v9(t_0))))))) && (((~~(((Adj_69_t1_v9(t_0)))))))))); rfalse; ]; [ Adj_31_t1_v9 ! meaning of "known" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((((Adj_93_t1_v9(t_0))))) || ((((Adj_91_t1_v9(t_0))))))); rfalse; ]; [ Adj_32_t1_v9 ! meaning of "unknown" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((~~(((Adj_31_t1_v9(t_0)))))))); rfalse; ]; [ Adj_33_t1_v9 ! meaning of "alive" t_0 ! Call parameter 'it' = person ; if (t_0 ofclass K8_person) return ((((GProperty(9, t_0,p14_health) > 0)))); rfalse; ]; [ Adj_34_t1_v9 ! meaning of "dead" t_0 ! Call parameter 'it' = person ; if (t_0 ofclass K8_person) return (~~(((((GProperty(9, t_0,p14_health) > 0)))))); rfalse; ]; [ Adj_35_t1_v9 ! meaning of "a pc" t_0 ! Call parameter 'it' = person ; if (t_0 ofclass K8_person) return ((((t_0 == player)))); rfalse; ]; [ Adj_36_t1_v9 ! meaning of "an npc" t_0 ! Call parameter 'it' = person ; if (t_0 ofclass K8_person) return (~~(((((t_0 == player)))))); rfalse; ]; [ Adj_37_t1_v9 ! meaning of "artificial" t_0 ! Call parameter 'it' = weapon ; if (t_0 ofclass K17_weapon) return ((((~~((t_0 ofclass K18_natural_weapon)))))); rfalse; ]; [ Adj_38_t1_v9 ! meaning of "not-too-difficult" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((~~((GProperty(9, t_0,p27_difficulty_level) > (Global_Vars-->131))))))); rfalse; ]; [ Adj_39_t1_v9 ! meaning of "hot" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((GProperty(9, t_0,p50_heat_strength) > 0)))); rfalse; ]; [ Adj_40_t1_v9 ! meaning of "internally-heated" t_0 ! Call parameter 'it' = thing ; if (t_0 ofclass K2_thing) return ((((GProperty(9, t_0,p52_internal_heat) > 0)))); rfalse; ]; [ Adj_41_t1_v9 ! meaning of "plain" t_0 ! Call parameter 'it' = scroll ; if (t_0 ofclass K38_scroll) return (((((GProperty(9, t_0,p57_true_name) && true) == (1 && true))))); rfalse; ]; [ Adj_42_t1_v9 ! meaning of "obfuscated" t_0 ! Call parameter 'it' = scroll ; if (t_0 ofclass K38_scroll) return (~~((((((GProperty(9, t_0,p57_true_name) && true) == (1 && true))))))); rfalse; ]; [ Adj_43_t1_v9 ! meaning of "stunned" t_0 ! Call parameter 'it' = person ; if (t_0 ofclass K8_person) return ((((GProperty(9, t_0,p60_stun_count) > 0)))); rfalse; ]; [ Adj_44_t1_v9 ! meaning of "constriction-preventing" t_0 ! Call parameter 'it' = clothing ; if (t_0 ofclass K24_clothing) return ((((GProperty(9, t_0,p61_constriction_prevention) > 0)))); rfalse; ]; [ Adj_45_t1_v9 ! meaning of "safe" t_0 ! Call parameter 'it' = room ; if (t_0 ofclass K1_room) return ((((((Adj_46_t1_v9(t_0))))) && ((((Adj_126_t1_v9(t_0))))))); rfalse; ]; [ Adj_46_t1_v9 ! meaning of "safe-1" t_0 ! Call parameter 'it' = room ; if (t_0 ofclass K1_room) return ((((( (Prop_394(,t_0)) == 0))) || ((((t_0 == real_location))) || (((t_0 == (Global_Vars-->127))))))); rfalse; ]; [ Adj_47_t1_v9 ! meaning of "hater" t_0 ! Call parameter 'it' = person ; if (t_0 ofclass K8_person) return (((((Relation_TestVtoV(GProperty(9, t_0,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false)))))); rfalse; ]; [ Adj_48_t1_v9 ! meaning of "plural-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, pluralname)); rfalse; ]; [ Adj_49_t1_v9 ! meaning of "singular-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, pluralname) == false); rfalse; ]; [ Adj_50_t1_v9 ! meaning of "proper-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, proper)); rfalse; ]; [ Adj_51_t1_v9 ! meaning of "improper-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, proper) == false); rfalse; ]; [ Adj_52_t1_v9 ! meaning of "privately-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, privately_named)); rfalse; ]; [ Adj_53_t1_v9 ! meaning of "publically-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, privately_named) == false); rfalse; ]; [ Adj_54_t1_v9 ! meaning of "lighted" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_55_t1_v9 ! meaning of "dark" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, light) == false); rfalse; ]; [ Adj_56_t1_v9 ! meaning of "visited" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, visited)); rfalse; ]; [ Adj_57_t1_v9 ! meaning of "unvisited" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, visited) == false); rfalse; ]; [ Adj_58_t1_v9 ! meaning of "lit" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_59_t1_v9 ! meaning of "unlit" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, light) == false); rfalse; ]; [ Adj_60_t1_v9 ! meaning of "edible" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, edible)); rfalse; ]; [ Adj_61_t1_v9 ! meaning of "inedible" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, edible) == false); rfalse; ]; [ Adj_62_t1_v9 ! meaning of "fixed in place" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, static)); rfalse; ]; [ Adj_63_t1_v9 ! meaning of "portable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, static) == false); rfalse; ]; [ Adj_64_t1_v9 ! meaning of "scenery" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, scenery)); rfalse; ]; [ Adj_65_t1_v9 ! meaning of "wearable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, clothing)); rfalse; ]; [ Adj_66_t1_v9 ! meaning of "pushable between rooms" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, pushable)); rfalse; ]; [ Adj_67_t1_v9 ! meaning of "handled" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, moved)); rfalse; ]; [ Adj_68_t1_v9 ! meaning of "described" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, concealed) == false); rfalse; ]; [ Adj_69_t1_v9 ! meaning of "undescribed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, concealed)); rfalse; ]; [ Adj_70_t1_v9 ! meaning of "marked for listing" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, workflag)); rfalse; ]; [ Adj_71_t1_v9 ! meaning of "unmarked for listing" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, workflag) == false); rfalse; ]; [ Adj_72_t1_v9 ! meaning of "mentioned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, mentioned)); rfalse; ]; [ Adj_73_t1_v9 ! meaning of "unmentioned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, mentioned) == false); rfalse; ]; [ Adj_74_t1_v9 ! meaning of "enterable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, enterable)); rfalse; ]; [ Adj_75_t1_v9 ! meaning of "opaque" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, transparent) == false); rfalse; ]; [ Adj_76_t1_v9 ! meaning of "transparent" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, transparent)); rfalse; ]; [ Adj_77_t1_v9 ! meaning of "open" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, open)); rfalse; ]; [ Adj_78_t1_v9 ! meaning of "closed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, open) == false); rfalse; ]; [ Adj_79_t1_v9 ! meaning of "openable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, openable)); rfalse; ]; [ Adj_80_t1_v9 ! meaning of "unopenable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, openable) == false); rfalse; ]; [ Adj_81_t1_v9 ! meaning of "lockable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, lockable)); rfalse; ]; [ Adj_82_t1_v9 ! meaning of "locked" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, locked)); rfalse; ]; [ Adj_83_t1_v9 ! meaning of "unlocked" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, locked) == false); rfalse; ]; [ Adj_84_t1_v9 ! meaning of "female" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, female)); rfalse; ]; [ Adj_85_t1_v9 ! meaning of "male" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, female) == false); rfalse; ]; [ Adj_86_t1_v9 ! meaning of "neuter" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, neuter)); rfalse; ]; [ Adj_87_t1_v9 ! meaning of "switched on" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, on)); rfalse; ]; [ Adj_88_t1_v9 ! meaning of "switched off" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, on) == false); rfalse; ]; [ Adj_89_t1_v39 ! meaning of "recurring" t_0 ! Call parameter 'it' = scene ; return (GProperty(SCENE_TY, t_0, p104_recurring)); rfalse; ]; [ Adj_90_t1_v39 ! meaning of "non-recurring" t_0 ! Call parameter 'it' = scene ; return (GProperty(SCENE_TY, t_0, p104_recurring) == false); rfalse; ]; [ Adj_91_t1_v9 ! meaning of "seen" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p106_seen)); rfalse; ]; [ Adj_92_t1_v9 ! meaning of "unseen" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p106_seen) == false); rfalse; ]; [ Adj_93_t1_v9 ! meaning of "familiar" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p108_familiar)); rfalse; ]; [ Adj_94_t1_v9 ! meaning of "unfamiliar" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p108_familiar) == false); rfalse; ]; [ Adj_95_t1_v9 ! meaning of "friendly" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p111_faction) == 1); rfalse; ]; [ Adj_96_t1_v9 ! meaning of "passive" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p111_faction) == 2); rfalse; ]; [ Adj_97_t1_v9 ! meaning of "hostile" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p111_faction) == 3); rfalse; ]; [ Adj_98_t1_v9 ! meaning of "at-Inactive" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p112_combat_state) == 1); rfalse; ]; [ Adj_99_t1_v9 ! meaning of "at-Act" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p112_combat_state) == 2); rfalse; ]; [ Adj_100_t1_v9 ! meaning of "at-React" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p112_combat_state) == 3); rfalse; ]; [ Adj_101_t1_v9 ! meaning of "ambiguously plural" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p114_ambiguously_plural)); rfalse; ]; [ Adj_102_t1_v9 ! meaning of "ordinarily enumerated" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p114_ambiguously_plural) == false); rfalse; ]; [ Adj_103_t1_v9 ! meaning of "readied" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p116_readied)); rfalse; ]; [ Adj_104_t1_v9 ! meaning of "not readied" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p116_readied) == false); rfalse; ]; [ Adj_105_t1_v9 ! meaning of "at parry" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p118_at_parry)); rfalse; ]; [ Adj_106_t1_v9 ! meaning of "not at parry" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p118_at_parry) == false); rfalse; ]; [ Adj_107_t1_v9 ! meaning of "at dodge" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p120_at_dodge)); rfalse; ]; [ Adj_108_t1_v9 ! meaning of "not at dodge" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p120_at_dodge) == false); rfalse; ]; [ Adj_109_t1_v9 ! meaning of "cardinal" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p122_cardinal)); rfalse; ]; [ Adj_110_t1_v9 ! meaning of "not cardinal" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p122_cardinal) == false); rfalse; ]; [ Adj_111_t1_v9 ! meaning of "placed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p124_placed)); rfalse; ]; [ Adj_112_t1_v9 ! meaning of "not placed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p124_placed) == false); rfalse; ]; [ Adj_113_t1_v9 ! meaning of "connectable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p127_connectable)); rfalse; ]; [ Adj_114_t1_v9 ! meaning of "not connectable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p127_connectable) == false); rfalse; ]; [ Adj_115_t1_v9 ! meaning of "connection-inviting" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p129_connection_inviting)); rfalse; ]; [ Adj_116_t1_v9 ! meaning of "not connection-inviting" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p129_connection_inviting) == false); rfalse; ]; [ Adj_117_t1_v9 ! meaning of "placeable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p131_placeable)); rfalse; ]; [ Adj_118_t1_v9 ! meaning of "not placeable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p131_placeable) == false); rfalse; ]; [ Adj_119_t1_v9 ! meaning of "habitable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p133_habitable)); rfalse; ]; [ Adj_120_t1_v9 ! meaning of "not habitable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p133_habitable) == false); rfalse; ]; [ Adj_121_t1_v9 ! meaning of "treasurable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p135_treasurable)); rfalse; ]; [ Adj_122_t1_v9 ! meaning of "not treasurable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p135_treasurable) == false); rfalse; ]; [ Adj_123_t1_v9 ! meaning of "extra-accepting" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p137_extra_accepting)); rfalse; ]; [ Adj_124_t1_v9 ! meaning of "not extra-accepting" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p137_extra_accepting) == false); rfalse; ]; [ Adj_125_t1_v9 ! meaning of "nogo" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p139_nogo)); rfalse; ]; [ Adj_126_t1_v9 ! meaning of "notnogo" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p139_nogo) == false); rfalse; ]; [ Adj_127_t1_v9 ! meaning of "vp-agnostic" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p141_vertical_placement) == 1); rfalse; ]; [ Adj_128_t1_v9 ! meaning of "vp-underground" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p141_vertical_placement) == 2); rfalse; ]; [ Adj_129_t1_v9 ! meaning of "vp-likely-underground" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p141_vertical_placement) == 3); rfalse; ]; [ Adj_130_t1_v9 ! meaning of "vp-above-ground" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p141_vertical_placement) == 4); rfalse; ]; [ Adj_131_t1_v9 ! meaning of "vp-high" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p141_vertical_placement) == 5); rfalse; ]; [ Adj_132_t1_v9 ! meaning of "vp-likely-high" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p141_vertical_placement) == 6); rfalse; ]; [ Adj_133_t1_v9 ! meaning of "civilised" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 1); if (t_0) return (GProperty(9, t_0, p142_mood) == 1); if (t_0) return (GProperty(9, t_0, p142_mood) == 1); rfalse; ]; [ Adj_134_t1_v9 ! meaning of "religious" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 2); if (t_0) return (GProperty(9, t_0, p142_mood) == 2); if (t_0) return (GProperty(9, t_0, p142_mood) == 2); rfalse; ]; [ Adj_135_t1_v9 ! meaning of "barren" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 3); if (t_0) return (GProperty(9, t_0, p142_mood) == 3); if (t_0) return (GProperty(9, t_0, p142_mood) == 3); rfalse; ]; [ Adj_136_t1_v9 ! meaning of "deathly" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 4); if (t_0) return (GProperty(9, t_0, p142_mood) == 4); if (t_0) return (GProperty(9, t_0, p142_mood) == 4); rfalse; ]; [ Adj_137_t1_v9 ! meaning of "elemental" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 5); if (t_0) return (GProperty(9, t_0, p142_mood) == 5); if (t_0) return (GProperty(9, t_0, p142_mood) == 5); rfalse; ]; [ Adj_138_t1_v9 ! meaning of "magical" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 6); if (t_0) return (GProperty(9, t_0, p142_mood) == 6); if (t_0) return (GProperty(9, t_0, p142_mood) == 6); rfalse; ]; [ Adj_139_t1_v9 ! meaning of "alchemical" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 7); if (t_0) return (GProperty(9, t_0, p142_mood) == 7); if (t_0) return (GProperty(9, t_0, p142_mood) == 7); rfalse; ]; [ Adj_140_t1_v9 ! meaning of "non-mood" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p142_mood) == 8); if (t_0) return (GProperty(9, t_0, p142_mood) == 8); if (t_0) return (GProperty(9, t_0, p142_mood) == 8); rfalse; ]; [ Adj_141_t1_v9 ! meaning of "consecrated" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p143_consecrated)); rfalse; ]; [ Adj_142_t1_v9 ! meaning of "not consecrated" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p143_consecrated) == false); rfalse; ]; [ Adj_143_t1_v9 ! meaning of "a digging tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p145_digging_tool)); rfalse; ]; [ Adj_144_t1_v9 ! meaning of "not a digging tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p145_digging_tool) == false); rfalse; ]; [ Adj_145_t1_v9 ! meaning of "a collapsing tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p147_collapsing_tool)); rfalse; ]; [ Adj_146_t1_v9 ! meaning of "not a collapsing tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p147_collapsing_tool) == false); rfalse; ]; [ Adj_147_t1_v9 ! meaning of "emotionless" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p149_emotionless)); rfalse; ]; [ Adj_148_t1_v9 ! meaning of "not emotionless" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p149_emotionless) == false); rfalse; ]; [ Adj_149_t1_v9 ! meaning of "non-attacker" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p151_non_attacker)); rfalse; ]; [ Adj_150_t1_v9 ! meaning of "weapon user" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p152_weapon_user)); rfalse; ]; [ Adj_151_t1_v9 ! meaning of "not weapon user" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p152_weapon_user) == false); rfalse; ]; [ Adj_152_t1_v9 ! meaning of "tiny" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p154_size) == 1); rfalse; ]; [ Adj_153_t1_v9 ! meaning of "small" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p154_size) == 2); rfalse; ]; [ Adj_154_t1_v9 ! meaning of "medium" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p154_size) == 3); rfalse; ]; [ Adj_155_t1_v9 ! meaning of "large" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p154_size) == 4); rfalse; ]; [ Adj_156_t1_v9 ! meaning of "huge" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p154_size) == 5); rfalse; ]; [ Adj_157_t1_v9 ! meaning of "gargantuan" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p154_size) == 6); rfalse; ]; [ Adj_158_t1_v9 ! meaning of "granted" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p155_granted)); rfalse; ]; [ Adj_159_t1_v9 ! meaning of "not granted" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p155_granted) == false); rfalse; ]; [ Adj_160_t1_v9 ! meaning of "flyer" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p158_flyer)); rfalse; ]; [ Adj_161_t1_v9 ! meaning of "not flyer" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p158_flyer) == false); rfalse; ]; [ Adj_162_t1_v9 ! meaning of "blinded" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p160_blinded)); rfalse; ]; [ Adj_163_t1_v9 ! meaning of "not blinded" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p160_blinded) == false); rfalse; ]; [ Adj_164_t1_v9 ! meaning of "eyeless" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p162_eyeless)); rfalse; ]; [ Adj_165_t1_v9 ! meaning of "not eyeless" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p162_eyeless) == false); rfalse; ]; [ Adj_166_t1_v9 ! meaning of "spontaneous teleporter" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p164_spontaneous_teleporter)); rfalse; ]; [ Adj_167_t1_v9 ! meaning of "not spontaneous teleporter" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p164_spontaneous_teleporter) == false); rfalse; ]; [ Adj_168_t1_v9 ! meaning of "teleportable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p166_teleportable)); rfalse; ]; [ Adj_169_t1_v9 ! meaning of "not teleportable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p166_teleportable) == false); rfalse; ]; [ Adj_170_t1_v9 ! meaning of "teleport impossible aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p168_teleport_impossible_awa)); rfalse; ]; [ Adj_171_t1_v9 ! meaning of "not teleport impossible aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p168_teleport_impossible_awa) == false); rfalse; ]; [ Adj_172_t1_v9 ! meaning of "follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p170_follower)); rfalse; ]; [ Adj_173_t1_v9 ! meaning of "not follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p170_follower) == false); rfalse; ]; [ Adj_174_t1_v9 ! meaning of "undead" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p111_faction) == 4); rfalse; ]; [ Adj_175_t1_v9 ! meaning of "horrific" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p111_faction) == 5); rfalse; ]; [ Adj_176_t1_v9 ! meaning of "demonic" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p111_faction) == 6); rfalse; ]; [ Adj_177_t1_v9 ! meaning of "ranged" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p172_ranged)); rfalse; ]; [ Adj_178_t1_v9 ! meaning of "not ranged" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p172_ranged) == false); rfalse; ]; [ Adj_179_t1_v9 ! meaning of "armour-stoppable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p174_armour_stoppable)); rfalse; ]; [ Adj_180_t1_v9 ! meaning of "not armour-stoppable" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p174_armour_stoppable) == false); rfalse; ]; [ Adj_181_t1_v50 ! meaning of "burner" t_0 ! Call parameter 'it' = material ; return (GProperty(50, t_0, p178_heat_behaviour) == 1); rfalse; ]; [ Adj_182_t1_v50 ! meaning of "melter" t_0 ! Call parameter 'it' = material ; return (GProperty(50, t_0, p178_heat_behaviour) == 2); rfalse; ]; [ Adj_183_t1_v9 ! meaning of "other-material" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 1); rfalse; ]; [ Adj_184_t1_v9 ! meaning of "iron" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 2); rfalse; ]; [ Adj_185_t1_v9 ! meaning of "silver" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 3); rfalse; ]; [ Adj_186_t1_v9 ! meaning of "paper" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 4); rfalse; ]; [ Adj_187_t1_v9 ! meaning of "cloth" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 5); rfalse; ]; [ Adj_188_t1_v9 ! meaning of "wood" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 6); rfalse; ]; [ Adj_189_t1_v9 ! meaning of "leather" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 7); rfalse; ]; [ Adj_190_t1_v9 ! meaning of "flesh" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 8); rfalse; ]; [ Adj_191_t1_v9 ! meaning of "glass" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 9); rfalse; ]; [ Adj_192_t1_v9 ! meaning of "stone" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 10); rfalse; ]; [ Adj_193_t1_v9 ! meaning of "dragon skin" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 11); rfalse; ]; [ Adj_194_t1_v9 ! meaning of "radiance" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 12); rfalse; ]; [ Adj_195_t1_v9 ! meaning of "adamant" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 13); rfalse; ]; [ Adj_196_t1_v9 ! meaning of "vapour" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p180_material) == 14); rfalse; ]; [ Adj_197_t1_v9 ! meaning of "risky" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p181_risky)); rfalse; ]; [ Adj_198_t1_v9 ! meaning of "not risky" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p181_risky) == false); rfalse; ]; [ Adj_199_t1_v9 ! meaning of "Aite-loved" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p183_aite_loved)); rfalse; ]; [ Adj_200_t1_v9 ! meaning of "not Aite-loved" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p183_aite_loved) == false); rfalse; ]; [ Adj_201_t1_v9 ! meaning of "flaming" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p185_flaming)); rfalse; ]; [ Adj_202_t1_v9 ! meaning of "not flaming" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p185_flaming) == false); rfalse; ]; [ Adj_203_t1_v9 ! meaning of "cooler" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p187_cooler)); rfalse; ]; [ Adj_204_t1_v9 ! meaning of "not cooler" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p187_cooler) == false); rfalse; ]; [ Adj_205_t1_v9 ! meaning of "rusted" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p189_rusted)); rfalse; ]; [ Adj_206_t1_v9 ! meaning of "not rusted" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p189_rusted) == false); rfalse; ]; [ Adj_207_t1_v9 ! meaning of "rust-spored" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p191_rust_spored)); rfalse; ]; [ Adj_208_t1_v9 ! meaning of "not rust-spored" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p191_rust_spored) == false); rfalse; ]; [ Adj_209_t1_v9 ! meaning of "rust-spored-candidate" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p193_rust_spored_candidate)); rfalse; ]; [ Adj_210_t1_v9 ! meaning of "not rust-spored-candidate" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p193_rust_spored_candidate) == false); rfalse; ]; [ Adj_211_t1_v9 ! meaning of "rust-releasing" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p195_rust_releasing)); rfalse; ]; [ Adj_212_t1_v9 ! meaning of "not rust-releasing" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p195_rust_releasing) == false); rfalse; ]; [ Adj_213_t1_v9 ! meaning of "death-blessed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p197_death_blessed)); rfalse; ]; [ Adj_214_t1_v9 ! meaning of "not death-blessed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p197_death_blessed) == false); rfalse; ]; [ Adj_215_t1_v9 ! meaning of "death-cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p199_death_cursed)); rfalse; ]; [ Adj_216_t1_v9 ! meaning of "not death-cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p199_death_cursed) == false); rfalse; ]; [ Adj_217_t1_v9 ! meaning of "human-form" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (GProperty(9, t_0, p201_player_form) == 1); rfalse; ]; [ Adj_218_t1_v9 ! meaning of "ghoul" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (GProperty(9, t_0, p201_player_form) == 2); rfalse; ]; [ Adj_219_t1_v9 ! meaning of "vampire" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (GProperty(9, t_0, p201_player_form) == 3); rfalse; ]; [ Adj_220_t1_v9 ! meaning of "vampire bat" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (GProperty(9, t_0, p201_player_form) == 4); rfalse; ]; [ Adj_221_t1_v9 ! meaning of "hidden" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p202_hidden)); rfalse; ]; [ Adj_222_t1_v9 ! meaning of "not hidden" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p202_hidden) == false); rfalse; ]; [ Adj_223_t1_v9 ! meaning of "on-the-lookout" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p204_on_the_lookout)); rfalse; ]; [ Adj_224_t1_v9 ! meaning of "not on-the-lookout" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p204_on_the_lookout) == false); rfalse; ]; [ Adj_225_t1_v9 ! meaning of "unnaturally aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p206_unnaturally_aware)); rfalse; ]; [ Adj_226_t1_v9 ! meaning of "not unnaturally aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p206_unnaturally_aware) == false); rfalse; ]; [ Adj_227_t1_v9 ! meaning of "unnaturally aware follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p208_unnaturally_aware_follo)); rfalse; ]; [ Adj_228_t1_v9 ! meaning of "not unnaturally aware follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p208_unnaturally_aware_follo) == false); rfalse; ]; [ Adj_229_t1_v9 ! meaning of "smoke attuned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p210_smoke_attuned)); rfalse; ]; [ Adj_230_t1_v9 ! meaning of "not smoke attuned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p210_smoke_attuned) == false); rfalse; ]; [ Adj_231_t1_v9 ! meaning of "ethereal" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p212_ethereal)); rfalse; ]; [ Adj_232_t1_v9 ! meaning of "not ethereal" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p212_ethereal) == false); rfalse; ]; [ Adj_233_t1_v9 ! meaning of "minor" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p214_valuation) == 1); rfalse; ]; [ Adj_234_t1_v9 ! meaning of "major" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p214_valuation) == 2); rfalse; ]; [ Adj_235_t1_v9 ! meaning of "epic" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p214_valuation) == 3); rfalse; ]; [ Adj_236_t1_v9 ! meaning of "unique" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p214_valuation) == 4); rfalse; ]; [ Adj_237_t1_v9 ! meaning of "special" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p214_valuation) == 5); rfalse; ]; [ Adj_238_t1_v9 ! meaning of "non-treasure" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p214_valuation) == 6); rfalse; ]; [ Adj_239_t1_v9 ! meaning of "actual" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p215_actual)); rfalse; ]; [ Adj_240_t1_v9 ! meaning of "prototypical" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p215_actual) == false); rfalse; ]; [ Adj_241_t1_v9 ! meaning of "none-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 1); rfalse; ]; [ Adj_242_t1_v9 ! meaning of "mort-eilysh-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 2); rfalse; ]; [ Adj_243_t1_v9 ! meaning of "naar-od-erae-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 3); rfalse; ]; [ Adj_244_t1_v9 ! meaning of "dolp-zeez-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 4); rfalse; ]; [ Adj_245_t1_v9 ! meaning of "chetnak-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 5); rfalse; ]; [ Adj_246_t1_v9 ! meaning of "cistrob-jirsgev-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 6); rfalse; ]; [ Adj_247_t1_v9 ! meaning of "twan-metier-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 7); rfalse; ]; [ Adj_248_t1_v9 ! meaning of "hermei-le-schim-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 8); rfalse; ]; [ Adj_249_t1_v9 ! meaning of "lonsifira-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 9); rfalse; ]; [ Adj_250_t1_v9 ! meaning of "kripmeteel-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 10); rfalse; ]; [ Adj_251_t1_v9 ! meaning of "souspenot-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 11); rfalse; ]; [ Adj_252_t1_v9 ! meaning of "shalm-sawesas-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 12); rfalse; ]; [ Adj_253_t1_v9 ! meaning of "zyxyz-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); if (t_0) return (GProperty(9, t_0, p218_scroll_parsable) == 13); rfalse; ]; [ Adj_254_t1_v9 ! meaning of "corruptible" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p220_corruptible)); rfalse; ]; [ Adj_255_t1_v9 ! meaning of "incorruptible" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p220_corruptible) == false); rfalse; ]; [ Adj_256_t1_v9 ! meaning of "cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p222_cursed)); rfalse; ]; [ Adj_257_t1_v9 ! meaning of "not cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p222_cursed) == false); rfalse; ]; [ Adj_258_t1_v9 ! meaning of "curse-identified" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p224_curse_identified)); rfalse; ]; [ Adj_259_t1_v9 ! meaning of "not curse-identified" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p224_curse_identified) == false); rfalse; ]; [ Adj_260_t1_v9 ! meaning of "cautious" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p226_cautious)); rfalse; ]; [ Adj_261_t1_v9 ! meaning of "not cautious" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p226_cautious) == false); rfalse; ]; [ Adj_262_t1_v9 ! meaning of "enraged" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p228_enraged)); rfalse; ]; [ Adj_263_t1_v9 ! meaning of "not enraged" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p228_enraged) == false); rfalse; ]; [ Adj_264_t1_v9 ! meaning of "patient" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p230_patient)); rfalse; ]; [ Adj_265_t1_v9 ! meaning of "not patient" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p230_patient) == false); rfalse; ]; [ Adj_266_t1_v9 ! meaning of "greedy" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p232_greedy)); rfalse; ]; [ Adj_267_t1_v9 ! meaning of "not greedy" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p232_greedy) == false); rfalse; ]; [ Adj_268_t1_v9 ! meaning of "at-stun" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p234_at_stun)); rfalse; ]; [ Adj_269_t1_v9 ! meaning of "not at-stun" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p234_at_stun) == false); rfalse; ]; [ Adj_270_t1_v9 ! meaning of "sometime-stunned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p236_sometime_stunned)); rfalse; ]; [ Adj_271_t1_v9 ! meaning of "enslaved" t_0 ! Call parameter 'it' = object ; if (t_0) return (GProperty(9, t_0, p111_faction) == 7); rfalse; ]; [ Adj_272_t1_v9 ! meaning of "tentacle-confused" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p239_tentacle_confused)); rfalse; ]; [ Adj_273_t1_v9 ! meaning of "barkskinned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p240_barkskinned)); rfalse; ]; [ Adj_274_t1_v9 ! meaning of "not barkskinned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p240_barkskinned) == false); rfalse; ]; [ Adj_275_t1_v9 ! meaning of "as-witch" t_0 ! Call parameter 'it' = object ; if (t_0 == I513_aswang) return (GProperty(OBJECT_TY, t_0, p242_as_shape) == 1); rfalse; ]; [ Adj_276_t1_v9 ! meaning of "as-bird" t_0 ! Call parameter 'it' = object ; if (t_0 == I513_aswang) return (GProperty(OBJECT_TY, t_0, p242_as_shape) == 2); rfalse; ]; [ Adj_277_t1_v9 ! meaning of "as-dog" t_0 ! Call parameter 'it' = object ; if (t_0 == I513_aswang) return (GProperty(OBJECT_TY, t_0, p242_as_shape) == 3); rfalse; ]; [ Adj_278_t1_v9 ! meaning of "hexed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p243_hexed)); rfalse; ]; [ Adj_279_t1_v9 ! meaning of "not hexed" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p243_hexed) == false); rfalse; ]; [ Adj_280_t1_v9 ! meaning of "smoke-demoned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p245_smoke_demoned)); rfalse; ]; [ Adj_281_t1_v9 ! meaning of "not smoke-demoned" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p245_smoke_demoned) == false); rfalse; ]; [ Adj_282_t1_v9 ! meaning of "retreater" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p247_retreater)); rfalse; ]; [ Adj_283_t1_v9 ! meaning of "not retreater" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p247_retreater) == false); rfalse; ]; [ Adj_284_t1_v9 ! meaning of "initiative-conferring" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p249_initiative_conferring)); rfalse; ]; [ Adj_285_t1_v9 ! meaning of "not initiative-conferring" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p249_initiative_conferring) == false); rfalse; ]; [ Adj_286_t1_v9 ! meaning of "runner" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p251_runner)); rfalse; ]; [ Adj_287_t1_v9 ! meaning of "not runner" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, p251_runner) == false); rfalse; ]; [ Adj_288_t1_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, worn)); rfalse; ]; [ Adj_289_t1_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, absent)); rfalse; ]; [ Adj_290_t1_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, mark_as_room)); rfalse; ]; [ Adj_291_t1_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (GetEitherOrProperty(t_0, mark_as_thing)); rfalse; ]; [ Adj_9_t2_v9 ! meaning of "on-stage" t_0 ! Call parameter 'it' = number ; if (t_0 ofclass K2_thing) return ((OnStage(t_0, true))); rfalse; ]; [ Adj_10_t2_v9 ! meaning of "off-stage" t_0 ! Call parameter 'it' = number ; if (t_0 ofclass K2_thing) return ((OnStage(t_0, false))); rfalse; ]; [ Adj_16_t2_v26 ! meaning of "empty" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_Empty(t_0, true))); rfalse; ]; [ Adj_17_t2_v26 ! meaning of "non-empty" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_Empty(t_0, false))); rfalse; ]; [ Adj_24_t2_v26 ! meaning of "equivalence" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_EquivalenceAdjective(t_0, true))); rfalse; ]; [ Adj_25_t2_v26 ! meaning of "symmetric" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_SymmetricAdjective(t_0, true))); rfalse; ]; [ Adj_26_t2_v26 ! meaning of "one-to-one" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_OToOAdjective(t_0, true))); rfalse; ]; [ Adj_27_t2_v26 ! meaning of "one-to-various" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_OToVAdjective(t_0, true))); rfalse; ]; [ Adj_28_t2_v26 ! meaning of "various-to-one" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_VToOAdjective(t_0, true))); rfalse; ]; [ Adj_29_t2_v26 ! meaning of "various-to-various" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_VToVAdjective(t_0, true))); rfalse; ]; [ Adj_48_t2_v9 ! meaning of "plural-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, pluralname)); rfalse; ]; [ Adj_49_t2_v9 ! meaning of "singular-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, pluralname, true)); rfalse; ]; [ Adj_50_t2_v9 ! meaning of "proper-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, proper)); rfalse; ]; [ Adj_51_t2_v9 ! meaning of "improper-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, proper, true)); rfalse; ]; [ Adj_52_t2_v9 ! meaning of "privately-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, privately_named)); rfalse; ]; [ Adj_53_t2_v9 ! meaning of "publically-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, privately_named, true)); rfalse; ]; [ Adj_54_t2_v9 ! meaning of "lighted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_55_t2_v9 ! meaning of "dark" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_56_t2_v9 ! meaning of "visited" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, visited)); rfalse; ]; [ Adj_57_t2_v9 ! meaning of "unvisited" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, visited, true)); rfalse; ]; [ Adj_58_t2_v9 ! meaning of "lit" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_59_t2_v9 ! meaning of "unlit" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_60_t2_v9 ! meaning of "edible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, edible)); rfalse; ]; [ Adj_61_t2_v9 ! meaning of "inedible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, edible, true)); rfalse; ]; [ Adj_62_t2_v9 ! meaning of "fixed in place" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, static)); rfalse; ]; [ Adj_63_t2_v9 ! meaning of "portable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, static, true)); rfalse; ]; [ Adj_64_t2_v9 ! meaning of "scenery" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, scenery)); rfalse; ]; [ Adj_65_t2_v9 ! meaning of "wearable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, clothing)); rfalse; ]; [ Adj_66_t2_v9 ! meaning of "pushable between rooms" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, pushable)); rfalse; ]; [ Adj_67_t2_v9 ! meaning of "handled" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, moved)); rfalse; ]; [ Adj_68_t2_v9 ! meaning of "described" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, concealed, true)); rfalse; ]; [ Adj_69_t2_v9 ! meaning of "undescribed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, concealed)); rfalse; ]; [ Adj_70_t2_v9 ! meaning of "marked for listing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, workflag)); rfalse; ]; [ Adj_71_t2_v9 ! meaning of "unmarked for listing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, workflag, true)); rfalse; ]; [ Adj_72_t2_v9 ! meaning of "mentioned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mentioned)); rfalse; ]; [ Adj_73_t2_v9 ! meaning of "unmentioned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mentioned, true)); rfalse; ]; [ Adj_74_t2_v9 ! meaning of "enterable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, enterable)); rfalse; ]; [ Adj_75_t2_v9 ! meaning of "opaque" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, transparent, true)); rfalse; ]; [ Adj_76_t2_v9 ! meaning of "transparent" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, transparent)); rfalse; ]; [ Adj_77_t2_v9 ! meaning of "open" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, open)); rfalse; ]; [ Adj_78_t2_v9 ! meaning of "closed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, open, true)); rfalse; ]; [ Adj_79_t2_v9 ! meaning of "openable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, openable)); rfalse; ]; [ Adj_80_t2_v9 ! meaning of "unopenable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, openable, true)); rfalse; ]; [ Adj_81_t2_v9 ! meaning of "lockable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, lockable)); rfalse; ]; [ Adj_82_t2_v9 ! meaning of "locked" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, locked)); rfalse; ]; [ Adj_83_t2_v9 ! meaning of "unlocked" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, locked, true)); rfalse; ]; [ Adj_84_t2_v9 ! meaning of "female" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, female)); rfalse; ]; [ Adj_85_t2_v9 ! meaning of "male" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, female, true)); rfalse; ]; [ Adj_86_t2_v9 ! meaning of "neuter" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, neuter)); rfalse; ]; [ Adj_87_t2_v9 ! meaning of "switched on" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, on)); rfalse; ]; [ Adj_88_t2_v9 ! meaning of "switched off" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, on, true)); rfalse; ]; [ Adj_89_t2_v39 ! meaning of "recurring" t_0 ! Call parameter 'it' = scene ; return (WriteGProperty(SCENE_TY, t_0, p104_recurring, true)); rfalse; ]; [ Adj_90_t2_v39 ! meaning of "non-recurring" t_0 ! Call parameter 'it' = scene ; return (WriteGProperty(SCENE_TY, t_0, p104_recurring)); rfalse; ]; [ Adj_91_t2_v9 ! meaning of "seen" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p106_seen)); rfalse; ]; [ Adj_92_t2_v9 ! meaning of "unseen" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p106_seen, true)); rfalse; ]; [ Adj_93_t2_v9 ! meaning of "familiar" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p108_familiar)); rfalse; ]; [ Adj_94_t2_v9 ! meaning of "unfamiliar" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p108_familiar, true)); rfalse; ]; [ Adj_95_t2_v9 ! meaning of "friendly" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p111_faction, 1)); rfalse; ]; [ Adj_96_t2_v9 ! meaning of "passive" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p111_faction, 2)); rfalse; ]; [ Adj_97_t2_v9 ! meaning of "hostile" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p111_faction, 3)); rfalse; ]; [ Adj_98_t2_v9 ! meaning of "at-Inactive" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p112_combat_state, 1)); rfalse; ]; [ Adj_99_t2_v9 ! meaning of "at-Act" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p112_combat_state, 2)); rfalse; ]; [ Adj_100_t2_v9 ! meaning of "at-React" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p112_combat_state, 3)); rfalse; ]; [ Adj_101_t2_v9 ! meaning of "ambiguously plural" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p114_ambiguously_plural)); rfalse; ]; [ Adj_102_t2_v9 ! meaning of "ordinarily enumerated" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p114_ambiguously_plural, true)); rfalse; ]; [ Adj_103_t2_v9 ! meaning of "readied" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p116_readied)); rfalse; ]; [ Adj_104_t2_v9 ! meaning of "not readied" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p116_readied, true)); rfalse; ]; [ Adj_105_t2_v9 ! meaning of "at parry" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p118_at_parry)); rfalse; ]; [ Adj_106_t2_v9 ! meaning of "not at parry" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p118_at_parry, true)); rfalse; ]; [ Adj_107_t2_v9 ! meaning of "at dodge" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p120_at_dodge)); rfalse; ]; [ Adj_108_t2_v9 ! meaning of "not at dodge" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p120_at_dodge, true)); rfalse; ]; [ Adj_109_t2_v9 ! meaning of "cardinal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p122_cardinal)); rfalse; ]; [ Adj_110_t2_v9 ! meaning of "not cardinal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p122_cardinal, true)); rfalse; ]; [ Adj_111_t2_v9 ! meaning of "placed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p124_placed)); rfalse; ]; [ Adj_112_t2_v9 ! meaning of "not placed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p124_placed, true)); rfalse; ]; [ Adj_113_t2_v9 ! meaning of "connectable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p127_connectable)); rfalse; ]; [ Adj_114_t2_v9 ! meaning of "not connectable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p127_connectable, true)); rfalse; ]; [ Adj_115_t2_v9 ! meaning of "connection-inviting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p129_connection_inviting)); rfalse; ]; [ Adj_116_t2_v9 ! meaning of "not connection-inviting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p129_connection_inviting, true)); rfalse; ]; [ Adj_117_t2_v9 ! meaning of "placeable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p131_placeable)); rfalse; ]; [ Adj_118_t2_v9 ! meaning of "not placeable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p131_placeable, true)); rfalse; ]; [ Adj_119_t2_v9 ! meaning of "habitable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p133_habitable)); rfalse; ]; [ Adj_120_t2_v9 ! meaning of "not habitable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p133_habitable, true)); rfalse; ]; [ Adj_121_t2_v9 ! meaning of "treasurable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p135_treasurable)); rfalse; ]; [ Adj_122_t2_v9 ! meaning of "not treasurable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p135_treasurable, true)); rfalse; ]; [ Adj_123_t2_v9 ! meaning of "extra-accepting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p137_extra_accepting)); rfalse; ]; [ Adj_124_t2_v9 ! meaning of "not extra-accepting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p137_extra_accepting, true)); rfalse; ]; [ Adj_125_t2_v9 ! meaning of "nogo" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p139_nogo)); rfalse; ]; [ Adj_126_t2_v9 ! meaning of "notnogo" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p139_nogo, true)); rfalse; ]; [ Adj_127_t2_v9 ! meaning of "vp-agnostic" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p141_vertical_placement, 1)); rfalse; ]; [ Adj_128_t2_v9 ! meaning of "vp-underground" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p141_vertical_placement, 2)); rfalse; ]; [ Adj_129_t2_v9 ! meaning of "vp-likely-underground" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p141_vertical_placement, 3)); rfalse; ]; [ Adj_130_t2_v9 ! meaning of "vp-above-ground" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p141_vertical_placement, 4)); rfalse; ]; [ Adj_131_t2_v9 ! meaning of "vp-high" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p141_vertical_placement, 5)); rfalse; ]; [ Adj_132_t2_v9 ! meaning of "vp-likely-high" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p141_vertical_placement, 6)); rfalse; ]; [ Adj_133_t2_v9 ! meaning of "civilised" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 1)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 1)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 1)); rfalse; ]; [ Adj_134_t2_v9 ! meaning of "religious" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 2)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 2)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 2)); rfalse; ]; [ Adj_135_t2_v9 ! meaning of "barren" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 3)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 3)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 3)); rfalse; ]; [ Adj_136_t2_v9 ! meaning of "deathly" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 4)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 4)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 4)); rfalse; ]; [ Adj_137_t2_v9 ! meaning of "elemental" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 5)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 5)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 5)); rfalse; ]; [ Adj_138_t2_v9 ! meaning of "magical" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 6)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 6)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 6)); rfalse; ]; [ Adj_139_t2_v9 ! meaning of "alchemical" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 7)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 7)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 7)); rfalse; ]; [ Adj_140_t2_v9 ! meaning of "non-mood" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p142_mood, 8)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 8)); if (t_0) return (WriteGProperty(9, t_0, p142_mood, 8)); rfalse; ]; [ Adj_141_t2_v9 ! meaning of "consecrated" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p143_consecrated)); rfalse; ]; [ Adj_142_t2_v9 ! meaning of "not consecrated" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p143_consecrated, true)); rfalse; ]; [ Adj_143_t2_v9 ! meaning of "a digging tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p145_digging_tool)); rfalse; ]; [ Adj_144_t2_v9 ! meaning of "not a digging tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p145_digging_tool, true)); rfalse; ]; [ Adj_145_t2_v9 ! meaning of "a collapsing tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p147_collapsing_tool)); rfalse; ]; [ Adj_146_t2_v9 ! meaning of "not a collapsing tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p147_collapsing_tool, true)); rfalse; ]; [ Adj_147_t2_v9 ! meaning of "emotionless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p149_emotionless)); rfalse; ]; [ Adj_148_t2_v9 ! meaning of "not emotionless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p149_emotionless, true)); rfalse; ]; [ Adj_149_t2_v9 ! meaning of "non-attacker" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p151_non_attacker)); rfalse; ]; [ Adj_150_t2_v9 ! meaning of "weapon user" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p152_weapon_user)); rfalse; ]; [ Adj_151_t2_v9 ! meaning of "not weapon user" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p152_weapon_user, true)); rfalse; ]; [ Adj_152_t2_v9 ! meaning of "tiny" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p154_size, 1)); rfalse; ]; [ Adj_153_t2_v9 ! meaning of "small" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p154_size, 2)); rfalse; ]; [ Adj_154_t2_v9 ! meaning of "medium" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p154_size, 3)); rfalse; ]; [ Adj_155_t2_v9 ! meaning of "large" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p154_size, 4)); rfalse; ]; [ Adj_156_t2_v9 ! meaning of "huge" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p154_size, 5)); rfalse; ]; [ Adj_157_t2_v9 ! meaning of "gargantuan" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p154_size, 6)); rfalse; ]; [ Adj_158_t2_v9 ! meaning of "granted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p155_granted)); rfalse; ]; [ Adj_159_t2_v9 ! meaning of "not granted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p155_granted, true)); rfalse; ]; [ Adj_160_t2_v9 ! meaning of "flyer" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p158_flyer)); rfalse; ]; [ Adj_161_t2_v9 ! meaning of "not flyer" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p158_flyer, true)); rfalse; ]; [ Adj_162_t2_v9 ! meaning of "blinded" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p160_blinded)); rfalse; ]; [ Adj_163_t2_v9 ! meaning of "not blinded" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p160_blinded, true)); rfalse; ]; [ Adj_164_t2_v9 ! meaning of "eyeless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p162_eyeless)); rfalse; ]; [ Adj_165_t2_v9 ! meaning of "not eyeless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p162_eyeless, true)); rfalse; ]; [ Adj_166_t2_v9 ! meaning of "spontaneous teleporter" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p164_spontaneous_teleporter)); rfalse; ]; [ Adj_167_t2_v9 ! meaning of "not spontaneous teleporter" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p164_spontaneous_teleporter, true)); rfalse; ]; [ Adj_168_t2_v9 ! meaning of "teleportable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p166_teleportable)); rfalse; ]; [ Adj_169_t2_v9 ! meaning of "not teleportable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p166_teleportable, true)); rfalse; ]; [ Adj_170_t2_v9 ! meaning of "teleport impossible aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p168_teleport_impossible_awa)); rfalse; ]; [ Adj_171_t2_v9 ! meaning of "not teleport impossible aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p168_teleport_impossible_awa, true)); rfalse; ]; [ Adj_172_t2_v9 ! meaning of "follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p170_follower)); rfalse; ]; [ Adj_173_t2_v9 ! meaning of "not follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p170_follower, true)); rfalse; ]; [ Adj_174_t2_v9 ! meaning of "undead" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p111_faction, 4)); rfalse; ]; [ Adj_175_t2_v9 ! meaning of "horrific" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p111_faction, 5)); rfalse; ]; [ Adj_176_t2_v9 ! meaning of "demonic" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p111_faction, 6)); rfalse; ]; [ Adj_177_t2_v9 ! meaning of "ranged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p172_ranged)); rfalse; ]; [ Adj_178_t2_v9 ! meaning of "not ranged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p172_ranged, true)); rfalse; ]; [ Adj_179_t2_v9 ! meaning of "armour-stoppable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p174_armour_stoppable)); rfalse; ]; [ Adj_180_t2_v9 ! meaning of "not armour-stoppable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p174_armour_stoppable, true)); rfalse; ]; [ Adj_181_t2_v50 ! meaning of "burner" t_0 ! Call parameter 'it' = material ; return (WriteGProperty(50, t_0, p178_heat_behaviour, 1)); rfalse; ]; [ Adj_182_t2_v50 ! meaning of "melter" t_0 ! Call parameter 'it' = material ; return (WriteGProperty(50, t_0, p178_heat_behaviour, 2)); rfalse; ]; [ Adj_183_t2_v9 ! meaning of "other-material" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 1)); rfalse; ]; [ Adj_184_t2_v9 ! meaning of "iron" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 2)); rfalse; ]; [ Adj_185_t2_v9 ! meaning of "silver" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 3)); rfalse; ]; [ Adj_186_t2_v9 ! meaning of "paper" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 4)); rfalse; ]; [ Adj_187_t2_v9 ! meaning of "cloth" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 5)); rfalse; ]; [ Adj_188_t2_v9 ! meaning of "wood" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 6)); rfalse; ]; [ Adj_189_t2_v9 ! meaning of "leather" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 7)); rfalse; ]; [ Adj_190_t2_v9 ! meaning of "flesh" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 8)); rfalse; ]; [ Adj_191_t2_v9 ! meaning of "glass" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 9)); rfalse; ]; [ Adj_192_t2_v9 ! meaning of "stone" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 10)); rfalse; ]; [ Adj_193_t2_v9 ! meaning of "dragon skin" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 11)); rfalse; ]; [ Adj_194_t2_v9 ! meaning of "radiance" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 12)); rfalse; ]; [ Adj_195_t2_v9 ! meaning of "adamant" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 13)); rfalse; ]; [ Adj_196_t2_v9 ! meaning of "vapour" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p180_material, 14)); rfalse; ]; [ Adj_197_t2_v9 ! meaning of "risky" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p181_risky)); rfalse; ]; [ Adj_198_t2_v9 ! meaning of "not risky" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p181_risky, true)); rfalse; ]; [ Adj_199_t2_v9 ! meaning of "Aite-loved" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p183_aite_loved)); rfalse; ]; [ Adj_200_t2_v9 ! meaning of "not Aite-loved" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p183_aite_loved, true)); rfalse; ]; [ Adj_201_t2_v9 ! meaning of "flaming" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p185_flaming)); rfalse; ]; [ Adj_202_t2_v9 ! meaning of "not flaming" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p185_flaming, true)); rfalse; ]; [ Adj_203_t2_v9 ! meaning of "cooler" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p187_cooler)); rfalse; ]; [ Adj_204_t2_v9 ! meaning of "not cooler" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p187_cooler, true)); rfalse; ]; [ Adj_205_t2_v9 ! meaning of "rusted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p189_rusted)); rfalse; ]; [ Adj_206_t2_v9 ! meaning of "not rusted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p189_rusted, true)); rfalse; ]; [ Adj_207_t2_v9 ! meaning of "rust-spored" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p191_rust_spored)); rfalse; ]; [ Adj_208_t2_v9 ! meaning of "not rust-spored" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p191_rust_spored, true)); rfalse; ]; [ Adj_209_t2_v9 ! meaning of "rust-spored-candidate" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p193_rust_spored_candidate)); rfalse; ]; [ Adj_210_t2_v9 ! meaning of "not rust-spored-candidate" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p193_rust_spored_candidate, true)); rfalse; ]; [ Adj_211_t2_v9 ! meaning of "rust-releasing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p195_rust_releasing)); rfalse; ]; [ Adj_212_t2_v9 ! meaning of "not rust-releasing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p195_rust_releasing, true)); rfalse; ]; [ Adj_213_t2_v9 ! meaning of "death-blessed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p197_death_blessed)); rfalse; ]; [ Adj_214_t2_v9 ! meaning of "not death-blessed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p197_death_blessed, true)); rfalse; ]; [ Adj_215_t2_v9 ! meaning of "death-cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p199_death_cursed)); rfalse; ]; [ Adj_216_t2_v9 ! meaning of "not death-cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p199_death_cursed, true)); rfalse; ]; [ Adj_217_t2_v9 ! meaning of "human-form" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (WriteGProperty(9, t_0, p201_player_form, 1)); rfalse; ]; [ Adj_218_t2_v9 ! meaning of "ghoul" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (WriteGProperty(9, t_0, p201_player_form, 2)); rfalse; ]; [ Adj_219_t2_v9 ! meaning of "vampire" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (WriteGProperty(9, t_0, p201_player_form, 3)); rfalse; ]; [ Adj_220_t2_v9 ! meaning of "vampire bat" t_0 ! Call parameter 'it' = object ; if (t_0 == selfobj) return (WriteGProperty(9, t_0, p201_player_form, 4)); rfalse; ]; [ Adj_221_t2_v9 ! meaning of "hidden" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p202_hidden)); rfalse; ]; [ Adj_222_t2_v9 ! meaning of "not hidden" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p202_hidden, true)); rfalse; ]; [ Adj_223_t2_v9 ! meaning of "on-the-lookout" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p204_on_the_lookout)); rfalse; ]; [ Adj_224_t2_v9 ! meaning of "not on-the-lookout" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p204_on_the_lookout, true)); rfalse; ]; [ Adj_225_t2_v9 ! meaning of "unnaturally aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p206_unnaturally_aware)); rfalse; ]; [ Adj_226_t2_v9 ! meaning of "not unnaturally aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p206_unnaturally_aware, true)); rfalse; ]; [ Adj_227_t2_v9 ! meaning of "unnaturally aware follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p208_unnaturally_aware_follo)); rfalse; ]; [ Adj_228_t2_v9 ! meaning of "not unnaturally aware follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p208_unnaturally_aware_follo, true)); rfalse; ]; [ Adj_229_t2_v9 ! meaning of "smoke attuned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p210_smoke_attuned)); rfalse; ]; [ Adj_230_t2_v9 ! meaning of "not smoke attuned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p210_smoke_attuned, true)); rfalse; ]; [ Adj_231_t2_v9 ! meaning of "ethereal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p212_ethereal)); rfalse; ]; [ Adj_232_t2_v9 ! meaning of "not ethereal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p212_ethereal, true)); rfalse; ]; [ Adj_233_t2_v9 ! meaning of "minor" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p214_valuation, 1)); rfalse; ]; [ Adj_234_t2_v9 ! meaning of "major" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p214_valuation, 2)); rfalse; ]; [ Adj_235_t2_v9 ! meaning of "epic" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p214_valuation, 3)); rfalse; ]; [ Adj_236_t2_v9 ! meaning of "unique" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p214_valuation, 4)); rfalse; ]; [ Adj_237_t2_v9 ! meaning of "special" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p214_valuation, 5)); rfalse; ]; [ Adj_238_t2_v9 ! meaning of "non-treasure" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p214_valuation, 6)); rfalse; ]; [ Adj_239_t2_v9 ! meaning of "actual" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p215_actual)); rfalse; ]; [ Adj_240_t2_v9 ! meaning of "prototypical" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p215_actual, true)); rfalse; ]; [ Adj_241_t2_v9 ! meaning of "none-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 1)); rfalse; ]; [ Adj_242_t2_v9 ! meaning of "mort-eilysh-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 2)); rfalse; ]; [ Adj_243_t2_v9 ! meaning of "naar-od-erae-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 3)); rfalse; ]; [ Adj_244_t2_v9 ! meaning of "dolp-zeez-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 4)); rfalse; ]; [ Adj_245_t2_v9 ! meaning of "chetnak-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 5)); rfalse; ]; [ Adj_246_t2_v9 ! meaning of "cistrob-jirsgev-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 6)); rfalse; ]; [ Adj_247_t2_v9 ! meaning of "twan-metier-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 7)); rfalse; ]; [ Adj_248_t2_v9 ! meaning of "hermei-le-schim-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 8)); rfalse; ]; [ Adj_249_t2_v9 ! meaning of "lonsifira-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 9)); rfalse; ]; [ Adj_250_t2_v9 ! meaning of "kripmeteel-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 10)); rfalse; ]; [ Adj_251_t2_v9 ! meaning of "souspenot-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 11)); rfalse; ]; [ Adj_252_t2_v9 ! meaning of "shalm-sawesas-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 12)); rfalse; ]; [ Adj_253_t2_v9 ! meaning of "zyxyz-parse" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); if (t_0) return (WriteGProperty(9, t_0, p218_scroll_parsable, 13)); rfalse; ]; [ Adj_254_t2_v9 ! meaning of "corruptible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p220_corruptible)); rfalse; ]; [ Adj_255_t2_v9 ! meaning of "incorruptible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p220_corruptible, true)); rfalse; ]; [ Adj_256_t2_v9 ! meaning of "cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p222_cursed)); rfalse; ]; [ Adj_257_t2_v9 ! meaning of "not cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p222_cursed, true)); rfalse; ]; [ Adj_258_t2_v9 ! meaning of "curse-identified" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p224_curse_identified)); rfalse; ]; [ Adj_259_t2_v9 ! meaning of "not curse-identified" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p224_curse_identified, true)); rfalse; ]; [ Adj_260_t2_v9 ! meaning of "cautious" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p226_cautious)); rfalse; ]; [ Adj_261_t2_v9 ! meaning of "not cautious" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p226_cautious, true)); rfalse; ]; [ Adj_262_t2_v9 ! meaning of "enraged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p228_enraged)); rfalse; ]; [ Adj_263_t2_v9 ! meaning of "not enraged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p228_enraged, true)); rfalse; ]; [ Adj_264_t2_v9 ! meaning of "patient" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p230_patient)); rfalse; ]; [ Adj_265_t2_v9 ! meaning of "not patient" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p230_patient, true)); rfalse; ]; [ Adj_266_t2_v9 ! meaning of "greedy" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p232_greedy)); rfalse; ]; [ Adj_267_t2_v9 ! meaning of "not greedy" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p232_greedy, true)); rfalse; ]; [ Adj_268_t2_v9 ! meaning of "at-stun" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p234_at_stun)); rfalse; ]; [ Adj_269_t2_v9 ! meaning of "not at-stun" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p234_at_stun, true)); rfalse; ]; [ Adj_270_t2_v9 ! meaning of "sometime-stunned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p236_sometime_stunned)); rfalse; ]; [ Adj_271_t2_v9 ! meaning of "enslaved" t_0 ! Call parameter 'it' = object ; if (t_0) return (WriteGProperty(9, t_0, p111_faction, 7)); rfalse; ]; [ Adj_272_t2_v9 ! meaning of "tentacle-confused" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p239_tentacle_confused)); rfalse; ]; [ Adj_273_t2_v9 ! meaning of "barkskinned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p240_barkskinned)); rfalse; ]; [ Adj_274_t2_v9 ! meaning of "not barkskinned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p240_barkskinned, true)); rfalse; ]; [ Adj_275_t2_v9 ! meaning of "as-witch" t_0 ! Call parameter 'it' = object ; if (t_0 == I513_aswang) return (WriteGProperty(OBJECT_TY, t_0, p242_as_shape, 1)); rfalse; ]; [ Adj_276_t2_v9 ! meaning of "as-bird" t_0 ! Call parameter 'it' = object ; if (t_0 == I513_aswang) return (WriteGProperty(OBJECT_TY, t_0, p242_as_shape, 2)); rfalse; ]; [ Adj_277_t2_v9 ! meaning of "as-dog" t_0 ! Call parameter 'it' = object ; if (t_0 == I513_aswang) return (WriteGProperty(OBJECT_TY, t_0, p242_as_shape, 3)); rfalse; ]; [ Adj_278_t2_v9 ! meaning of "hexed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p243_hexed)); rfalse; ]; [ Adj_279_t2_v9 ! meaning of "not hexed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p243_hexed, true)); rfalse; ]; [ Adj_280_t2_v9 ! meaning of "smoke-demoned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p245_smoke_demoned)); rfalse; ]; [ Adj_281_t2_v9 ! meaning of "not smoke-demoned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p245_smoke_demoned, true)); rfalse; ]; [ Adj_282_t2_v9 ! meaning of "retreater" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p247_retreater)); rfalse; ]; [ Adj_283_t2_v9 ! meaning of "not retreater" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p247_retreater, true)); rfalse; ]; [ Adj_284_t2_v9 ! meaning of "initiative-conferring" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p249_initiative_conferring)); rfalse; ]; [ Adj_285_t2_v9 ! meaning of "not initiative-conferring" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p249_initiative_conferring, true)); rfalse; ]; [ Adj_286_t2_v9 ! meaning of "runner" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p251_runner)); rfalse; ]; [ Adj_287_t2_v9 ! meaning of "not runner" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p251_runner, true)); rfalse; ]; [ Adj_288_t2_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, worn)); rfalse; ]; [ Adj_289_t2_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, absent)); rfalse; ]; [ Adj_290_t2_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mark_as_room)); rfalse; ]; [ Adj_291_t2_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mark_as_thing)); rfalse; ]; [ Adj_9_t3_v9 ! meaning of "on-stage" t_0 ! Call parameter 'it' = number ; if (t_0 ofclass K2_thing) return ((OnStage(t_0, false))); rfalse; ]; [ Adj_10_t3_v9 ! meaning of "off-stage" t_0 ! Call parameter 'it' = number ; if (t_0 ofclass K2_thing) return ((OnStage(t_0, true))); rfalse; ]; [ Adj_16_t3_v26 ! meaning of "empty" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_Empty(t_0, false))); rfalse; ]; [ Adj_17_t3_v26 ! meaning of "non-empty" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_Empty(t_0, true))); rfalse; ]; [ Adj_24_t3_v26 ! meaning of "equivalence" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_EquivalenceAdjective(t_0, false))); rfalse; ]; [ Adj_25_t3_v26 ! meaning of "symmetric" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_SymmetricAdjective(t_0, false))); rfalse; ]; [ Adj_26_t3_v26 ! meaning of "one-to-one" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_OToOAdjective(t_0, false))); rfalse; ]; [ Adj_27_t3_v26 ! meaning of "one-to-various" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_OToVAdjective(t_0, false))); rfalse; ]; [ Adj_28_t3_v26 ! meaning of "various-to-one" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_VToOAdjective(t_0, false))); rfalse; ]; [ Adj_29_t3_v26 ! meaning of "various-to-various" t_0 ! Call parameter 'it' = number ; return ((RELATION_TY_VToVAdjective(t_0, false))); rfalse; ]; [ Adj_48_t3_v9 ! meaning of "plural-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, pluralname, true)); rfalse; ]; [ Adj_49_t3_v9 ! meaning of "singular-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, pluralname)); rfalse; ]; [ Adj_50_t3_v9 ! meaning of "proper-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, proper, true)); rfalse; ]; [ Adj_51_t3_v9 ! meaning of "improper-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, proper)); rfalse; ]; [ Adj_52_t3_v9 ! meaning of "privately-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, privately_named, true)); rfalse; ]; [ Adj_53_t3_v9 ! meaning of "publically-named" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, privately_named)); rfalse; ]; [ Adj_54_t3_v9 ! meaning of "lighted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_55_t3_v9 ! meaning of "dark" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_56_t3_v9 ! meaning of "visited" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, visited, true)); rfalse; ]; [ Adj_57_t3_v9 ! meaning of "unvisited" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, visited)); rfalse; ]; [ Adj_58_t3_v9 ! meaning of "lit" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_59_t3_v9 ! meaning of "unlit" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_60_t3_v9 ! meaning of "edible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, edible, true)); rfalse; ]; [ Adj_61_t3_v9 ! meaning of "inedible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, edible)); rfalse; ]; [ Adj_62_t3_v9 ! meaning of "fixed in place" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, static, true)); rfalse; ]; [ Adj_63_t3_v9 ! meaning of "portable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, static)); rfalse; ]; [ Adj_64_t3_v9 ! meaning of "scenery" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, scenery, true)); rfalse; ]; [ Adj_65_t3_v9 ! meaning of "wearable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, clothing, true)); rfalse; ]; [ Adj_66_t3_v9 ! meaning of "pushable between rooms" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, pushable, true)); rfalse; ]; [ Adj_67_t3_v9 ! meaning of "handled" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, moved, true)); rfalse; ]; [ Adj_68_t3_v9 ! meaning of "described" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, concealed)); rfalse; ]; [ Adj_69_t3_v9 ! meaning of "undescribed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, concealed, true)); rfalse; ]; [ Adj_70_t3_v9 ! meaning of "marked for listing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, workflag, true)); rfalse; ]; [ Adj_71_t3_v9 ! meaning of "unmarked for listing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, workflag)); rfalse; ]; [ Adj_72_t3_v9 ! meaning of "mentioned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mentioned, true)); rfalse; ]; [ Adj_73_t3_v9 ! meaning of "unmentioned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mentioned)); rfalse; ]; [ Adj_74_t3_v9 ! meaning of "enterable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, enterable, true)); rfalse; ]; [ Adj_75_t3_v9 ! meaning of "opaque" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, transparent)); rfalse; ]; [ Adj_76_t3_v9 ! meaning of "transparent" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, transparent, true)); rfalse; ]; [ Adj_77_t3_v9 ! meaning of "open" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, open, true)); rfalse; ]; [ Adj_78_t3_v9 ! meaning of "closed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, open)); rfalse; ]; [ Adj_79_t3_v9 ! meaning of "openable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, openable, true)); rfalse; ]; [ Adj_80_t3_v9 ! meaning of "unopenable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, openable)); rfalse; ]; [ Adj_81_t3_v9 ! meaning of "lockable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, lockable, true)); rfalse; ]; [ Adj_82_t3_v9 ! meaning of "locked" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, locked, true)); rfalse; ]; [ Adj_83_t3_v9 ! meaning of "unlocked" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, locked)); rfalse; ]; [ Adj_84_t3_v9 ! meaning of "female" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, female, true)); rfalse; ]; [ Adj_85_t3_v9 ! meaning of "male" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, female)); rfalse; ]; [ Adj_86_t3_v9 ! meaning of "neuter" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, neuter, true)); rfalse; ]; [ Adj_87_t3_v9 ! meaning of "switched on" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, on, true)); rfalse; ]; [ Adj_88_t3_v9 ! meaning of "switched off" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, on)); rfalse; ]; [ Adj_89_t3_v39 ! meaning of "recurring" t_0 ! Call parameter 'it' = scene ; return (WriteGProperty(SCENE_TY, t_0, p104_recurring)); rfalse; ]; [ Adj_90_t3_v39 ! meaning of "non-recurring" t_0 ! Call parameter 'it' = scene ; return (WriteGProperty(SCENE_TY, t_0, p104_recurring, true)); rfalse; ]; [ Adj_91_t3_v9 ! meaning of "seen" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p106_seen, true)); rfalse; ]; [ Adj_92_t3_v9 ! meaning of "unseen" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p106_seen)); rfalse; ]; [ Adj_93_t3_v9 ! meaning of "familiar" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p108_familiar, true)); rfalse; ]; [ Adj_94_t3_v9 ! meaning of "unfamiliar" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p108_familiar)); rfalse; ]; [ Adj_101_t3_v9 ! meaning of "ambiguously plural" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p114_ambiguously_plural, true)); rfalse; ]; [ Adj_102_t3_v9 ! meaning of "ordinarily enumerated" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p114_ambiguously_plural)); rfalse; ]; [ Adj_103_t3_v9 ! meaning of "readied" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p116_readied, true)); rfalse; ]; [ Adj_104_t3_v9 ! meaning of "not readied" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p116_readied)); rfalse; ]; [ Adj_105_t3_v9 ! meaning of "at parry" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p118_at_parry, true)); rfalse; ]; [ Adj_106_t3_v9 ! meaning of "not at parry" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p118_at_parry)); rfalse; ]; [ Adj_107_t3_v9 ! meaning of "at dodge" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p120_at_dodge, true)); rfalse; ]; [ Adj_108_t3_v9 ! meaning of "not at dodge" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p120_at_dodge)); rfalse; ]; [ Adj_109_t3_v9 ! meaning of "cardinal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p122_cardinal, true)); rfalse; ]; [ Adj_110_t3_v9 ! meaning of "not cardinal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p122_cardinal)); rfalse; ]; [ Adj_111_t3_v9 ! meaning of "placed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p124_placed, true)); rfalse; ]; [ Adj_112_t3_v9 ! meaning of "not placed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p124_placed)); rfalse; ]; [ Adj_113_t3_v9 ! meaning of "connectable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p127_connectable, true)); rfalse; ]; [ Adj_114_t3_v9 ! meaning of "not connectable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p127_connectable)); rfalse; ]; [ Adj_115_t3_v9 ! meaning of "connection-inviting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p129_connection_inviting, true)); rfalse; ]; [ Adj_116_t3_v9 ! meaning of "not connection-inviting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p129_connection_inviting)); rfalse; ]; [ Adj_117_t3_v9 ! meaning of "placeable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p131_placeable, true)); rfalse; ]; [ Adj_118_t3_v9 ! meaning of "not placeable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p131_placeable)); rfalse; ]; [ Adj_119_t3_v9 ! meaning of "habitable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p133_habitable, true)); rfalse; ]; [ Adj_120_t3_v9 ! meaning of "not habitable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p133_habitable)); rfalse; ]; [ Adj_121_t3_v9 ! meaning of "treasurable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p135_treasurable, true)); rfalse; ]; [ Adj_122_t3_v9 ! meaning of "not treasurable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p135_treasurable)); rfalse; ]; [ Adj_123_t3_v9 ! meaning of "extra-accepting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p137_extra_accepting, true)); rfalse; ]; [ Adj_124_t3_v9 ! meaning of "not extra-accepting" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p137_extra_accepting)); rfalse; ]; [ Adj_125_t3_v9 ! meaning of "nogo" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p139_nogo, true)); rfalse; ]; [ Adj_126_t3_v9 ! meaning of "notnogo" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p139_nogo)); rfalse; ]; [ Adj_141_t3_v9 ! meaning of "consecrated" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p143_consecrated, true)); rfalse; ]; [ Adj_142_t3_v9 ! meaning of "not consecrated" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p143_consecrated)); rfalse; ]; [ Adj_143_t3_v9 ! meaning of "a digging tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p145_digging_tool, true)); rfalse; ]; [ Adj_144_t3_v9 ! meaning of "not a digging tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p145_digging_tool)); rfalse; ]; [ Adj_145_t3_v9 ! meaning of "a collapsing tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p147_collapsing_tool, true)); rfalse; ]; [ Adj_146_t3_v9 ! meaning of "not a collapsing tool" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p147_collapsing_tool)); rfalse; ]; [ Adj_147_t3_v9 ! meaning of "emotionless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p149_emotionless, true)); rfalse; ]; [ Adj_148_t3_v9 ! meaning of "not emotionless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p149_emotionless)); rfalse; ]; [ Adj_149_t3_v9 ! meaning of "non-attacker" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p151_non_attacker, true)); rfalse; ]; [ Adj_150_t3_v9 ! meaning of "weapon user" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p152_weapon_user, true)); rfalse; ]; [ Adj_151_t3_v9 ! meaning of "not weapon user" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p152_weapon_user)); rfalse; ]; [ Adj_158_t3_v9 ! meaning of "granted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p155_granted, true)); rfalse; ]; [ Adj_159_t3_v9 ! meaning of "not granted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p155_granted)); rfalse; ]; [ Adj_160_t3_v9 ! meaning of "flyer" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p158_flyer, true)); rfalse; ]; [ Adj_161_t3_v9 ! meaning of "not flyer" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p158_flyer)); rfalse; ]; [ Adj_162_t3_v9 ! meaning of "blinded" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p160_blinded, true)); rfalse; ]; [ Adj_163_t3_v9 ! meaning of "not blinded" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p160_blinded)); rfalse; ]; [ Adj_164_t3_v9 ! meaning of "eyeless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p162_eyeless, true)); rfalse; ]; [ Adj_165_t3_v9 ! meaning of "not eyeless" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p162_eyeless)); rfalse; ]; [ Adj_166_t3_v9 ! meaning of "spontaneous teleporter" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p164_spontaneous_teleporter, true)); rfalse; ]; [ Adj_167_t3_v9 ! meaning of "not spontaneous teleporter" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p164_spontaneous_teleporter)); rfalse; ]; [ Adj_168_t3_v9 ! meaning of "teleportable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p166_teleportable, true)); rfalse; ]; [ Adj_169_t3_v9 ! meaning of "not teleportable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p166_teleportable)); rfalse; ]; [ Adj_170_t3_v9 ! meaning of "teleport impossible aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p168_teleport_impossible_awa, true)); rfalse; ]; [ Adj_171_t3_v9 ! meaning of "not teleport impossible aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p168_teleport_impossible_awa)); rfalse; ]; [ Adj_172_t3_v9 ! meaning of "follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p170_follower, true)); rfalse; ]; [ Adj_173_t3_v9 ! meaning of "not follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p170_follower)); rfalse; ]; [ Adj_177_t3_v9 ! meaning of "ranged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p172_ranged, true)); rfalse; ]; [ Adj_178_t3_v9 ! meaning of "not ranged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p172_ranged)); rfalse; ]; [ Adj_179_t3_v9 ! meaning of "armour-stoppable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p174_armour_stoppable, true)); rfalse; ]; [ Adj_180_t3_v9 ! meaning of "not armour-stoppable" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p174_armour_stoppable)); rfalse; ]; [ Adj_197_t3_v9 ! meaning of "risky" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p181_risky, true)); rfalse; ]; [ Adj_198_t3_v9 ! meaning of "not risky" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p181_risky)); rfalse; ]; [ Adj_199_t3_v9 ! meaning of "Aite-loved" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p183_aite_loved, true)); rfalse; ]; [ Adj_200_t3_v9 ! meaning of "not Aite-loved" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p183_aite_loved)); rfalse; ]; [ Adj_201_t3_v9 ! meaning of "flaming" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p185_flaming, true)); rfalse; ]; [ Adj_202_t3_v9 ! meaning of "not flaming" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p185_flaming)); rfalse; ]; [ Adj_203_t3_v9 ! meaning of "cooler" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p187_cooler, true)); rfalse; ]; [ Adj_204_t3_v9 ! meaning of "not cooler" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p187_cooler)); rfalse; ]; [ Adj_205_t3_v9 ! meaning of "rusted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p189_rusted, true)); rfalse; ]; [ Adj_206_t3_v9 ! meaning of "not rusted" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p189_rusted)); rfalse; ]; [ Adj_207_t3_v9 ! meaning of "rust-spored" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p191_rust_spored, true)); rfalse; ]; [ Adj_208_t3_v9 ! meaning of "not rust-spored" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p191_rust_spored)); rfalse; ]; [ Adj_209_t3_v9 ! meaning of "rust-spored-candidate" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p193_rust_spored_candidate, true)); rfalse; ]; [ Adj_210_t3_v9 ! meaning of "not rust-spored-candidate" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p193_rust_spored_candidate)); rfalse; ]; [ Adj_211_t3_v9 ! meaning of "rust-releasing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p195_rust_releasing, true)); rfalse; ]; [ Adj_212_t3_v9 ! meaning of "not rust-releasing" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p195_rust_releasing)); rfalse; ]; [ Adj_213_t3_v9 ! meaning of "death-blessed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p197_death_blessed, true)); rfalse; ]; [ Adj_214_t3_v9 ! meaning of "not death-blessed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p197_death_blessed)); rfalse; ]; [ Adj_215_t3_v9 ! meaning of "death-cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p199_death_cursed, true)); rfalse; ]; [ Adj_216_t3_v9 ! meaning of "not death-cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p199_death_cursed)); rfalse; ]; [ Adj_221_t3_v9 ! meaning of "hidden" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p202_hidden, true)); rfalse; ]; [ Adj_222_t3_v9 ! meaning of "not hidden" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p202_hidden)); rfalse; ]; [ Adj_223_t3_v9 ! meaning of "on-the-lookout" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p204_on_the_lookout, true)); rfalse; ]; [ Adj_224_t3_v9 ! meaning of "not on-the-lookout" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p204_on_the_lookout)); rfalse; ]; [ Adj_225_t3_v9 ! meaning of "unnaturally aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p206_unnaturally_aware, true)); rfalse; ]; [ Adj_226_t3_v9 ! meaning of "not unnaturally aware" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p206_unnaturally_aware)); rfalse; ]; [ Adj_227_t3_v9 ! meaning of "unnaturally aware follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p208_unnaturally_aware_follo, true)); rfalse; ]; [ Adj_228_t3_v9 ! meaning of "not unnaturally aware follower" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p208_unnaturally_aware_follo)); rfalse; ]; [ Adj_229_t3_v9 ! meaning of "smoke attuned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p210_smoke_attuned, true)); rfalse; ]; [ Adj_230_t3_v9 ! meaning of "not smoke attuned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p210_smoke_attuned)); rfalse; ]; [ Adj_231_t3_v9 ! meaning of "ethereal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p212_ethereal, true)); rfalse; ]; [ Adj_232_t3_v9 ! meaning of "not ethereal" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p212_ethereal)); rfalse; ]; [ Adj_239_t3_v9 ! meaning of "actual" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p215_actual, true)); rfalse; ]; [ Adj_240_t3_v9 ! meaning of "prototypical" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p215_actual)); rfalse; ]; [ Adj_254_t3_v9 ! meaning of "corruptible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p220_corruptible, true)); rfalse; ]; [ Adj_255_t3_v9 ! meaning of "incorruptible" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p220_corruptible)); rfalse; ]; [ Adj_256_t3_v9 ! meaning of "cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p222_cursed, true)); rfalse; ]; [ Adj_257_t3_v9 ! meaning of "not cursed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p222_cursed)); rfalse; ]; [ Adj_258_t3_v9 ! meaning of "curse-identified" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p224_curse_identified, true)); rfalse; ]; [ Adj_259_t3_v9 ! meaning of "not curse-identified" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p224_curse_identified)); rfalse; ]; [ Adj_260_t3_v9 ! meaning of "cautious" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p226_cautious, true)); rfalse; ]; [ Adj_261_t3_v9 ! meaning of "not cautious" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p226_cautious)); rfalse; ]; [ Adj_262_t3_v9 ! meaning of "enraged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p228_enraged, true)); rfalse; ]; [ Adj_263_t3_v9 ! meaning of "not enraged" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p228_enraged)); rfalse; ]; [ Adj_264_t3_v9 ! meaning of "patient" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p230_patient, true)); rfalse; ]; [ Adj_265_t3_v9 ! meaning of "not patient" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p230_patient)); rfalse; ]; [ Adj_266_t3_v9 ! meaning of "greedy" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p232_greedy, true)); rfalse; ]; [ Adj_267_t3_v9 ! meaning of "not greedy" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p232_greedy)); rfalse; ]; [ Adj_268_t3_v9 ! meaning of "at-stun" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p234_at_stun, true)); rfalse; ]; [ Adj_269_t3_v9 ! meaning of "not at-stun" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p234_at_stun)); rfalse; ]; [ Adj_270_t3_v9 ! meaning of "sometime-stunned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p236_sometime_stunned, true)); rfalse; ]; [ Adj_272_t3_v9 ! meaning of "tentacle-confused" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p239_tentacle_confused, true)); rfalse; ]; [ Adj_273_t3_v9 ! meaning of "barkskinned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p240_barkskinned, true)); rfalse; ]; [ Adj_274_t3_v9 ! meaning of "not barkskinned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p240_barkskinned)); rfalse; ]; [ Adj_278_t3_v9 ! meaning of "hexed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p243_hexed, true)); rfalse; ]; [ Adj_279_t3_v9 ! meaning of "not hexed" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p243_hexed)); rfalse; ]; [ Adj_280_t3_v9 ! meaning of "smoke-demoned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p245_smoke_demoned, true)); rfalse; ]; [ Adj_281_t3_v9 ! meaning of "not smoke-demoned" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p245_smoke_demoned)); rfalse; ]; [ Adj_282_t3_v9 ! meaning of "retreater" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p247_retreater, true)); rfalse; ]; [ Adj_283_t3_v9 ! meaning of "not retreater" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p247_retreater)); rfalse; ]; [ Adj_284_t3_v9 ! meaning of "initiative-conferring" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p249_initiative_conferring, true)); rfalse; ]; [ Adj_285_t3_v9 ! meaning of "not initiative-conferring" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p249_initiative_conferring)); rfalse; ]; [ Adj_286_t3_v9 ! meaning of "runner" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p251_runner, true)); rfalse; ]; [ Adj_287_t3_v9 ! meaning of "not runner" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, p251_runner)); rfalse; ]; [ Adj_288_t3_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, worn, true)); rfalse; ]; [ Adj_289_t3_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, absent, true)); rfalse; ]; [ Adj_290_t3_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mark_as_room, true)); rfalse; ]; [ Adj_291_t3_v9 ! meaning of "" t_0 ! Call parameter 'it' = object ; if (t_0) return (SetEitherOrProperty(t_0, mark_as_thing, true)); rfalse; ]; Array TimedEventsTable table 0 0; Array TimedEventTimesTable table 0 0; Array rulebooks_array --> B0_procedural B1_startup B2_turn_sequence B3_shutdown B4_scene_changing B5_when_play_begins B6_when_play_ends B7_when_scene_begins B8_when_scene_ends B9_every_turn B10_action_processing B11_setting_action_variables B12_specific_action_processi B13_player_s_action_awarenes B14_accessibility B15_reaching_inside B16_reaching_outside B17_visibility B18_persuasion B19_unsuccessful_attempt_by B20_before B21_instead B22_check B23_carry_out B24_after B25_report B26_does_the_player_mean B27_when_entire_game_begins B28_when_entire_game_ends B29_before_printing_the_name B30_for_printing_the_name B31_after_printing_the_name B32_before_printing_the_plur B33_for_printing_the_plural_ B34_after_printing_the_plura B35_before_printing_a_number B36_for_printing_a_number B37_after_printing_a_number B38_before_printing_room_des B39_for_printing_room_descri B40_after_printing_room_desc B41_before_listing_contents B42_for_listing_contents B43_after_listing_contents B44_before_grouping_together B45_for_grouping_together B46_after_grouping_together B47_before_writing_a_paragra B48_for_writing_a_paragraph_ B49_after_writing_a_paragrap B50_before_listing_nondescri B51_for_listing_nondescript_ B52_after_listing_nondescrip B53_before_printing_the_name B54_for_printing_the_name_of B55_after_printing_the_name_ B56_before_printing_the_desc B57_for_printing_the_descrip B58_after_printing_the_descr B59_before_printing_the_anno B60_for_printing_the_announc B61_after_printing_the_annou B62_before_printing_the_anno B63_for_printing_the_announc B64_after_printing_the_annou B65_before_printing_a_refusa B66_for_printing_a_refusal_t B67_after_printing_a_refusal B68_before_constructing_the_ B69_for_constructing_the_sta B70_after_constructing_the_s B71_before_printing_the_bann B72_for_printing_the_banner_ B73_after_printing_the_banne B74_before_reading_a_command B75_for_reading_a_command B76_after_reading_a_command B77_before_deciding_the_scop B78_for_deciding_the_scope B79_after_deciding_the_scope B80_before_deciding_the_conc B81_for_deciding_the_conceal B82_after_deciding_the_conce B83_before_deciding_whether_ B84_for_deciding_whether_all B85_after_deciding_whether_a B86_before_clarifying_the_pa B87_for_clarifying_the_parse B88_after_clarifying_the_par B89_before_asking_which_do_y B90_for_asking_which_do_you_ B91_after_asking_which_do_yo B92_before_printing_a_parser B93_for_printing_a_parser_er B94_after_printing_a_parser_ B95_before_supplying_a_missi B96_for_supplying_a_missing_ B97_after_supplying_a_missin B98_before_supplying_a_missi B99_for_supplying_a_missing_ B100_after_supplying_a_missi B101_before_implicitly_takin B102_for_implicitly_taking B103_after_implicitly_taking B104_before_starting_the_vir B105_for_starting_the_virtua B106_after_starting_the_virt B107_before_amusing_a_victor B108_for_amusing_a_victoriou B109_after_amusing_a_victori B110_before_printing_the_pla B111_for_printing_the_player B112_after_printing_the_play B113_before_handling_the_fin B114_for_handling_the_final_ B115_after_handling_the_fina B116_before_printing_the_loc B117_for_printing_the_locale B118_after_printing_the_loca B119_before_choosing_notable B120_for_choosing_notable_lo B121_after_choosing_notable_ B122_before_printing_a_local B123_for_printing_a_locale_p B124_after_printing_a_locale B125_check_taking_inventory B126_carry_out_taking_invent B127_report_taking_inventory B128_check_taking B129_carry_out_taking B130_report_taking B131_check_removing_it_from B132_carry_out_removing_it_f B133_report_removing_it_from B134_check_dropping B135_carry_out_dropping B136_report_dropping B137_check_putting_it_on B138_carry_out_putting_it_on B139_report_putting_it_on B140_check_inserting_it_into B141_carry_out_inserting_it_ B142_report_inserting_it_int B143_check_eating B144_carry_out_eating B145_report_eating B146_check_going B147_carry_out_going B148_report_going B149_check_entering B150_carry_out_entering B151_report_entering B152_check_exiting B153_carry_out_exiting B154_report_exiting B155_check_getting_off B156_carry_out_getting_off B157_report_getting_off B158_check_looking B159_carry_out_looking B160_report_looking B161_check_examining B162_carry_out_examining B163_report_examining B164_check_looking_under B165_carry_out_looking_under B166_report_looking_under B167_check_searching B168_carry_out_searching B169_report_searching B170_check_consulting_it_abo B171_carry_out_consulting_it B172_report_consulting_it_ab B173_check_locking_it_with B174_carry_out_locking_it_wi B175_report_locking_it_with B176_check_unlocking_it_with B177_carry_out_unlocking_it_ B178_report_unlocking_it_wit B179_check_switching_on B180_carry_out_switching_on B181_report_switching_on B182_check_switching_off B183_carry_out_switching_off B184_report_switching_off B185_check_opening B186_carry_out_opening B187_report_opening B188_check_closing B189_carry_out_closing B190_report_closing B191_check_wearing B192_carry_out_wearing B193_report_wearing B194_check_taking_off B195_carry_out_taking_off B196_report_taking_off B197_check_giving_it_to B198_carry_out_giving_it_to B199_report_giving_it_to B200_check_showing_it_to B201_carry_out_showing_it_to B202_report_showing_it_to B203_check_waking B204_carry_out_waking B205_report_waking B206_check_throwing_it_at B207_carry_out_throwing_it_a B208_report_throwing_it_at B209_check_attacking B210_carry_out_attacking B211_report_attacking B212_check_kissing B213_carry_out_kissing B214_report_kissing B215_check_answering_it_that B216_carry_out_answering_it_ B217_report_answering_it_tha B218_check_telling_it_about B219_carry_out_telling_it_ab B220_report_telling_it_about B221_check_asking_it_about B222_carry_out_asking_it_abo B223_report_asking_it_about B224_check_asking_it_for B225_carry_out_asking_it_for B226_report_asking_it_for B227_check_waiting B228_carry_out_waiting B229_report_waiting B230_check_touching B231_carry_out_touching B232_report_touching B233_check_waving B234_carry_out_waving B235_report_waving B236_check_pulling B237_carry_out_pulling B238_report_pulling B239_check_pushing B240_carry_out_pushing B241_report_pushing B242_check_turning B243_carry_out_turning B244_report_turning B245_check_pushing_it_to B246_carry_out_pushing_it_to B247_report_pushing_it_to B248_check_squeezing B249_carry_out_squeezing B250_report_squeezing B251_check_saying_yes B252_carry_out_saying_yes B253_report_saying_yes B254_check_saying_no B255_carry_out_saying_no B256_report_saying_no B257_check_burning B258_carry_out_burning B259_report_burning B260_check_waking_up B261_carry_out_waking_up B262_report_waking_up B263_check_thinking B264_carry_out_thinking B265_report_thinking B266_check_smelling B267_carry_out_smelling B268_report_smelling B269_check_listening_to B270_carry_out_listening_to B271_report_listening_to B272_check_tasting B273_carry_out_tasting B274_report_tasting B275_check_cutting B276_carry_out_cutting B277_report_cutting B278_check_jumping B279_carry_out_jumping B280_report_jumping B281_check_tying_it_to B282_carry_out_tying_it_to B283_report_tying_it_to B284_check_drinking B285_carry_out_drinking B286_report_drinking B287_check_saying_sorry B288_carry_out_saying_sorry B289_report_saying_sorry B290_check_swearing_obscenel B291_carry_out_swearing_obsc B292_report_swearing_obscene B293_check_swearing_mildly B294_carry_out_swearing_mild B295_report_swearing_mildly B296_check_swinging B297_carry_out_swinging B298_report_swinging B299_check_rubbing B300_carry_out_rubbing B301_report_rubbing B302_check_setting_it_to B303_carry_out_setting_it_to B304_report_setting_it_to B305_check_waving_hands B306_carry_out_waving_hands B307_report_waving_hands B308_check_buying B309_carry_out_buying B310_report_buying B311_check_singing B312_carry_out_singing B313_report_singing B314_check_climbing B315_carry_out_climbing B316_report_climbing B317_check_sleeping B318_carry_out_sleeping B319_report_sleeping B320_check_quitting_the_game B321_carry_out_quitting_the_ B322_report_quitting_the_gam B323_check_saving_the_game B324_carry_out_saving_the_ga B325_report_saving_the_game B326_check_restoring_the_gam B327_carry_out_restoring_the B328_report_restoring_the_ga B329_check_restarting_the_ga B330_carry_out_restarting_th B331_report_restarting_the_g B332_check_verifying_the_sto B333_carry_out_verifying_the B334_report_verifying_the_st B335_check_switching_the_sto B336_carry_out_switching_the B337_report_switching_the_st B338_check_switching_the_sto B339_carry_out_switching_the B340_report_switching_the_st B341_check_requesting_the_st B342_carry_out_requesting_th B343_report_requesting_the_s B344_check_requesting_the_sc B345_carry_out_requesting_th B346_report_requesting_the_s B347_check_preferring_abbrev B348_carry_out_preferring_ab B349_report_preferring_abbre B350_check_preferring_unabbr B351_carry_out_preferring_un B352_report_preferring_unabb B353_check_preferring_someti B354_carry_out_preferring_so B355_report_preferring_somet B356_check_switching_score_n B357_carry_out_switching_sco B358_report_switching_score_ B359_check_switching_score_n B360_carry_out_switching_sco B361_report_switching_score_ B362_check_requesting_the_pr B363_carry_out_requesting_th B364_report_requesting_the_p B365_before_displaying B366_for_displaying B367_after_displaying B368_check_requesting_episte B369_carry_out_requesting_ep B370_report_requesting_epist B371_glulx_timed_activity B372_glulx_redrawing B373_glulx_arranging B374_glulx_sound_notificatio B375_glulx_mouse_input B376_glulx_character_input B377_glulx_line_input B378_glulx_hyperlink B379_glulx_zeroing_reference B380_glulx_resetting_windows B381_glulx_resetting_streams B382_glulx_resetting_fileref B383_glulx_object_updating B384_command_counting B385_input_cancelling B386_command_showing B387_command_pasting B388_before_cloning_a_new_ob B389_for_cloning_a_new_objec B390_after_cloning_a_new_obj B391_before_restoring_from_a B392_for_restoring_from_a_sa B393_after_restoring_from_a_ B394_before_failing_to_resto B395_for_failing_to_restore_ B396_after_failing_to_restor B397_before_automatically_sa B398_for_automatically_savin B399_after_automatically_sav B400_before_failing_to_autom B401_for_failing_to_automati B402_after_failing_to_automa B403_before_failing_to_delet B404_for_failing_to_delete_a B405_after_failing_to_delete B406_hate B407_combat_round B408_starting_the_combat_rou B409_before_running_the_pars B410_for_running_the_parser B411_after_running_the_parse B412_initiative_update B413_standard_ai B414_check_switching_weighti B415_carry_out_switching_wei B416_report_switching_weight B417_check_switching_weighti B418_carry_out_switching_wei B419_report_switching_weight B420_ai_target_selection B421_ai_action_selection B422_check_checking_the_numb B423_carry_out_checking_the_ B424_report_checking_the_num B425_check_switching_the_num B426_carry_out_switching_the B427_report_switching_the_nu B428_check_switching_the_num B429_carry_out_switching_the B430_report_switching_the_nu B431_after_reporting B432_check_hitting B433_carry_out_hitting B434_report_hitting B435_attack_modifier B436_contact B437_damage_modifier B438_damage_multiplier B439_aftereffects B440_check_readying B441_carry_out_readying B442_report_readying B443_check_concentrating B444_carry_out_concentrating B445_report_concentrating B446_lose_concentration_pros B447_check_parrying B448_carry_out_parrying B449_report_parrying B450_check_dodging B451_carry_out_dodging B452_report_dodging B453_ai_weapon_selection B454_chance_to_win B455_further_generation B456_resetting_the_map B457_creating_the_map B458_additional_placement B459_placement_possible B460_placement_scoring B461_final_monster_placement B462_monster_placement_possi B463_monster_placement_scori B464_treasure_placement B465_treasure_scoring B466_dungeon_interest B467_dungeon_finish B468_falling_destination B469_preempt_falling B470_falling B471_fragmentation B472_killing B473_shatter B474_teleportation_event B475_ability_test B476_perception_test B477_dexterity_test B478_willpower_test B479_check_digging B480_carry_out_digging B481_report_digging B482_check_collapsing B483_carry_out_collapsing B484_report_collapsing B485_absorbing B486_repelling B487_absorption_stopping B488_flying B489_blindness B490_check_healing B491_carry_out_healing B492_report_healing B493_check_teleporting B494_carry_out_teleporting B495_report_teleporting B496_teleport_impossible B497_special_teleportation_d B498_check_disintegrating B499_carry_out_disintegratin B500_report_disintegrating B501_followers B502_beloved_of_aite B503_heat_resistance B504_rusting B505_corroding B506_sudden_combat_reset B507_impeded_movement B508_physical_damage_reducti B509_falling_test B510_check_turning_bat B511_carry_out_turning_bat B512_report_turning_bat B513_check_turning_vampire B514_carry_out_turning_vampi B515_report_turning_vampire B516_detection B517_smoke B518_smoke_immunity B519_check_inhaling B520_carry_out_inhaling B521_report_inhaling B522_check_throwing B523_carry_out_throwing B524_report_throwing B525_check_applying_it_to B526_carry_out_applying_it_t B527_report_applying_it_to B528_check_spraying B529_carry_out_spraying B530_report_spraying B531_check_reading B532_carry_out_reading B533_report_reading B534_unholy_wave B535_check_snorting B536_carry_out_snorting B537_report_snorting B538_extra_scoring B539_check_piercing B540_carry_out_piercing B541_report_piercing B542_check_armadillo_eating B543_carry_out_armadillo_eat B544_report_armadillo_eating B545_check_scaling B546_carry_out_scaling B547_report_scaling B548_check_stunning B549_carry_out_stunning B550_report_stunning B551_check_golem_disarming B552_carry_out_golem_disarmi B553_report_golem_disarming B554_check_lashing B555_carry_out_lashing B556_report_lashing B557_check_reaping B558_carry_out_reaping B559_report_reaping B560_check_mindblasting B561_carry_out_mindblasting B562_report_mindblasting B563_check_dominating B564_carry_out_dominating B565_report_dominating B566_check_tentacle_constric B567_carry_out_tentacle_cons B568_report_tentacle_constri B569_check_tentacle_shaking B570_carry_out_tentacle_shak B571_report_tentacle_shaking B572_check_confusing B573_carry_out_confusing B574_report_confusing B575_check_bodmall_fogging B576_carry_out_bodmall_foggi B577_report_bodmall_fogging B578_check_bodmall_transmuti B579_carry_out_bodmall_trans B580_report_bodmall_transmut B581_check_bodmall_barkskinn B582_carry_out_bodmall_barks B583_report_bodmall_barkskin B584_check_bodmall_summoning B585_carry_out_bodmall_summo B586_report_bodmall_summonin B587_check_summoning_thorns B588_carry_out_summoning_tho B589_report_summoning_thorns B590_check_unghouling B591_carry_out_unghouling B592_report_unghouling B593_check_aswang_shifting B594_carry_out_aswang_shifti B595_report_aswang_shifting B596_check_aswang_hexing B597_carry_out_aswang_hexing B598_report_aswang_hexing B599_check_aswang_fleeing B600_carry_out_aswang_fleein B601_report_aswang_fleeing B602_check_pulsating B603_carry_out_pulsating B604_report_pulsating B605_check_imping B606_carry_out_imping B607_report_imping B608_check_imp_grabbing B609_carry_out_imp_grabbing B610_report_imp_grabbing B611_check_retreating B612_carry_out_retreating B613_report_retreating B614_check_going_to B615_carry_out_going_to B616_report_going_to B617_check_shorter_going_to B618_carry_out_shorter_going B619_report_shorter_going_to B620_check_asking_status B621_carry_out_asking_status B622_report_asking_status B623_status B624_status_skill B625_check_remembering B626_carry_out_remembering B627_report_remembering B628_check_sensing B629_carry_out_sensing B630_report_sensing B631_check_trophylisting B632_carry_out_trophylisting B633_report_trophylisting B634_check_showing_commands B635_carry_out_showing_comma B636_report_showing_commands B637_check_praying B638_carry_out_praying B639_report_praying B640_check_direction_jumping B641_carry_out_direction_jum B642_report_direction_jumpin B643_check_equipping B644_carry_out_equipping B645_report_equipping B646_check_talking_to B647_carry_out_talking_to B648_report_talking_to B649_check_plunking B650_carry_out_plunking B651_report_plunking B652_check_plonking B653_carry_out_plonking B654_report_plonking B655_check_ramboing B656_carry_out_ramboing B657_report_ramboing B658_check_meatboying B659_carry_out_meatboying B660_report_meatboying B661_check_reducing B662_carry_out_reducing B663_report_reducing B664_check_testreadying B665_carry_out_testreadying B666_report_testreadying B667_victory_message B668_check_asking_for_help B669_carry_out_asking_for_he B670_report_asking_for_help B671_check_achievemenuing B672_carry_out_achievemenuin B673_report_achievemenuing 0; Constant B0_procedural = EMPTY_RULEBOOK; Array B1_startup --> INITIALISE_MEMORY_R VIRTUAL_MACHINE_STARTUP_R SEED_RANDOM_NUMBER_GENERATOR_R UPDATE_CHRONOLOGICAL_RECORDS_R POSITION_PLAYER_IN_MODEL_R R_8 R_9 R_10 R_11 R_12 R_858 NULL; ! 11 rule(s) Array B2_turn_sequence --> R_837 R_14 R_13 TIMED_EVENTS_R ADVANCE_TIME_R R_838 UPDATE_CHRONOLOGICAL_RECORDS_R R_15 ADJUST_LIGHT_R NOTE_OBJECT_ACQUISITIONS_R NULL; ! 10 rule(s) Array B3_shutdown --> R_17 RESURRECT_PLAYER_IF_ASKED_R R_18 ASK_FINAL_QUESTION_R NULL; ! 4 rule(s) Array B4_scene_changing --> DetectSceneChange NULL; ! 1 rule(s) Array B5_when_play_begins --> (-2) (-2) 31 R_2134 R_2152 R_1816 R_1385 R_817 R_826 R_957 R_967 R_1194 R_1198 R_1199 R_1526 R_1633 R_1074 R_1225 R_1594 R_1683 R_1701 R_1719 R_1773 R_1794 R_1795 R_1813 R_1818 R_1837 R_1838 R_1848 R_1849 R_1850 R_1889 R_1927 (-2) 14 R_1932 R_1937 R_1950 R_1979 R_1986 R_1991 R_2003 R_2020 R_2047 R_2059 R_2115 R_2151 R_2143 R_1320 NULL; ! 45 rule(s) Constant B6_when_play_ends = EMPTY_RULEBOOK; Array B7_when_scene_begins --> R_57 NULL; ! 1 rule(s) Constant B8_when_scene_ends = EMPTY_RULEBOOK; Array B9_every_turn --> (-2) (-2) 31 R_1573 R_1248 R_1246 R_2031 R_1607 R_1731 R_1817 R_1346 R_1461 R_1733 R_1734 R_1992 R_2010 R_1983 R_1197 R_1295 R_1347 R_1470 R_1504 R_1713 R_1996 R_1997 R_2064 R_2103 R_1523 R_1529 R_1530 R_1554 R_1676 R_811 R_1068 (-2) 29 R_1158 R_1178 R_1182 R_1187 R_1190 R_1191 R_1216 R_1218 R_1242 R_1259 R_1301 R_1317 R_1336 R_1569 R_1570 R_1586 R_1599 R_1763 R_1855 R_1902 R_1943 R_1995 R_2035 R_2048 R_2049 R_2145 R_2149 R_1226 R_1227 NULL; ! 60 rule(s) Array B10_action_processing --> R_20 R_19 R_21 R_945 BASIC_VISIBILITY_R R_1827 CARRYING_REQUIREMENTS_R R_22 REQUESTED_ACTIONS_REQUIRE_R CARRY_OUT_REQUESTED_ACTIONS_R DESCEND_TO_SPECIFIC_ACTION_R R_23 NULL; ! 12 rule(s) Array B11_setting_action_variables --> R_856 R_137 R_171 R_972 R_159 NULL; ! 5 rule(s) Array B12_specific_action_processi --> WORK_OUT_DETAILS_OF_SPECIFIC_R R_24 R_25 R_26 R_27 R_28 R_29 R_953 R_30 NULL; ! 9 rule(s) Array B13_player_s_action_awarenes --> R_31 R_32 R_33 R_34 NULL; ! 4 rule(s) Array B14_accessibility --> ACCESS_THROUGH_BARRIERS_R NULL; ! 1 rule(s) Array B15_reaching_inside --> CANT_REACH_INSIDE_ROOMS_R CANT_REACH_INSIDE_CLOSED_R NULL; ! 2 rule(s) Array B16_reaching_outside --> CANT_REACH_OUTSIDE_CLOSED_R NULL; ! 1 rule(s) Array B17_visibility --> R_35 NULL; ! 1 rule(s) Array B18_persuasion --> R_1645 NULL; ! 1 rule(s) Constant B19_unsuccessful_attempt_by = EMPTY_RULEBOOK; Array B20_before --> R_1644 R_1375 R_1545 R_1546 R_1602 R_1345 R_1575 R_1574 R_1338 R_1339 R_1493 NULL; ! 11 rule(s) Array B21_instead --> (-2) ##Go 3 R_1565 R_1660 R_2073 ##Examine R_1240 ##Take R_1241 ##Examine R_1324 (-2) R_1321 ##A136_praying 4 R_1584 R_1571 R_1595 R_1600 ##Smell R_1647 ##A91_digging R_2070 ##Go R_2071 ##Exit R_2074 ##A100_applying_it_to 3 R_1436 R_1435 R_1437 ##ThrowAt R_1369 ##Touch R_1322 ##Take R_1323 ##A99_throwing R_1427 ##A87_readying R_1518 ##Eat R_1524 ##Drink R_1525 ##A102_reading R_1527 ##Attack 2 R_1552 R_1567 ##Climb R_1568 ##Attack R_1581 ##Touch R_1582 ##Climb R_1583 ##Take R_1590 ##Attack R_1591 ##Touch R_1592 ##Climb R_1593 ##Attack R_1596 ##Touch R_1597 ##Climb R_1598 ##Take R_1601 ##Enter R_1605 ##Climb R_1617 ##Open R_1620 ##Close R_1621 ##Turn R_1622 ##Push R_1623 ##Pull R_1624 ##SwitchOn R_1625 ##SwitchOff R_1626 ##Enter 2 R_1628 R_1629 ##Take R_1630 ##A102_reading R_1631 ##Burn R_1632 ##Examine R_1639 ##Take R_1648 ##Search R_1649 ##Smell R_1651 ##Enter R_1658 ##Smell R_1662 ##SwitchOn R_1672 ##SwitchOff R_1673 ##Climb R_1961 ##Enter R_1962 ##Take R_1963 ##Enter R_2075 (-2) 3 R_1646 R_1671 R_1239 ##Eat R_1542 ##Open R_1355 ##Drink R_1356 ##A99_throwing 4 R_1423 R_1424 R_1425 R_1426 ##Eat R_2004 ##Take R_2005 ##AskFor R_2120 ##Wait R_2002 ##Smell R_2009 ##A130_shorter_going_to R_2095 ##Sing R_2116 ##Answer R_2117 ##Tell R_2118 ##Ask R_2119 NULL; ! 86 rule(s) Constant B22_check = EMPTY_RULEBOOK; Constant B23_carry_out = EMPTY_RULEBOOK; Array B24_after --> R_1505 R_970 R_971 R_1508 R_1396 R_956 R_969 R_1399 R_1744 R_859 R_860 R_1015 R_1025 R_1031 R_1561 NULL; ! 15 rule(s) Constant B25_report = EMPTY_RULEBOOK; Array B26_does_the_player_mean --> (-2) ##A100_applying_it_to R_1373 ##Enter 2 R_1659 R_2072 ##A104_piercing R_1696 ##A107_stunning R_1749 ##A112_dominating R_1876 ##Attack R_999 ##Take R_36 ##A87_readying R_991 ##Attack R_998 ##A104_piercing R_1697 ##A107_stunning R_1748 ##A110_reaping 2 R_1828 R_1829 ##A112_dominating R_1875 ##A87_readying R_964 ##A98_inhaling R_1351 ##Wear R_1357 ##A99_throwing R_1370 ##A101_spraying R_1377 ##A102_reading R_1379 NULL; ! 21 rule(s) Constant B27_when_entire_game_begins = EMPTY_RULEBOOK; Constant B28_when_entire_game_ends = EMPTY_RULEBOOK; Array B29_before_printing_the_name --> R_775 R_1210 R_1397 R_831 R_1217 R_1230 R_58 R_1200 NULL; ! 8 rule(s) Array B30_for_printing_the_name --> STANDARD_NAME_PRINTING_R NULL; ! 1 rule(s) Array B31_after_printing_the_name --> R_1201 R_961 R_1548 R_776 R_832 R_946 R_880 NULL; ! 7 rule(s) Constant B32_before_printing_the_plur = EMPTY_RULEBOOK; Array B33_for_printing_the_plural_ --> R_59 NULL; ! 1 rule(s) Constant B34_after_printing_the_plura = EMPTY_RULEBOOK; Constant B35_before_printing_a_number = EMPTY_RULEBOOK; Array B36_for_printing_a_number --> R_60 NULL; ! 1 rule(s) Constant B37_after_printing_a_number = EMPTY_RULEBOOK; Constant B38_before_printing_room_des = EMPTY_RULEBOOK; Constant B39_for_printing_room_descri = EMPTY_RULEBOOK; Constant B40_after_printing_room_desc = EMPTY_RULEBOOK; Constant B41_before_listing_contents = EMPTY_RULEBOOK; Array B42_for_listing_contents --> STANDARD_CONTENTS_LISTING_R NULL; ! 1 rule(s) Constant B43_after_listing_contents = EMPTY_RULEBOOK; Constant B44_before_grouping_together = EMPTY_RULEBOOK; Constant B45_for_grouping_together = EMPTY_RULEBOOK; Constant B46_after_grouping_together = EMPTY_RULEBOOK; Constant B47_before_writing_a_paragra = EMPTY_RULEBOOK; Constant B48_for_writing_a_paragraph_ = EMPTY_RULEBOOK; Constant B49_after_writing_a_paragrap = EMPTY_RULEBOOK; Constant B50_before_listing_nondescri = EMPTY_RULEBOOK; Constant B51_for_listing_nondescript_ = EMPTY_RULEBOOK; Constant B52_after_listing_nondescrip = EMPTY_RULEBOOK; Constant B53_before_printing_the_name = EMPTY_RULEBOOK; Constant B54_for_printing_the_name_of = EMPTY_RULEBOOK; Constant B55_after_printing_the_name_ = EMPTY_RULEBOOK; Constant B56_before_printing_the_desc = EMPTY_RULEBOOK; Constant B57_for_printing_the_descrip = EMPTY_RULEBOOK; Constant B58_after_printing_the_descr = EMPTY_RULEBOOK; Constant B59_before_printing_the_anno = EMPTY_RULEBOOK; Constant B60_for_printing_the_announc = EMPTY_RULEBOOK; Constant B61_after_printing_the_annou = EMPTY_RULEBOOK; Constant B62_before_printing_the_anno = EMPTY_RULEBOOK; Array B63_for_printing_the_announc --> R_61 NULL; ! 1 rule(s) Constant B64_after_printing_the_annou = EMPTY_RULEBOOK; Constant B65_before_printing_a_refusa = EMPTY_RULEBOOK; Constant B66_for_printing_a_refusal_t = EMPTY_RULEBOOK; Constant B67_after_printing_a_refusal = EMPTY_RULEBOOK; Constant B68_before_constructing_the_ = EMPTY_RULEBOOK; Array B69_for_constructing_the_sta --> R_748 R_2123 NULL; ! 2 rule(s) Constant B70_after_constructing_the_s = EMPTY_RULEBOOK; Constant B71_before_printing_the_bann = EMPTY_RULEBOOK; Constant B72_for_printing_the_banner_ = EMPTY_RULEBOOK; Constant B73_after_printing_the_banne = EMPTY_RULEBOOK; Array B74_before_reading_a_command --> R_816 R_1572 NULL; ! 2 rule(s) Constant B75_for_reading_a_command = EMPTY_RULEBOOK; Array B76_after_reading_a_command --> R_779 R_1065 R_2096 NULL; ! 3 rule(s) Constant B77_before_deciding_the_scop = EMPTY_RULEBOOK; Constant B78_for_deciding_the_scope = EMPTY_RULEBOOK; Array B79_after_deciding_the_scope --> R_1640 R_1641 NULL; ! 2 rule(s) Constant B80_before_deciding_the_conc = EMPTY_RULEBOOK; Constant B81_for_deciding_the_conceal = EMPTY_RULEBOOK; Constant B82_after_deciding_the_conce = EMPTY_RULEBOOK; Constant B83_before_deciding_whether_ = EMPTY_RULEBOOK; Array B84_for_deciding_whether_all --> R_62 R_64 R_63 NULL; ! 3 rule(s) Constant B85_after_deciding_whether_a = EMPTY_RULEBOOK; Constant B86_before_clarifying_the_pa = EMPTY_RULEBOOK; Constant B87_for_clarifying_the_parse = EMPTY_RULEBOOK; Constant B88_after_clarifying_the_par = EMPTY_RULEBOOK; Array B89_before_asking_which_do_y --> R_777 NULL; ! 1 rule(s) Constant B90_for_asking_which_do_you_ = EMPTY_RULEBOOK; Constant B91_after_asking_which_do_yo = EMPTY_RULEBOOK; Constant B92_before_printing_a_parser = EMPTY_RULEBOOK; Array B93_for_printing_a_parser_er --> R_778 NULL; ! 1 rule(s) Constant B94_after_printing_a_parser_ = EMPTY_RULEBOOK; Constant B95_before_supplying_a_missi = EMPTY_RULEBOOK; Array B96_for_supplying_a_missing_ --> R_65 R_66 R_1131 R_148 NULL; ! 4 rule(s) Constant B97_after_supplying_a_missin = EMPTY_RULEBOOK; Constant B98_before_supplying_a_missi = EMPTY_RULEBOOK; Constant B99_for_supplying_a_missing_ = EMPTY_RULEBOOK; Constant B100_after_supplying_a_missi = EMPTY_RULEBOOK; Constant B101_before_implicitly_takin = EMPTY_RULEBOOK; Constant B102_for_implicitly_taking = EMPTY_RULEBOOK; Constant B103_after_implicitly_taking = EMPTY_RULEBOOK; Constant B104_before_starting_the_vir = EMPTY_RULEBOOK; Array B105_for_starting_the_virtua --> ENABLE_GLULX_ACCEL_R NULL; ! 1 rule(s) Constant B106_after_starting_the_virt = EMPTY_RULEBOOK; Constant B107_before_amusing_a_victor = EMPTY_RULEBOOK; Constant B108_for_amusing_a_victoriou = EMPTY_RULEBOOK; Constant B109_after_amusing_a_victori = EMPTY_RULEBOOK; Array B110_before_printing_the_pla --> R_2162 R_2167 R_2171 R_2172 NULL; ! 4 rule(s) Array B111_for_printing_the_player --> PRINT_OBITUARY_HEADLINE_R PRINT_FINAL_SCORE_R DISPLAY_FINAL_STATUS_LINE_R NULL; ! 3 rule(s) Array B112_after_printing_the_play --> R_824 R_2150 NULL; ! 2 rule(s) Array B113_before_handling_the_fin --> R_69 R_68 READ_FINAL_ANSWER_R NULL; ! 3 rule(s) Array B114_for_handling_the_final_ --> R_70 NULL; ! 1 rule(s) Constant B115_after_handling_the_fina = EMPTY_RULEBOOK; Array B116_before_printing_the_loc --> R_1255 R_73 R_74 NULL; ! 3 rule(s) Array B117_for_printing_the_locale --> R_75 R_2122 NULL; ! 2 rule(s) Constant B118_after_printing_the_loca = EMPTY_RULEBOOK; Constant B119_before_choosing_notable = EMPTY_RULEBOOK; Array B120_for_choosing_notable_lo --> R_77 NULL; ! 1 rule(s) Constant B121_after_choosing_notable_ = EMPTY_RULEBOOK; Constant B122_before_printing_a_local = EMPTY_RULEBOOK; Array B123_for_printing_a_locale_p --> R_78 R_79 R_80 R_81 R_82 R_83 R_85 NULL; ! 7 rule(s) Constant B124_after_printing_a_locale = EMPTY_RULEBOOK; Array B125_check_taking_inventory --> R_1899 NULL; ! 1 rule(s) Array B126_carry_out_taking_invent --> R_2125 NULL; ! 1 rule(s) Array B127_report_taking_inventory --> R_88 NULL; ! 1 rule(s) Array B128_check_taking --> R_1543 R_89 R_90 R_91 R_93 R_94 R_96 R_97 R_98 R_99 R_100 R_955 R_1133 R_1896 NULL; ! 14 rule(s) Array B129_carry_out_taking --> R_101 R_1312 NULL; ! 2 rule(s) Array B130_report_taking --> R_102 NULL; ! 1 rule(s) Array B131_check_removing_it_from --> R_91 R_103 R_104 R_105 NULL; ! 4 rule(s) Constant B132_carry_out_removing_it_f = EMPTY_RULEBOOK; Constant B133_report_removing_it_from = EMPTY_RULEBOOK; Array B134_check_dropping --> R_106 R_107 R_108 R_109 R_110 R_1401 NULL; ! 6 rule(s) Array B135_carry_out_dropping --> R_111 R_1311 NULL; ! 2 rule(s) Array B136_report_dropping --> R_112 NULL; ! 1 rule(s) Array B137_check_putting_it_on --> R_1374 R_113 R_114 R_115 R_116 R_117 R_118 R_119 R_1402 NULL; ! 9 rule(s) Array B138_carry_out_putting_it_on --> R_120 NULL; ! 1 rule(s) Array B139_report_putting_it_on --> R_121 R_122 NULL; ! 2 rule(s) Array B140_check_inserting_it_into --> R_123 R_124 R_125 R_126 R_127 R_128 R_129 R_1403 R_1618 R_1635 NULL; ! 10 rule(s) Array B141_carry_out_inserting_it_ --> R_1566 R_130 NULL; ! 2 rule(s) Array B142_report_inserting_it_int --> R_131 R_132 NULL; ! 2 rule(s) Array B143_check_eating --> R_133 R_134 NULL; ! 2 rule(s) Array B144_carry_out_eating --> R_135 NULL; ! 1 rule(s) Array B145_report_eating --> R_136 NULL; ! 1 rule(s) Array B146_check_going --> R_138 R_1132 R_139 R_140 R_141 R_142 R_1893 R_2084 R_1410 R_2085 R_2086 NULL; ! 11 rule(s) Array B147_carry_out_going --> R_2077 R_1145 R_144 R_145 R_146 R_1019 NULL; ! 6 rule(s) Array B148_report_going --> R_147 R_2097 NULL; ! 2 rule(s) Array B149_check_entering --> R_149 R_150 R_151 R_152 R_153 R_154 R_155 R_1897 NULL; ! 8 rule(s) Array B150_carry_out_entering --> R_1563 R_1606 R_156 NULL; ! 3 rule(s) Array B151_report_entering --> R_157 R_158 NULL; ! 2 rule(s) Array B152_check_exiting --> R_160 R_161 R_162 R_163 R_1898 NULL; ! 5 rule(s) Array B153_carry_out_exiting --> R_164 NULL; ! 1 rule(s) Array B154_report_exiting --> R_165 R_166 NULL; ! 2 rule(s) Array B155_check_getting_off --> R_167 NULL; ! 1 rule(s) Array B156_carry_out_getting_off --> R_168 NULL; ! 1 rule(s) Array B157_report_getting_off --> R_169 R_170 NULL; ! 2 rule(s) Array B158_check_looking --> R_2087 NULL; ! 1 rule(s) Array B159_carry_out_looking --> R_172 R_173 R_174 R_175 R_769 R_1151 NULL; ! 6 rule(s) Array B160_report_looking --> R_176 R_2126 NULL; ! 2 rule(s) Constant B161_check_examining = EMPTY_RULEBOOK; Array B162_carry_out_examining --> R_771 R_177 R_178 R_179 R_180 R_181 R_182 R_1211 R_2101 NULL; ! 9 rule(s) Array B163_report_examining --> R_183 R_1138 NULL; ! 2 rule(s) Constant B164_check_looking_under = EMPTY_RULEBOOK; Array B165_carry_out_looking_under --> R_184 NULL; ! 1 rule(s) Array B166_report_looking_under --> R_185 NULL; ! 1 rule(s) Array B167_check_searching --> R_186 R_187 NULL; ! 2 rule(s) Constant B168_carry_out_searching = EMPTY_RULEBOOK; Array B169_report_searching --> R_188 R_189 R_190 NULL; ! 3 rule(s) Constant B170_check_consulting_it_abo = EMPTY_RULEBOOK; Constant B171_carry_out_consulting_it = EMPTY_RULEBOOK; Array B172_report_consulting_it_ab --> R_191 NULL; ! 1 rule(s) Array B173_check_locking_it_with --> R_192 R_193 R_194 R_195 NULL; ! 4 rule(s) Array B174_carry_out_locking_it_wi --> R_196 NULL; ! 1 rule(s) Array B175_report_locking_it_with --> R_197 NULL; ! 1 rule(s) Array B176_check_unlocking_it_with --> R_198 R_199 R_200 NULL; ! 3 rule(s) Array B177_carry_out_unlocking_it_ --> R_201 NULL; ! 1 rule(s) Array B178_report_unlocking_it_wit --> R_202 NULL; ! 1 rule(s) Array B179_check_switching_on --> R_203 R_204 NULL; ! 2 rule(s) Array B180_carry_out_switching_on --> R_205 NULL; ! 1 rule(s) Array B181_report_switching_on --> R_206 NULL; ! 1 rule(s) Array B182_check_switching_off --> R_207 R_208 NULL; ! 2 rule(s) Array B183_carry_out_switching_off --> R_209 NULL; ! 1 rule(s) Array B184_report_switching_off --> R_210 NULL; ! 1 rule(s) Array B185_check_opening --> R_211 R_212 R_213 NULL; ! 3 rule(s) Array B186_carry_out_opening --> R_214 R_770 NULL; ! 2 rule(s) Array B187_report_opening --> R_1604 R_215 R_216 R_1249 NULL; ! 4 rule(s) Array B188_check_closing --> R_217 R_218 NULL; ! 2 rule(s) Array B189_carry_out_closing --> R_219 NULL; ! 1 rule(s) Array B190_report_closing --> R_220 NULL; ! 1 rule(s) Array B191_check_wearing --> R_221 R_222 R_223 R_1294 R_1894 R_1358 R_1359 R_1360 R_1361 R_1362 R_1363 R_1364 R_1365 R_1366 R_1367 NULL; ! 15 rule(s) Array B192_carry_out_wearing --> R_224 NULL; ! 1 rule(s) Array B193_report_wearing --> R_225 R_1394 NULL; ! 2 rule(s) Array B194_check_taking_off --> R_1395 R_226 R_1895 NULL; ! 3 rule(s) Array B195_carry_out_taking_off --> R_227 NULL; ! 1 rule(s) Array B196_report_taking_off --> R_228 NULL; ! 1 rule(s) Array B197_check_giving_it_to --> R_229 R_230 R_231 R_232 R_233 NULL; ! 5 rule(s) Array B198_carry_out_giving_it_to --> R_234 NULL; ! 1 rule(s) Array B199_report_giving_it_to --> R_235 NULL; ! 1 rule(s) Array B200_check_showing_it_to --> R_236 R_237 R_238 NULL; ! 3 rule(s) Constant B201_carry_out_showing_it_to = EMPTY_RULEBOOK; Constant B202_report_showing_it_to = EMPTY_RULEBOOK; Array B203_check_waking --> R_239 NULL; ! 1 rule(s) Constant B204_carry_out_waking = EMPTY_RULEBOOK; Constant B205_report_waking = EMPTY_RULEBOOK; Array B206_check_throwing_it_at --> R_240 R_241 R_242 NULL; ! 3 rule(s) Constant B207_carry_out_throwing_it_a = EMPTY_RULEBOOK; Constant B208_report_throwing_it_at = EMPTY_RULEBOOK; Array B209_check_attacking --> R_1000 R_1005 R_1578 R_1001 R_1755 R_1856 R_1964 R_1774 R_1579 R_1580 R_1900 R_1987 NULL; ! 12 rule(s) Array B210_carry_out_attacking --> R_1067 R_1006 R_1308 NULL; ! 3 rule(s) Array B211_report_attacking --> R_1690 R_1707 R_1722 R_1766 R_1782 R_1805 R_1821 R_1846 R_1860 R_1866 R_1917 R_1930 R_1935 R_1940 R_1971 R_2018 R_2039 R_2054 R_2067 R_1007 NULL; ! 20 rule(s) Array B212_check_kissing --> R_244 R_245 NULL; ! 2 rule(s) Constant B213_carry_out_kissing = EMPTY_RULEBOOK; Constant B214_report_kissing = EMPTY_RULEBOOK; Constant B215_check_answering_it_that = EMPTY_RULEBOOK; Constant B216_carry_out_answering_it_ = EMPTY_RULEBOOK; Array B217_report_answering_it_tha --> R_246 NULL; ! 1 rule(s) Array B218_check_telling_it_about --> R_247 NULL; ! 1 rule(s) Constant B219_carry_out_telling_it_ab = EMPTY_RULEBOOK; Array B220_report_telling_it_about --> R_248 NULL; ! 1 rule(s) Constant B221_check_asking_it_about = EMPTY_RULEBOOK; Constant B222_carry_out_asking_it_abo = EMPTY_RULEBOOK; Array B223_report_asking_it_about --> R_249 NULL; ! 1 rule(s) Array B224_check_asking_it_for --> R_250 R_251 NULL; ! 2 rule(s) Constant B225_carry_out_asking_it_for = EMPTY_RULEBOOK; Constant B226_report_asking_it_for = EMPTY_RULEBOOK; Array B227_check_waiting --> R_1687 R_2043 NULL; ! 2 rule(s) Array B228_carry_out_waiting --> R_878 R_1412 NULL; ! 2 rule(s) Array B229_report_waiting --> R_1413 R_252 NULL; ! 2 rule(s) Constant B230_check_touching = EMPTY_RULEBOOK; Constant B231_carry_out_touching = EMPTY_RULEBOOK; Array B232_report_touching --> R_253 R_254 R_255 NULL; ! 3 rule(s) Array B233_check_waving --> R_256 NULL; ! 1 rule(s) Constant B234_carry_out_waving = EMPTY_RULEBOOK; Array B235_report_waving --> R_257 NULL; ! 1 rule(s) Array B236_check_pulling --> R_258 R_259 R_260 NULL; ! 3 rule(s) Constant B237_carry_out_pulling = EMPTY_RULEBOOK; Array B238_report_pulling --> R_261 NULL; ! 1 rule(s) Array B239_check_pushing --> R_262 R_263 R_264 NULL; ! 3 rule(s) Constant B240_carry_out_pushing = EMPTY_RULEBOOK; Array B241_report_pushing --> R_265 NULL; ! 1 rule(s) Array B242_check_turning --> R_266 R_267 R_268 NULL; ! 3 rule(s) Constant B243_carry_out_turning = EMPTY_RULEBOOK; Array B244_report_turning --> R_269 NULL; ! 1 rule(s) Array B245_check_pushing_it_to --> R_270 R_271 R_272 R_273 R_274 NULL; ! 5 rule(s) Constant B246_carry_out_pushing_it_to = EMPTY_RULEBOOK; Constant B247_report_pushing_it_to = EMPTY_RULEBOOK; Array B248_check_squeezing --> R_275 NULL; ! 1 rule(s) Constant B249_carry_out_squeezing = EMPTY_RULEBOOK; Array B250_report_squeezing --> R_276 NULL; ! 1 rule(s) Array B251_check_saying_yes --> R_277 NULL; ! 1 rule(s) Constant B252_carry_out_saying_yes = EMPTY_RULEBOOK; Constant B253_report_saying_yes = EMPTY_RULEBOOK; Array B254_check_saying_no --> R_278 NULL; ! 1 rule(s) Constant B255_carry_out_saying_no = EMPTY_RULEBOOK; Constant B256_report_saying_no = EMPTY_RULEBOOK; Array B257_check_burning --> R_279 NULL; ! 1 rule(s) Constant B258_carry_out_burning = EMPTY_RULEBOOK; Constant B259_report_burning = EMPTY_RULEBOOK; Array B260_check_waking_up --> R_280 NULL; ! 1 rule(s) Constant B261_carry_out_waking_up = EMPTY_RULEBOOK; Constant B262_report_waking_up = EMPTY_RULEBOOK; Array B263_check_thinking --> R_281 NULL; ! 1 rule(s) Constant B264_carry_out_thinking = EMPTY_RULEBOOK; Constant B265_report_thinking = EMPTY_RULEBOOK; Array B266_check_smelling --> R_282 NULL; ! 1 rule(s) Constant B267_carry_out_smelling = EMPTY_RULEBOOK; Constant B268_report_smelling = EMPTY_RULEBOOK; Array B269_check_listening_to --> R_283 NULL; ! 1 rule(s) Constant B270_carry_out_listening_to = EMPTY_RULEBOOK; Constant B271_report_listening_to = EMPTY_RULEBOOK; Array B272_check_tasting --> R_284 NULL; ! 1 rule(s) Constant B273_carry_out_tasting = EMPTY_RULEBOOK; Constant B274_report_tasting = EMPTY_RULEBOOK; Array B275_check_cutting --> R_285 NULL; ! 1 rule(s) Constant B276_carry_out_cutting = EMPTY_RULEBOOK; Constant B277_report_cutting = EMPTY_RULEBOOK; Array B278_check_jumping --> R_286 NULL; ! 1 rule(s) Constant B279_carry_out_jumping = EMPTY_RULEBOOK; Constant B280_report_jumping = EMPTY_RULEBOOK; Array B281_check_tying_it_to --> R_287 NULL; ! 1 rule(s) Constant B282_carry_out_tying_it_to = EMPTY_RULEBOOK; Constant B283_report_tying_it_to = EMPTY_RULEBOOK; Array B284_check_drinking --> R_288 NULL; ! 1 rule(s) Constant B285_carry_out_drinking = EMPTY_RULEBOOK; Constant B286_report_drinking = EMPTY_RULEBOOK; Array B287_check_saying_sorry --> R_289 NULL; ! 1 rule(s) Constant B288_carry_out_saying_sorry = EMPTY_RULEBOOK; Constant B289_report_saying_sorry = EMPTY_RULEBOOK; Array B290_check_swearing_obscenel --> R_290 NULL; ! 1 rule(s) Constant B291_carry_out_swearing_obsc = EMPTY_RULEBOOK; Constant B292_report_swearing_obscene = EMPTY_RULEBOOK; Array B293_check_swearing_mildly --> R_291 NULL; ! 1 rule(s) Constant B294_carry_out_swearing_mild = EMPTY_RULEBOOK; Constant B295_report_swearing_mildly = EMPTY_RULEBOOK; Array B296_check_swinging --> R_292 NULL; ! 1 rule(s) Constant B297_carry_out_swinging = EMPTY_RULEBOOK; Constant B298_report_swinging = EMPTY_RULEBOOK; Array B299_check_rubbing --> R_293 NULL; ! 1 rule(s) Constant B300_carry_out_rubbing = EMPTY_RULEBOOK; Constant B301_report_rubbing = EMPTY_RULEBOOK; Array B302_check_setting_it_to --> R_294 NULL; ! 1 rule(s) Constant B303_carry_out_setting_it_to = EMPTY_RULEBOOK; Constant B304_report_setting_it_to = EMPTY_RULEBOOK; Array B305_check_waving_hands --> R_295 NULL; ! 1 rule(s) Constant B306_carry_out_waving_hands = EMPTY_RULEBOOK; Constant B307_report_waving_hands = EMPTY_RULEBOOK; Array B308_check_buying --> R_296 NULL; ! 1 rule(s) Constant B309_carry_out_buying = EMPTY_RULEBOOK; Constant B310_report_buying = EMPTY_RULEBOOK; Array B311_check_singing --> R_297 NULL; ! 1 rule(s) Array B312_carry_out_singing --> R_1313 NULL; ! 1 rule(s) Constant B313_report_singing = EMPTY_RULEBOOK; Array B314_check_climbing --> R_298 NULL; ! 1 rule(s) Constant B315_carry_out_climbing = EMPTY_RULEBOOK; Constant B316_report_climbing = EMPTY_RULEBOOK; Array B317_check_sleeping --> R_299 NULL; ! 1 rule(s) Constant B318_carry_out_sleeping = EMPTY_RULEBOOK; Constant B319_report_sleeping = EMPTY_RULEBOOK; Constant B320_check_quitting_the_game = EMPTY_RULEBOOK; Array B321_carry_out_quitting_the_ --> QUIT_THE_GAME_R NULL; ! 1 rule(s) Constant B322_report_quitting_the_gam = EMPTY_RULEBOOK; Array B323_check_saving_the_game --> R_822 NULL; ! 1 rule(s) Array B324_carry_out_saving_the_ga --> SAVE_THE_GAME_R NULL; ! 1 rule(s) Constant B325_report_saving_the_game = EMPTY_RULEBOOK; Array B326_check_restoring_the_gam --> R_823 NULL; ! 1 rule(s) Array B327_carry_out_restoring_the --> RESTORE_THE_GAME_R NULL; ! 1 rule(s) Constant B328_report_restoring_the_ga = EMPTY_RULEBOOK; Constant B329_check_restarting_the_ga = EMPTY_RULEBOOK; Array B330_carry_out_restarting_th --> R_2137 R_825 RESTART_THE_GAME_R NULL; ! 3 rule(s) Constant B331_report_restarting_the_g = EMPTY_RULEBOOK; Constant B332_check_verifying_the_sto = EMPTY_RULEBOOK; Array B333_carry_out_verifying_the --> VERIFY_THE_STORY_FILE_R NULL; ! 1 rule(s) Constant B334_report_verifying_the_st = EMPTY_RULEBOOK; Constant B335_check_switching_the_sto = EMPTY_RULEBOOK; Array B336_carry_out_switching_the --> SWITCH_TRANSCRIPT_ON_R NULL; ! 1 rule(s) Constant B337_report_switching_the_st = EMPTY_RULEBOOK; Constant B338_check_switching_the_sto = EMPTY_RULEBOOK; Array B339_carry_out_switching_the --> SWITCH_TRANSCRIPT_OFF_R NULL; ! 1 rule(s) Constant B340_report_switching_the_st = EMPTY_RULEBOOK; Constant B341_check_requesting_the_st = EMPTY_RULEBOOK; Array B342_carry_out_requesting_th --> ANNOUNCE_STORY_FILE_VERSION_R NULL; ! 1 rule(s) Constant B343_report_requesting_the_s = EMPTY_RULEBOOK; Constant B344_check_requesting_the_sc = EMPTY_RULEBOOK; Array B345_carry_out_requesting_th --> ANNOUNCE_SCORE_R NULL; ! 1 rule(s) Constant B346_report_requesting_the_s = EMPTY_RULEBOOK; Constant B347_check_preferring_abbrev = EMPTY_RULEBOOK; Array B348_carry_out_preferring_ab --> PREFER_ABBREVIATED_R NULL; ! 1 rule(s) Array B349_report_preferring_abbre --> REP_PREFER_ABBREVIATED_R NULL; ! 1 rule(s) Constant B350_check_preferring_unabbr = EMPTY_RULEBOOK; Array B351_carry_out_preferring_un --> PREFER_UNABBREVIATED_R NULL; ! 1 rule(s) Array B352_report_preferring_unabb --> REP_PREFER_UNABBREVIATED_R NULL; ! 1 rule(s) Constant B353_check_preferring_someti = EMPTY_RULEBOOK; Array B354_carry_out_preferring_so --> PREFER_SOMETIMES_ABBREVIATED_R NULL; ! 1 rule(s) Array B355_report_preferring_somet --> REP_PREFER_SOMETIMES_ABBR_R NULL; ! 1 rule(s) Constant B356_check_switching_score_n = EMPTY_RULEBOOK; Array B357_carry_out_switching_sco --> SWITCH_SCORE_NOTIFY_ON_R NULL; ! 1 rule(s) Array B358_report_switching_score_ --> REP_SWITCH_NOTIFY_ON_R NULL; ! 1 rule(s) Constant B359_check_switching_score_n = EMPTY_RULEBOOK; Array B360_carry_out_switching_sco --> SWITCH_SCORE_NOTIFY_OFF_R NULL; ! 1 rule(s) Array B361_report_switching_score_ --> REP_SWITCH_NOTIFY_OFF_R NULL; ! 1 rule(s) Constant B362_check_requesting_the_pr = EMPTY_RULEBOOK; Array B363_carry_out_requesting_th --> ANNOUNCE_PRONOUN_MEANINGS_R NULL; ! 1 rule(s) Constant B364_report_requesting_the_p = EMPTY_RULEBOOK; Constant B365_before_displaying = EMPTY_RULEBOOK; Array B366_for_displaying --> R_747 NULL; ! 1 rule(s) Constant B367_after_displaying = EMPTY_RULEBOOK; Constant B368_check_requesting_episte = EMPTY_RULEBOOK; Constant B369_carry_out_requesting_ep = EMPTY_RULEBOOK; Array B370_report_requesting_epist --> R_774 NULL; ! 1 rule(s) Constant B371_glulx_timed_activity = EMPTY_RULEBOOK; Constant B372_glulx_redrawing = EMPTY_RULEBOOK; Constant B373_glulx_arranging = EMPTY_RULEBOOK; Constant B374_glulx_sound_notificatio = EMPTY_RULEBOOK; Constant B375_glulx_mouse_input = EMPTY_RULEBOOK; Constant B376_glulx_character_input = EMPTY_RULEBOOK; Constant B377_glulx_line_input = EMPTY_RULEBOOK; Constant B378_glulx_hyperlink = EMPTY_RULEBOOK; Constant B379_glulx_zeroing_reference = EMPTY_RULEBOOK; Constant B380_glulx_resetting_windows = EMPTY_RULEBOOK; Constant B381_glulx_resetting_streams = EMPTY_RULEBOOK; Constant B382_glulx_resetting_fileref = EMPTY_RULEBOOK; Constant B383_glulx_object_updating = EMPTY_RULEBOOK; Array B384_command_counting --> R_794 NULL; ! 1 rule(s) Array B385_input_cancelling --> R_795 NULL; ! 1 rule(s) Array B386_command_showing --> R_798 NULL; ! 1 rule(s) Array B387_command_pasting --> R_800 NULL; ! 1 rule(s) Array B388_before_cloning_a_new_ob --> R_807 NULL; ! 1 rule(s) Constant B389_for_cloning_a_new_objec = EMPTY_RULEBOOK; Array B390_after_cloning_a_new_obj --> R_809 R_1383 NULL; ! 2 rule(s) Constant B391_before_restoring_from_a = EMPTY_RULEBOOK; Array B392_for_restoring_from_a_sa --> R_818 NULL; ! 1 rule(s) Constant B393_after_restoring_from_a_ = EMPTY_RULEBOOK; Constant B394_before_failing_to_resto = EMPTY_RULEBOOK; Array B395_for_failing_to_restore_ --> R_819 NULL; ! 1 rule(s) Constant B396_after_failing_to_restor = EMPTY_RULEBOOK; Constant B397_before_automatically_sa = EMPTY_RULEBOOK; Constant B398_for_automatically_savin = EMPTY_RULEBOOK; Constant B399_after_automatically_sav = EMPTY_RULEBOOK; Constant B400_before_failing_to_autom = EMPTY_RULEBOOK; Array B401_for_failing_to_automati --> R_820 NULL; ! 1 rule(s) Constant B402_after_failing_to_automa = EMPTY_RULEBOOK; Constant B403_before_failing_to_delet = EMPTY_RULEBOOK; Array B404_for_failing_to_delete_a --> R_821 NULL; ! 1 rule(s) Constant B405_after_failing_to_delete = EMPTY_RULEBOOK; Array B406_hate --> R_1195 NULL; ! 1 rule(s) Array B407_combat_round --> R_839 R_840 R_841 R_842 R_843 R_844 R_845 R_846 R_847 NULL; ! 9 rule(s) Array B408_starting_the_combat_rou --> R_851 R_968 NULL; ! 2 rule(s) Array B409_before_running_the_pars --> R_855 R_1642 NULL; ! 2 rule(s) Array B410_for_running_the_parser --> PARSE_COMMAND_R GENERATE_ACTION_R NULL; ! 2 rule(s) Array B411_after_running_the_parse --> R_857 R_1643 NULL; ! 2 rule(s) Array B412_initiative_update --> R_848 R_1796 R_849 R_850 R_1406 R_1490 R_1492 R_1496 R_1608 R_2029 R_2083 NULL; ! 11 rule(s) Array B413_standard_ai --> R_1300 R_869 R_868 R_867 R_1038 R_876 NULL; ! 6 rule(s) Constant B414_check_switching_weighti = EMPTY_RULEBOOK; Array B415_carry_out_switching_wei --> R_864 NULL; ! 1 rule(s) Constant B416_report_switching_weight = EMPTY_RULEBOOK; Constant B417_check_switching_weighti = EMPTY_RULEBOOK; Array B418_carry_out_switching_wei --> R_865 NULL; ! 1 rule(s) Constant B419_report_switching_weight = EMPTY_RULEBOOK; Array B420_ai_target_selection --> R_1843 R_1892 R_873 R_870 R_871 R_872 R_1033 R_1034 R_1035 R_1036 R_1037 R_874 R_1063 R_875 NULL; ! 14 rule(s) Array B421_ai_action_selection --> (-2) (-2) 31 R_1188 R_1180 R_1176 R_1050 R_1049 R_1048 R_1047 R_1046 R_1045 R_879 R_1156 R_1059 R_1560 R_1551 R_1555 R_2032 R_1778 R_1797 R_1799 R_1839 R_1840 R_1841 R_1891 R_1906 R_1909 R_1999 R_2000 R_2027 R_2033 R_2041 R_2042 (-2) 27 R_1684 R_1686 R_1726 R_1777 R_1798 R_1953 R_1955 R_1958 R_1967 R_1984 R_1998 R_2001 R_2012 R_2021 R_2060 R_1055 R_1057 R_1058 R_1073 R_1181 R_1514 R_1762 R_1056 R_1500 R_1522 R_1747 R_877 NULL; ! 58 rule(s) Constant B422_check_checking_the_numb = EMPTY_RULEBOOK; Array B423_carry_out_checking_the_ --> R_950 NULL; ! 1 rule(s) Constant B424_report_checking_the_num = EMPTY_RULEBOOK; Array B425_check_switching_the_num --> R_1064 NULL; ! 1 rule(s) Array B426_carry_out_switching_the --> R_951 NULL; ! 1 rule(s) Constant B427_report_switching_the_nu = EMPTY_RULEBOOK; Constant B428_check_switching_the_num = EMPTY_RULEBOOK; Array B429_carry_out_switching_the --> R_952 NULL; ! 1 rule(s) Constant B430_report_switching_the_nu = EMPTY_RULEBOOK; Array B431_after_reporting --> R_988 R_1965 NULL; ! 2 rule(s) Array B432_check_hitting --> R_1549 R_1066 NULL; ! 2 rule(s) Array B433_carry_out_hitting --> R_2165 R_973 R_977 R_979 R_981 R_984 NULL; ! 6 rule(s) Array B434_report_hitting --> (-2) ##A86_hitting 31 R_1688 R_1705 R_1720 R_1764 R_1780 R_1804 R_1819 R_1844 R_1857 R_1863 R_1915 R_1928 R_1933 R_1938 R_1969 R_1988 R_2016 R_2037 R_2046 R_2052 R_2065 R_1689 R_1706 R_1721 R_1765 R_1781 R_1820 R_1845 R_1859 R_1865 R_1916 ##A86_hitting 10 R_1929 R_1934 R_1939 R_1970 R_1989 R_2017 R_2038 R_2053 R_2066 R_1062 NULL; ! 41 rule(s) Array B435_attack_modifier --> (-2) (-2) 31 R_1231 R_1212 R_1140 R_1271 R_1279 R_1280 R_1287 R_1289 R_2088 R_1024 R_1030 R_1203 R_1237 R_1299 R_1330 R_1332 R_1333 R_1391 R_1420 R_1428 R_1679 R_1681 R_1801 R_1802 R_1911 R_2013 R_2014 R_962 R_975 R_1012 R_1069 (-2) 27 R_1173 R_1174 R_1292 R_1407 R_1430 R_1432 R_1487 R_1497 R_1499 R_1506 R_1511 R_1516 R_1532 R_1535 R_1544 R_1576 R_1588 R_1704 R_1759 R_1851 R_1853 R_1884 R_1951 R_1966 R_976 R_1213 R_1232 NULL; ! 58 rule(s) Array B436_contact --> R_978 R_1800 R_1890 NULL; ! 3 rule(s) Array B437_damage_modifier --> (-2) (-2) 31 R_1233 R_1214 R_980 R_1137 R_1272 R_2089 R_1202 R_1219 R_1235 R_1236 R_1261 R_1262 R_1393 R_1703 R_1717 R_1775 R_1952 R_1776 R_1070 R_1486 R_1494 R_1520 R_1534 R_1577 R_1712 R_1736 R_1738 R_1754 R_1814 R_1960 R_1215 (-2) R_1234 NULL; ! 32 rule(s) Array B438_damage_multiplier --> R_1466 R_1510 R_1517 R_2015 R_2058 R_1340 R_982 R_1919 R_983 NULL; ! 9 rule(s) Array B439_aftereffects --> (-2) (-2) 24 R_989 R_1071 R_1913 R_990 R_1513 R_1060 R_1220 R_1414 R_1489 R_1509 R_1562 R_1616 R_1685 R_1702 R_1714 R_1756 R_1815 R_1886 R_1901 R_1980 R_2011 R_2163 R_2166 R_2168 NULL; ! 24 rule(s) Array B440_check_readying --> R_992 R_993 R_1293 R_1400 NULL; ! 4 rule(s) Array B441_carry_out_readying --> R_994 R_995 R_996 NULL; ! 3 rule(s) Array B442_report_readying --> R_997 NULL; ! 1 rule(s) Array B443_check_concentrating --> R_1008 R_1761 NULL; ! 2 rule(s) Array B444_carry_out_concentrating --> R_1009 R_1010 R_1309 NULL; ! 3 rule(s) Array B445_report_concentrating --> R_1725 R_1769 R_1785 R_1807 R_1823 R_2057 R_1011 NULL; ! 7 rule(s) Array B446_lose_concentration_pros --> R_1786 R_1808 R_1061 NULL; ! 3 rule(s) Array B447_check_parrying --> R_1020 NULL; ! 1 rule(s) Array B448_carry_out_parrying --> R_1021 R_1022 R_2170 NULL; ! 3 rule(s) Array B449_report_parrying --> R_1691 R_1708 R_1723 R_1767 R_1783 R_1862 R_1868 R_1941 R_2055 R_1023 NULL; ! 10 rule(s) Array B450_check_dodging --> R_1027 NULL; ! 1 rule(s) Array B451_carry_out_dodging --> R_1028 R_2169 NULL; ! 2 rule(s) Array B452_report_dodging --> R_1692 R_1709 R_1724 R_1768 R_1784 R_1806 R_1822 R_1847 R_1861 R_1867 R_1918 R_1931 R_1936 R_1942 R_1972 R_2019 R_2040 R_2056 R_2068 R_1029 NULL; ! 20 rule(s) Array B453_ai_weapon_selection --> R_1981 R_1043 R_1039 R_1040 R_1041 R_1042 R_1044 NULL; ! 7 rule(s) Array B454_chance_to_win --> (-2) (-2) 31 R_1051 R_1281 R_1288 R_1204 R_1238 R_1331 R_1392 R_1421 R_1680 R_1682 R_1803 R_1912 R_963 R_1018 R_1026 R_1032 R_1052 R_1053 R_1072 R_1431 R_1433 R_1488 R_1498 R_1507 R_1512 R_1533 R_1589 R_1760 R_1852 R_1854 R_1885 (-2) R_1054 NULL; ! 32 rule(s) Constant B455_further_generation = EMPTY_RULEBOOK; Array B456_resetting_the_map --> R_1076 R_1077 R_1080 NULL; ! 3 rule(s) Array B457_creating_the_map --> R_1078 R_1079 NULL; ! 2 rule(s) Array B458_additional_placement --> R_1559 R_1611 R_1637 R_1638 NULL; ! 4 rule(s) Array B459_placement_possible --> R_1084 R_1142 R_1556 R_1558 R_1610 R_1636 R_1085 NULL; ! 7 rule(s) Array B460_placement_scoring --> R_1143 R_1144 R_1609 NULL; ! 3 rule(s) Array B461_final_monster_placement --> R_1926 R_1990 NULL; ! 2 rule(s) Array B462_monster_placement_possi --> R_1105 R_1106 R_1107 NULL; ! 3 rule(s) Constant B463_monster_placement_scori = EMPTY_RULEBOOK; Array B464_treasure_placement --> (-2) (-2) 31 R_1111 R_1112 R_1113 R_1114 R_1415 R_1418 R_1491 R_1603 R_1398 R_1404 R_1439 R_1440 R_1441 R_1443 R_1445 R_1446 R_1448 R_1449 R_1450 R_1452 R_1453 R_1454 R_1456 R_1458 R_1462 R_1463 R_1467 R_1475 R_1476 R_1479 R_1480 (-2) 3 R_1481 R_1482 R_1483 NULL; ! 34 rule(s) Array B465_treasure_scoring --> R_1348 R_1349 R_1634 NULL; ! 3 rule(s) Array B466_dungeon_interest --> R_1247 R_1619 R_1654 R_1655 R_1656 R_1661 R_1663 R_1664 R_1670 R_1675 R_1730 R_1335 R_1388 NULL; ! 13 rule(s) Array B467_dungeon_finish --> R_1350 R_1250 NULL; ! 2 rule(s) Array B468_falling_destination --> R_1267 NULL; ! 1 rule(s) Constant B469_preempt_falling = EMPTY_RULEBOOK; Array B470_falling --> R_1268 R_1557 R_1269 NULL; ! 3 rule(s) Array B471_fragmentation --> R_1123 R_1124 R_1125 R_1547 NULL; ! 4 rule(s) Array B472_killing --> R_1157 R_1811 R_2164 NULL; ! 3 rule(s) Array B473_shatter --> R_1128 R_1129 NULL; ! 2 rule(s) Array B474_teleportation_event --> R_2104 NULL; ! 1 rule(s) Array B475_ability_test --> R_1531 R_1536 NULL; ! 2 rule(s) Array B476_perception_test --> R_1334 R_1175 R_1416 R_1472 R_1550 NULL; ! 5 rule(s) Array B477_dexterity_test --> R_1474 NULL; ! 1 rule(s) Array B478_willpower_test --> R_1278 R_1419 R_1422 R_1473 NULL; ! 4 rule(s) Array B479_check_digging --> R_1146 R_1147 R_1148 NULL; ! 3 rule(s) Array B480_carry_out_digging --> R_1149 NULL; ! 1 rule(s) Constant B481_report_digging = EMPTY_RULEBOOK; Array B482_check_collapsing --> R_1152 R_1153 R_1154 NULL; ! 3 rule(s) Array B483_carry_out_collapsing --> R_1155 NULL; ! 1 rule(s) Constant B484_report_collapsing = EMPTY_RULEBOOK; Array B485_absorbing --> R_1502 R_1693 R_1710 R_1735 R_1770 R_1787 R_1809 R_1824 R_1871 R_1920 R_1945 R_1973 R_1503 NULL; ! 13 rule(s) Array B486_repelling --> R_1694 R_1711 R_1737 R_1771 R_1788 R_1810 R_1825 R_1872 R_1921 R_1946 R_1974 NULL; ! 11 rule(s) Array B487_absorption_stopping --> R_2045 NULL; ! 1 rule(s) Array B488_flying --> R_1167 R_1291 R_2036 NULL; ! 3 rule(s) Array B489_blindness --> R_1170 R_1171 R_1417 NULL; ! 3 rule(s) Constant B490_check_healing = EMPTY_RULEBOOK; Array B491_carry_out_healing --> R_1177 NULL; ! 1 rule(s) Constant B492_report_healing = EMPTY_RULEBOOK; Array B493_check_teleporting --> R_1183 NULL; ! 1 rule(s) Array B494_carry_out_teleporting --> R_1184 R_1982 NULL; ! 2 rule(s) Constant B495_report_teleporting = EMPTY_RULEBOOK; Array B496_teleport_impossible --> R_1434 NULL; ! 1 rule(s) Array B497_special_teleportation_d --> R_1674 R_2063 NULL; ! 2 rule(s) Constant B498_check_disintegrating = EMPTY_RULEBOOK; Array B499_carry_out_disintegratin --> R_1189 NULL; ! 1 rule(s) Constant B500_report_disintegrating = EMPTY_RULEBOOK; Array B501_followers --> R_1192 R_1193 R_1994 NULL; ! 3 rule(s) Array B502_beloved_of_aite --> R_1206 R_1429 R_1948 NULL; ! 3 rule(s) Array B503_heat_resistance --> R_1222 R_1223 R_1484 R_1519 NULL; ! 4 rule(s) Array B504_rusting --> R_1244 R_1245 NULL; ! 2 rule(s) Array B505_corroding --> R_1253 R_1254 NULL; ! 2 rule(s) Array B506_sudden_combat_reset --> R_1256 R_1257 R_1904 NULL; ! 3 rule(s) Array B507_impeded_movement --> R_1343 R_1905 NULL; ! 2 rule(s) Array B508_physical_damage_reducti --> R_1273 R_1342 R_1495 R_1521 R_1718 R_1739 NULL; ! 6 rule(s) Array B509_falling_test --> R_1264 R_1265 R_1266 NULL; ! 3 rule(s) Array B510_check_turning_bat --> R_1284 NULL; ! 1 rule(s) Array B511_carry_out_turning_bat --> R_1285 NULL; ! 1 rule(s) Constant B512_report_turning_bat = EMPTY_RULEBOOK; Array B513_check_turning_vampire --> R_1296 NULL; ! 1 rule(s) Array B514_carry_out_turning_vampi --> R_1297 NULL; ! 1 rule(s) Constant B515_report_turning_vampire = EMPTY_RULEBOOK; Array B516_detection --> R_1282 R_1290 R_1302 R_1303 R_1304 R_1305 R_1306 R_1307 R_1329 R_1344 R_1677 NULL; ! 11 rule(s) Array B517_smoke --> R_1319 R_1627 R_1657 R_1669 R_2069 R_1318 NULL; ! 6 rule(s) Array B518_smoke_immunity --> R_1326 R_1327 NULL; ! 2 rule(s) Array B519_check_inhaling --> R_1352 NULL; ! 1 rule(s) Array B520_carry_out_inhaling --> R_1353 R_1405 R_1408 R_1411 R_1501 R_1515 R_1354 NULL; ! 7 rule(s) Constant B521_report_inhaling = EMPTY_RULEBOOK; Array B522_check_throwing --> R_1371 NULL; ! 1 rule(s) Array B523_carry_out_throwing --> R_1372 NULL; ! 1 rule(s) Constant B524_report_throwing = EMPTY_RULEBOOK; Constant B525_check_applying_it_to = EMPTY_RULEBOOK; Array B526_carry_out_applying_it_t --> R_1376 NULL; ! 1 rule(s) Constant B527_report_applying_it_to = EMPTY_RULEBOOK; Array B528_check_spraying --> R_1378 NULL; ! 1 rule(s) Array B529_carry_out_spraying --> R_1485 NULL; ! 1 rule(s) Constant B530_report_spraying = EMPTY_RULEBOOK; Array B531_check_reading --> R_1380 R_1381 R_1387 NULL; ! 3 rule(s) Array B532_carry_out_reading --> R_1310 R_1438 R_1442 R_1444 R_1447 R_1451 R_1455 R_1457 R_1459 R_1464 R_1468 R_1469 R_1478 R_1382 NULL; ! 14 rule(s) Constant B533_report_reading = EMPTY_RULEBOOK; Array B534_unholy_wave --> R_1477 NULL; ! 1 rule(s) Array B535_check_snorting --> R_1538 R_1537 NULL; ! 2 rule(s) Array B536_carry_out_snorting --> R_1539 NULL; ! 1 rule(s) Constant B537_report_snorting = EMPTY_RULEBOOK; Array B538_extra_scoring --> R_1668 R_1678 NULL; ! 2 rule(s) Array B539_check_piercing --> R_1698 R_1699 NULL; ! 2 rule(s) Array B540_carry_out_piercing --> R_1700 NULL; ! 1 rule(s) Constant B541_report_piercing = EMPTY_RULEBOOK; Constant B542_check_armadillo_eating = EMPTY_RULEBOOK; Array B543_carry_out_armadillo_eat --> R_1729 R_2076 NULL; ! 2 rule(s) Constant B544_report_armadillo_eating = EMPTY_RULEBOOK; Array B545_check_scaling --> R_1740 R_1741 R_1742 NULL; ! 3 rule(s) Array B546_carry_out_scaling --> R_1743 NULL; ! 1 rule(s) Constant B547_report_scaling = EMPTY_RULEBOOK; Array B548_check_stunning --> R_1750 R_1751 R_1752 NULL; ! 3 rule(s) Array B549_carry_out_stunning --> R_1753 NULL; ! 1 rule(s) Constant B550_report_stunning = EMPTY_RULEBOOK; Constant B551_check_golem_disarming = EMPTY_RULEBOOK; Array B552_carry_out_golem_disarmi --> R_1779 NULL; ! 1 rule(s) Constant B553_report_golem_disarming = EMPTY_RULEBOOK; Array B554_check_lashing --> R_1789 R_1790 NULL; ! 2 rule(s) Array B555_carry_out_lashing --> R_1791 NULL; ! 1 rule(s) Array B556_report_lashing --> R_1792 NULL; ! 1 rule(s) Array B557_check_reaping --> R_1830 R_1831 R_1832 R_1833 R_1834 R_1835 NULL; ! 6 rule(s) Array B558_carry_out_reaping --> R_1836 NULL; ! 1 rule(s) Constant B559_report_reaping = EMPTY_RULEBOOK; Constant B560_check_mindblasting = EMPTY_RULEBOOK; Array B561_carry_out_mindblasting --> R_1842 NULL; ! 1 rule(s) Constant B562_report_mindblasting = EMPTY_RULEBOOK; Array B563_check_dominating --> R_1877 R_1878 R_1879 R_1880 R_1881 R_1882 NULL; ! 6 rule(s) Array B564_carry_out_dominating --> R_1883 NULL; ! 1 rule(s) Constant B565_report_dominating = EMPTY_RULEBOOK; Constant B566_check_tentacle_constric = EMPTY_RULEBOOK; Array B567_carry_out_tentacle_cons --> R_1908 NULL; ! 1 rule(s) Constant B568_report_tentacle_constri = EMPTY_RULEBOOK; Constant B569_check_tentacle_shaking = EMPTY_RULEBOOK; Array B570_carry_out_tentacle_shak --> R_1910 NULL; ! 1 rule(s) Constant B571_report_tentacle_shaking = EMPTY_RULEBOOK; Array B572_check_confusing --> R_1922 R_1923 NULL; ! 2 rule(s) Array B573_carry_out_confusing --> R_1924 NULL; ! 1 rule(s) Constant B574_report_confusing = EMPTY_RULEBOOK; Constant B575_check_bodmall_fogging = EMPTY_RULEBOOK; Array B576_carry_out_bodmall_foggi --> R_1954 NULL; ! 1 rule(s) Constant B577_report_bodmall_fogging = EMPTY_RULEBOOK; Constant B578_check_bodmall_transmuti = EMPTY_RULEBOOK; Array B579_carry_out_bodmall_trans --> R_1956 NULL; ! 1 rule(s) Constant B580_report_bodmall_transmut = EMPTY_RULEBOOK; Constant B581_check_bodmall_barkskinn = EMPTY_RULEBOOK; Array B582_carry_out_bodmall_barks --> R_1959 NULL; ! 1 rule(s) Constant B583_report_bodmall_barkskin = EMPTY_RULEBOOK; Constant B584_check_bodmall_summoning = EMPTY_RULEBOOK; Array B585_carry_out_bodmall_summo --> R_1968 NULL; ! 1 rule(s) Constant B586_report_bodmall_summonin = EMPTY_RULEBOOK; Array B587_check_summoning_thorns --> R_1976 R_1977 NULL; ! 2 rule(s) Array B588_carry_out_summoning_tho --> R_1978 NULL; ! 1 rule(s) Constant B589_report_summoning_thorns = EMPTY_RULEBOOK; Constant B590_check_unghouling = EMPTY_RULEBOOK; Array B591_carry_out_unghouling --> R_1985 NULL; ! 1 rule(s) Constant B592_report_unghouling = EMPTY_RULEBOOK; Constant B593_check_aswang_shifting = EMPTY_RULEBOOK; Array B594_carry_out_aswang_shifti --> R_2022 NULL; ! 1 rule(s) Constant B595_report_aswang_shifting = EMPTY_RULEBOOK; Constant B596_check_aswang_hexing = EMPTY_RULEBOOK; Array B597_carry_out_aswang_hexing --> R_2028 NULL; ! 1 rule(s) Constant B598_report_aswang_hexing = EMPTY_RULEBOOK; Constant B599_check_aswang_fleeing = EMPTY_RULEBOOK; Array B600_carry_out_aswang_fleein --> R_2034 NULL; ! 1 rule(s) Constant B601_report_aswang_fleeing = EMPTY_RULEBOOK; Constant B602_check_pulsating = EMPTY_RULEBOOK; Array B603_carry_out_pulsating --> R_2044 NULL; ! 1 rule(s) Constant B604_report_pulsating = EMPTY_RULEBOOK; Constant B605_check_imping = EMPTY_RULEBOOK; Array B606_carry_out_imping --> R_2061 NULL; ! 1 rule(s) Constant B607_report_imping = EMPTY_RULEBOOK; Constant B608_check_imp_grabbing = EMPTY_RULEBOOK; Array B609_carry_out_imp_grabbing --> R_2062 NULL; ! 1 rule(s) Constant B610_report_imp_grabbing = EMPTY_RULEBOOK; Array B611_check_retreating --> R_2078 R_2079 R_2080 R_2081 R_1409 NULL; ! 5 rule(s) Array B612_carry_out_retreating --> R_2082 NULL; ! 1 rule(s) Constant B613_report_retreating = EMPTY_RULEBOOK; Array B614_check_going_to --> R_2090 NULL; ! 1 rule(s) Array B615_carry_out_going_to --> R_2094 NULL; ! 1 rule(s) Constant B616_report_going_to = EMPTY_RULEBOOK; Constant B617_check_shorter_going_to = EMPTY_RULEBOOK; Constant B618_carry_out_shorter_going = EMPTY_RULEBOOK; Constant B619_report_shorter_going_to = EMPTY_RULEBOOK; Constant B620_check_asking_status = EMPTY_RULEBOOK; Array B621_carry_out_asking_status --> R_2098 NULL; ! 1 rule(s) Constant B622_report_asking_status = EMPTY_RULEBOOK; Array B623_status --> R_1168 R_1172 R_1196 R_1274 R_1277 R_1286 R_1298 R_1341 R_1465 R_1471 R_1541 R_1715 R_1745 R_1757 R_1887 R_1903 R_1914 R_2030 R_2099 R_2100 NULL; ! 20 rule(s) Array B624_status_skill --> R_1695 R_1716 R_1746 R_1772 R_1793 R_1812 R_1826 R_1888 R_1925 R_1947 R_1975 NULL; ! 11 rule(s) Constant B625_check_remembering = EMPTY_RULEBOOK; Array B626_carry_out_remembering --> R_2102 NULL; ! 1 rule(s) Constant B627_report_remembering = EMPTY_RULEBOOK; Constant B628_check_sensing = EMPTY_RULEBOOK; Array B629_carry_out_sensing --> R_2106 NULL; ! 1 rule(s) Constant B630_report_sensing = EMPTY_RULEBOOK; Constant B631_check_trophylisting = EMPTY_RULEBOOK; Array B632_carry_out_trophylisting --> R_2108 NULL; ! 1 rule(s) Constant B633_report_trophylisting = EMPTY_RULEBOOK; Constant B634_check_showing_commands = EMPTY_RULEBOOK; Array B635_carry_out_showing_comma --> R_2109 NULL; ! 1 rule(s) Constant B636_report_showing_commands = EMPTY_RULEBOOK; Array B637_check_praying --> R_1949 NULL; ! 1 rule(s) Array B638_carry_out_praying --> R_2110 NULL; ! 1 rule(s) Constant B639_report_praying = EMPTY_RULEBOOK; Array B640_check_direction_jumping --> R_1613 R_1614 NULL; ! 2 rule(s) Array B641_carry_out_direction_jum --> R_1564 R_1615 R_2111 NULL; ! 3 rule(s) Constant B642_report_direction_jumpin = EMPTY_RULEBOOK; Array B643_check_equipping --> R_2112 NULL; ! 1 rule(s) Array B644_carry_out_equipping --> R_2113 R_2114 NULL; ! 2 rule(s) Constant B645_report_equipping = EMPTY_RULEBOOK; Constant B646_check_talking_to = EMPTY_RULEBOOK; Constant B647_carry_out_talking_to = EMPTY_RULEBOOK; Array B648_report_talking_to --> R_2121 R_1869 R_1870 NULL; ! 3 rule(s) Constant B649_check_plunking = EMPTY_RULEBOOK; Array B650_carry_out_plunking --> R_2128 NULL; ! 1 rule(s) Constant B651_report_plunking = EMPTY_RULEBOOK; Constant B652_check_plonking = EMPTY_RULEBOOK; Array B653_carry_out_plonking --> R_2129 NULL; ! 1 rule(s) Constant B654_report_plonking = EMPTY_RULEBOOK; Constant B655_check_ramboing = EMPTY_RULEBOOK; Array B656_carry_out_ramboing --> R_2130 NULL; ! 1 rule(s) Constant B657_report_ramboing = EMPTY_RULEBOOK; Constant B658_check_meatboying = EMPTY_RULEBOOK; Array B659_carry_out_meatboying --> R_2131 NULL; ! 1 rule(s) Constant B660_report_meatboying = EMPTY_RULEBOOK; Constant B661_check_reducing = EMPTY_RULEBOOK; Array B662_carry_out_reducing --> R_2132 NULL; ! 1 rule(s) Constant B663_report_reducing = EMPTY_RULEBOOK; Constant B664_check_testreadying = EMPTY_RULEBOOK; Array B665_carry_out_testreadying --> R_2133 NULL; ! 1 rule(s) Constant B666_report_testreadying = EMPTY_RULEBOOK; Array B667_victory_message --> R_2147 R_2146 NULL; ! 2 rule(s) Constant B668_check_asking_for_help = EMPTY_RULEBOOK; Array B669_carry_out_asking_for_he --> R_2155 NULL; ! 1 rule(s) Constant B670_report_asking_for_help = EMPTY_RULEBOOK; Constant B671_check_achievemenuing = EMPTY_RULEBOOK; Array B672_carry_out_achievemenuin --> R_2173 NULL; ! 1 rule(s) Constant B673_report_achievemenuing = EMPTY_RULEBOOK; Constant BR_0 = R_8; Constant BR_1 = R_9; Constant BR_2 = R_10; Constant BR_3 = R_11; Constant BR_4 = R_12; Constant BR_5 = R_13; Constant BR_6 = R_16; Constant BR_7 = R_17; Constant BR_8 = R_18; Constant BR_9 = R_19; Constant BR_10 = R_20; Constant BR_11 = R_21; Constant BR_12 = R_22; Constant BR_13 = R_23; Constant BR_14 = R_24; Constant BR_15 = R_25; Constant BR_16 = R_26; Constant BR_17 = R_27; Constant BR_18 = R_28; Constant BR_19 = R_29; Constant BR_20 = R_31; Constant BR_21 = R_32; Constant BR_22 = R_33; Constant BR_23 = R_34; Constant BR_24 = R_35; Constant BR_25 = R_36; Constant BR_26 = R_57; Constant BR_27 = R_58; Constant BR_28 = R_59; Constant BR_29 = R_60; Constant BR_30 = R_61; Constant BR_31 = R_62; Constant BR_32 = R_63; Constant BR_33 = R_64; Constant BR_34 = R_65; Constant BR_35 = R_66; Constant BR_36 = R_67; Constant BR_37 = R_68; Constant BR_38 = R_69; Constant BR_39 = R_70; Constant BR_40 = R_73; Constant BR_41 = R_74; Constant BR_42 = R_75; Constant BR_43 = R_76; Constant BR_44 = R_77; Constant BR_45 = R_78; Constant BR_46 = R_79; Constant BR_47 = R_80; Constant BR_48 = R_81; Constant BR_49 = R_82; Constant BR_50 = R_83; Constant BR_51 = R_85; Constant BR_52 = R_86; Constant BR_53 = R_87; Constant BR_54 = R_88; Constant BR_55 = R_89; Constant BR_56 = R_90; Constant BR_57 = R_91; Constant BR_58 = R_92; Constant BR_59 = R_93; Constant BR_60 = R_94; Constant BR_61 = R_95; Constant BR_62 = R_96; Constant BR_63 = R_97; Constant BR_64 = R_98; Constant BR_65 = R_99; Constant BR_66 = R_100; Constant BR_67 = R_101; Constant BR_68 = R_102; Constant BR_69 = R_103; Constant BR_70 = R_104; Constant BR_71 = R_105; Constant BR_72 = R_106; Constant BR_73 = R_107; Constant BR_74 = R_108; Constant BR_75 = R_109; Constant BR_76 = R_110; Constant BR_77 = R_111; Constant BR_78 = R_112; Constant BR_79 = R_113; Constant BR_80 = R_114; Constant BR_81 = R_115; Constant BR_82 = R_116; Constant BR_83 = R_117; Constant BR_84 = R_118; Constant BR_85 = R_119; Constant BR_86 = R_120; Constant BR_87 = R_121; Constant BR_88 = R_122; Constant BR_89 = R_123; Constant BR_90 = R_124; Constant BR_91 = R_125; Constant BR_92 = R_126; Constant BR_93 = R_127; Constant BR_94 = R_128; Constant BR_95 = R_129; Constant BR_96 = R_130; Constant BR_97 = R_131; Constant BR_98 = R_132; Constant BR_99 = R_133; Constant BR_100 = R_134; Constant BR_101 = R_135; Constant BR_102 = R_136; Constant BR_103 = R_137; Constant BR_104 = R_138; Constant BR_105 = R_139; Constant BR_106 = R_140; Constant BR_107 = R_141; Constant BR_108 = R_142; Constant BR_109 = R_143; Constant BR_110 = R_144; Constant BR_111 = R_145; Constant BR_112 = R_146; Constant BR_113 = R_147; Constant BR_114 = R_148; Constant BR_115 = R_149; Constant BR_116 = R_150; Constant BR_117 = R_151; Constant BR_118 = R_152; Constant BR_119 = R_153; Constant BR_120 = R_154; Constant BR_121 = R_155; Constant BR_122 = R_156; Constant BR_123 = R_157; Constant BR_124 = R_158; Constant BR_125 = R_160; Constant BR_126 = R_161; Constant BR_127 = R_162; Constant BR_128 = R_163; Constant BR_129 = R_164; Constant BR_130 = R_165; Constant BR_131 = R_166; Constant BR_132 = R_167; Constant BR_133 = R_168; Constant BR_134 = R_169; Constant BR_135 = R_170; Constant BR_136 = R_171; Constant BR_137 = R_172; Constant BR_138 = R_173; Constant BR_139 = R_174; Constant BR_140 = R_175; Constant BR_141 = R_176; Constant BR_142 = R_177; Constant BR_143 = R_178; Constant BR_144 = R_179; Constant BR_145 = R_180; Constant BR_146 = R_181; Constant BR_147 = R_182; Constant BR_148 = R_183; Constant BR_149 = R_184; Constant BR_150 = R_185; Constant BR_151 = R_186; Constant BR_152 = R_187; Constant BR_153 = R_188; Constant BR_154 = R_189; Constant BR_155 = R_190; Constant BR_156 = R_191; Constant BR_157 = R_192; Constant BR_158 = R_193; Constant BR_159 = R_194; Constant BR_160 = R_195; Constant BR_161 = R_196; Constant BR_162 = R_197; Constant BR_163 = R_198; Constant BR_164 = R_199; Constant BR_165 = R_200; Constant BR_166 = R_201; Constant BR_167 = R_202; Constant BR_168 = R_203; Constant BR_169 = R_204; Constant BR_170 = R_205; Constant BR_171 = R_206; Constant BR_172 = R_207; Constant BR_173 = R_208; Constant BR_174 = R_209; Constant BR_175 = R_210; Constant BR_176 = R_211; Constant BR_177 = R_212; Constant BR_178 = R_213; Constant BR_179 = R_214; Constant BR_180 = R_215; Constant BR_181 = R_216; Constant BR_182 = R_217; Constant BR_183 = R_218; Constant BR_184 = R_219; Constant BR_185 = R_220; Constant BR_186 = R_221; Constant BR_187 = R_222; Constant BR_188 = R_223; Constant BR_189 = R_224; Constant BR_190 = R_225; Constant BR_191 = R_226; Constant BR_192 = R_227; Constant BR_193 = R_228; Constant BR_194 = R_229; Constant BR_195 = R_230; Constant BR_196 = R_231; Constant BR_197 = R_232; Constant BR_198 = R_233; Constant BR_199 = R_234; Constant BR_200 = R_235; Constant BR_201 = R_236; Constant BR_202 = R_237; Constant BR_203 = R_238; Constant BR_204 = R_239; Constant BR_205 = R_240; Constant BR_206 = R_241; Constant BR_207 = R_242; Constant BR_208 = R_243; Constant BR_209 = R_244; Constant BR_210 = R_245; Constant BR_211 = R_246; Constant BR_212 = R_247; Constant BR_213 = R_248; Constant BR_214 = R_249; Constant BR_215 = R_250; Constant BR_216 = R_251; Constant BR_217 = R_252; Constant BR_218 = R_253; Constant BR_219 = R_254; Constant BR_220 = R_255; Constant BR_221 = R_256; Constant BR_222 = R_257; Constant BR_223 = R_258; Constant BR_224 = R_259; Constant BR_225 = R_260; Constant BR_226 = R_261; Constant BR_227 = R_262; Constant BR_228 = R_263; Constant BR_229 = R_264; Constant BR_230 = R_265; Constant BR_231 = R_266; Constant BR_232 = R_267; Constant BR_233 = R_268; Constant BR_234 = R_269; Constant BR_235 = R_270; Constant BR_236 = R_271; Constant BR_237 = R_272; Constant BR_238 = R_273; Constant BR_239 = R_274; Constant BR_240 = R_275; Constant BR_241 = R_276; Constant BR_242 = R_277; Constant BR_243 = R_278; Constant BR_244 = R_279; Constant BR_245 = R_280; Constant BR_246 = R_281; Constant BR_247 = R_282; Constant BR_248 = R_283; Constant BR_249 = R_284; Constant BR_250 = R_285; Constant BR_251 = R_286; Constant BR_252 = R_287; Constant BR_253 = R_288; Constant BR_254 = R_289; Constant BR_255 = R_290; Constant BR_256 = R_291; Constant BR_257 = R_292; Constant BR_258 = R_293; Constant BR_259 = R_294; Constant BR_260 = R_295; Constant BR_261 = R_296; Constant BR_262 = R_297; Constant BR_263 = R_298; Constant BR_264 = R_299; Constant BR_265 = R_740; Constant BR_266 = R_741; Constant BR_267 = R_742; Constant BR_268 = R_743; Constant BR_269 = R_747; Constant BR_270 = R_748; Constant BR_271 = R_751; Constant BR_272 = R_769; Constant BR_273 = R_770; Constant BR_274 = R_771; Constant BR_275 = R_775; Constant BR_276 = R_776; Constant BR_277 = R_777; Constant BR_278 = R_778; Constant BR_279 = R_779; Constant BR_280 = R_794; Constant BR_281 = R_795; Constant BR_282 = R_798; Constant BR_283 = R_800; Constant BR_284 = R_807; Constant BR_285 = R_809; Constant BR_286 = R_811; Constant BR_287 = R_816; Constant BR_288 = R_817; Constant BR_289 = R_818; Constant BR_290 = R_819; Constant BR_291 = R_820; Constant BR_292 = R_821; Constant BR_293 = R_822; Constant BR_294 = R_823; Constant BR_295 = R_824; Constant BR_296 = R_825; Constant BR_297 = R_826; Constant BR_298 = R_831; Constant BR_299 = R_832; Constant BR_300 = R_834; Constant BR_301 = R_837; Constant BR_302 = R_838; Constant BR_303 = R_839; Constant BR_304 = R_840; Constant BR_305 = R_841; Constant BR_306 = R_842; Constant BR_307 = R_843; Constant BR_308 = R_844; Constant BR_309 = R_845; Constant BR_310 = R_846; Constant BR_311 = R_847; Constant BR_312 = R_848; Constant BR_313 = R_849; Constant BR_314 = R_850; Constant BR_315 = R_851; Constant BR_316 = R_855; Constant BR_317 = R_856; Constant BR_318 = R_857; Constant BR_319 = R_858; Constant BR_320 = R_859; Constant BR_321 = R_860; Constant BR_322 = R_864; Constant BR_323 = R_865; Constant BR_324 = R_867; Constant BR_325 = R_868; Constant BR_326 = R_869; Constant BR_327 = R_870; Constant BR_328 = R_871; Constant BR_329 = R_872; Constant BR_330 = R_873; Constant BR_331 = R_874; Constant BR_332 = R_875; Constant BR_333 = R_876; Constant BR_334 = R_877; Constant BR_335 = R_878; Constant BR_336 = R_879; Constant BR_337 = R_880; Constant BR_338 = R_945; Constant BR_339 = R_946; Constant BR_340 = R_950; Constant BR_341 = R_951; Constant BR_342 = R_952; Constant BR_343 = R_953; Constant BR_344 = R_955; Constant BR_345 = R_956; Constant BR_346 = R_957; Constant BR_347 = R_961; Constant BR_348 = R_962; Constant BR_349 = R_963; Constant BR_350 = R_967; Constant BR_351 = R_968; Constant BR_352 = R_969; Constant BR_353 = R_970; Constant BR_354 = R_971; Constant BR_355 = R_972; Constant BR_356 = R_973; Constant BR_357 = R_974; Constant BR_358 = R_975; Constant BR_359 = R_976; Constant BR_360 = R_977; Constant BR_361 = R_978; Constant BR_362 = R_979; Constant BR_363 = R_980; Constant BR_364 = R_981; Constant BR_365 = R_982; Constant BR_366 = R_983; Constant BR_367 = R_984; Constant BR_368 = R_985; Constant BR_369 = R_986; Constant BR_370 = R_987; Constant BR_371 = R_988; Constant BR_372 = R_989; Constant BR_373 = R_990; Constant BR_374 = R_992; Constant BR_375 = R_993; Constant BR_376 = R_994; Constant BR_377 = R_995; Constant BR_378 = R_996; Constant BR_379 = R_997; Constant BR_380 = R_1000; Constant BR_381 = R_1001; Constant BR_382 = R_1002; Constant BR_383 = R_1003; Constant BR_384 = R_1004; Constant BR_385 = R_1005; Constant BR_386 = R_1006; Constant BR_387 = R_1007; Constant BR_388 = R_1008; Constant BR_389 = R_1009; Constant BR_390 = R_1010; Constant BR_391 = R_1011; Constant BR_392 = R_1012; Constant BR_393 = R_1013; Constant BR_394 = R_1014; Constant BR_395 = R_1015; Constant BR_396 = R_1017; Constant BR_397 = R_1018; Constant BR_398 = R_1019; Constant BR_399 = R_1020; Constant BR_400 = R_1021; Constant BR_401 = R_1022; Constant BR_402 = R_1023; Constant BR_403 = R_1024; Constant BR_404 = R_1025; Constant BR_405 = R_1026; Constant BR_406 = R_1027; Constant BR_407 = R_1028; Constant BR_408 = R_1029; Constant BR_409 = R_1030; Constant BR_410 = R_1031; Constant BR_411 = R_1032; Constant BR_412 = R_1033; Constant BR_413 = R_1034; Constant BR_414 = R_1035; Constant BR_415 = R_1036; Constant BR_416 = R_1037; Constant BR_417 = R_1038; Constant BR_418 = R_1039; Constant BR_419 = R_1040; Constant BR_420 = R_1041; Constant BR_421 = R_1042; Constant BR_422 = R_1043; Constant BR_423 = R_1044; Constant BR_424 = R_1045; Constant BR_425 = R_1046; Constant BR_426 = R_1047; Constant BR_427 = R_1048; Constant BR_428 = R_1049; Constant BR_429 = R_1050; Constant BR_430 = R_1051; Constant BR_431 = R_1052; Constant BR_432 = R_1053; Constant BR_433 = R_1054; Constant BR_434 = R_1055; Constant BR_435 = R_1056; Constant BR_436 = R_1057; Constant BR_437 = R_1058; Constant BR_438 = R_1059; Constant BR_439 = R_1060; Constant BR_440 = R_1061; Constant BR_441 = R_1062; Constant BR_442 = R_1063; Constant BR_443 = R_1065; Constant BR_444 = R_1066; Constant BR_445 = R_1067; Constant BR_446 = R_1068; Constant BR_447 = R_1069; Constant BR_448 = R_1070; Constant BR_449 = R_1071; Constant BR_450 = R_1072; Constant BR_451 = R_1073; Constant BR_452 = R_1076; Constant BR_453 = R_1077; Constant BR_454 = R_1078; Constant BR_455 = R_1079; Constant BR_456 = R_1080; Constant BR_457 = R_1084; Constant BR_458 = R_1105; Constant BR_459 = R_1106; Constant BR_460 = R_1111; Constant BR_461 = R_1112; Constant BR_462 = R_1113; Constant BR_463 = R_1114; Constant BR_464 = R_1123; Constant BR_465 = R_1124; Constant BR_466 = R_1125; Constant BR_467 = R_1128; Constant BR_468 = R_1129; Constant BR_469 = R_1131; Constant BR_470 = R_1132; Constant BR_471 = R_1133; Constant BR_472 = R_1137; Constant BR_473 = R_1138; Constant BR_474 = R_1140; Constant BR_475 = R_1142; Constant BR_476 = R_1143; Constant BR_477 = R_1144; Constant BR_478 = R_1145; Constant BR_479 = R_1146; Constant BR_480 = R_1147; Constant BR_481 = R_1148; Constant BR_482 = R_1151; Constant BR_483 = R_1152; Constant BR_484 = R_1153; Constant BR_485 = R_1156; Constant BR_486 = R_1157; Constant BR_487 = R_1158; Constant BR_488 = R_1167; Constant BR_489 = R_1168; Constant BR_490 = R_1170; Constant BR_491 = R_1171; Constant BR_492 = R_1172; Constant BR_493 = R_1173; Constant BR_494 = R_1174; Constant BR_495 = R_1175; Constant BR_496 = R_1176; Constant BR_497 = R_1178; Constant BR_498 = R_1180; Constant BR_499 = R_1181; Constant BR_500 = R_1182; Constant BR_501 = R_1183; Constant BR_502 = R_1184; Constant BR_503 = R_1187; Constant BR_504 = R_1188; Constant BR_505 = R_1189; Constant BR_506 = R_1190; Constant BR_507 = R_1191; Constant BR_508 = R_1192; Constant BR_509 = R_1193; Constant BR_510 = R_1194; Constant BR_511 = R_1195; Constant BR_512 = R_1196; Constant BR_513 = R_1197; Constant BR_514 = R_1198; Constant BR_515 = R_1199; Constant BR_516 = R_1202; Constant BR_517 = R_1203; Constant BR_518 = R_1204; Constant BR_519 = R_1206; Constant BR_520 = R_1216; Constant BR_521 = R_1218; Constant BR_522 = R_1219; Constant BR_523 = R_1220; Constant BR_524 = R_1222; Constant BR_525 = R_1223; Constant BR_526 = R_1226; Constant BR_527 = R_1227; Constant BR_528 = R_1235; Constant BR_529 = R_1236; Constant BR_530 = R_1237; Constant BR_531 = R_1238; Constant BR_532 = R_1242; Constant BR_533 = R_1244; Constant BR_534 = R_1245; Constant BR_535 = R_1246; Constant BR_536 = R_1247; Constant BR_537 = R_1248; Constant BR_538 = R_1250; Constant BR_539 = R_1253; Constant BR_540 = R_1254; Constant BR_541 = R_1255; Constant BR_542 = R_1256; Constant BR_543 = R_1257; Constant BR_544 = R_1259; Constant BR_545 = R_1261; Constant BR_546 = R_1262; Constant BR_547 = R_1264; Constant BR_548 = R_1265; Constant BR_549 = R_1266; Constant BR_550 = R_1267; Constant BR_551 = R_1268; Constant BR_552 = R_1269; Constant BR_553 = R_1271; Constant BR_554 = R_1272; Constant BR_555 = R_1273; Constant BR_556 = R_1274; Constant BR_557 = R_1277; Constant BR_558 = R_1278; Constant BR_559 = R_1279; Constant BR_560 = R_1280; Constant BR_561 = R_1281; Constant BR_562 = R_1282; Constant BR_563 = R_1286; Constant BR_564 = R_1287; Constant BR_565 = R_1288; Constant BR_566 = R_1289; Constant BR_567 = R_1290; Constant BR_568 = R_1291; Constant BR_569 = R_1292; Constant BR_570 = R_1293; Constant BR_571 = R_1294; Constant BR_572 = R_1295; Constant BR_573 = R_1298; Constant BR_574 = R_1299; Constant BR_575 = R_1300; Constant BR_576 = R_1301; Constant BR_577 = R_1302; Constant BR_578 = R_1303; Constant BR_579 = R_1304; Constant BR_580 = R_1305; Constant BR_581 = R_1306; Constant BR_582 = R_1307; Constant BR_583 = R_1317; Constant BR_584 = R_1318; Constant BR_585 = R_1319; Constant BR_586 = R_1326; Constant BR_587 = R_1327; Constant BR_588 = R_1329; Constant BR_589 = R_1330; Constant BR_590 = R_1331; Constant BR_591 = R_1332; Constant BR_592 = R_1333; Constant BR_593 = R_1334; Constant BR_594 = R_1335; Constant BR_595 = R_1336; Constant BR_596 = R_1340; Constant BR_597 = R_1341; Constant BR_598 = R_1342; Constant BR_599 = R_1343; Constant BR_600 = R_1344; Constant BR_601 = R_1346; Constant BR_602 = R_1347; Constant BR_603 = R_1348; Constant BR_604 = R_1349; Constant BR_605 = R_1350; Constant BR_606 = R_1368; Constant BR_607 = R_1375; Constant BR_608 = R_1380; Constant BR_609 = R_1381; Constant BR_610 = R_1385; Constant BR_611 = R_1388; Constant BR_612 = R_1391; Constant BR_613 = R_1392; Constant BR_614 = R_1393; Constant BR_615 = R_1400; Constant BR_616 = R_1401; Constant BR_617 = R_1402; Constant BR_618 = R_1403; Constant BR_619 = R_1406; Constant BR_620 = R_1407; Constant BR_621 = R_1409; Constant BR_622 = R_1410; Constant BR_623 = R_1414; Constant BR_624 = R_1415; Constant BR_625 = R_1416; Constant BR_626 = R_1417; Constant BR_627 = R_1418; Constant BR_628 = R_1419; Constant BR_629 = R_1420; Constant BR_630 = R_1421; Constant BR_631 = R_1422; Constant BR_632 = R_1428; Constant BR_633 = R_1429; Constant BR_634 = R_1430; Constant BR_635 = R_1431; Constant BR_636 = R_1432; Constant BR_637 = R_1433; Constant BR_638 = R_1434; Constant BR_639 = R_1461; Constant BR_640 = R_1465; Constant BR_641 = R_1466; Constant BR_642 = R_1470; Constant BR_643 = R_1471; Constant BR_644 = R_1472; Constant BR_645 = R_1473; Constant BR_646 = R_1474; Constant BR_647 = R_1477; Constant BR_648 = R_1484; Constant BR_649 = R_1486; Constant BR_650 = R_1487; Constant BR_651 = R_1488; Constant BR_652 = R_1489; Constant BR_653 = R_1490; Constant BR_654 = R_1491; Constant BR_655 = R_1492; Constant BR_656 = R_1493; Constant BR_657 = R_1494; Constant BR_658 = R_1495; Constant BR_659 = R_1496; Constant BR_660 = R_1497; Constant BR_661 = R_1498; Constant BR_662 = R_1499; Constant BR_663 = R_1500; Constant BR_664 = R_1504; Constant BR_665 = R_1506; Constant BR_666 = R_1507; Constant BR_667 = R_1509; Constant BR_668 = R_1510; Constant BR_669 = R_1511; Constant BR_670 = R_1512; Constant BR_671 = R_1513; Constant BR_672 = R_1514; Constant BR_673 = R_1516; Constant BR_674 = R_1517; Constant BR_675 = R_1519; Constant BR_676 = R_1520; Constant BR_677 = R_1521; Constant BR_678 = R_1522; Constant BR_679 = R_1526; Constant BR_680 = R_1531; Constant BR_681 = R_1532; Constant BR_682 = R_1533; Constant BR_683 = R_1534; Constant BR_684 = R_1535; Constant BR_685 = R_1536; Constant BR_686 = R_1541; Constant BR_687 = R_1542; Constant BR_688 = R_1544; Constant BR_689 = R_1547; Constant BR_690 = R_1549; Constant BR_691 = R_1550; Constant BR_692 = R_1551; Constant BR_693 = R_1555; Constant BR_694 = R_1557; Constant BR_695 = R_1560; Constant BR_696 = R_1561; Constant BR_697 = R_1562; Constant BR_698 = R_1569; Constant BR_699 = R_1570; Constant BR_700 = R_1572; Constant BR_701 = R_1573; Constant BR_702 = R_1576; Constant BR_703 = R_1577; Constant BR_704 = R_1578; Constant BR_705 = R_1579; Constant BR_706 = R_1580; Constant BR_707 = R_1584; Constant BR_708 = R_1586; Constant BR_709 = R_1588; Constant BR_710 = R_1589; Constant BR_711 = R_1599; Constant BR_712 = R_1603; Constant BR_713 = R_1607; Constant BR_714 = R_1608; Constant BR_715 = R_1609; Constant BR_716 = R_1616; Constant BR_717 = R_1619; Constant BR_718 = R_1627; Constant BR_719 = R_1633; Constant BR_720 = R_1634; Constant BR_721 = R_1654; Constant BR_722 = R_1655; Constant BR_723 = R_1656; Constant BR_724 = R_1657; Constant BR_725 = R_1661; Constant BR_726 = R_1663; Constant BR_727 = R_1664; Constant BR_728 = R_1668; Constant BR_729 = R_1669; Constant BR_730 = R_1670; Constant BR_731 = R_1674; Constant BR_732 = R_1675; Constant BR_733 = R_1677; Constant BR_734 = R_1678; Constant BR_735 = R_1679; Constant BR_736 = R_1680; Constant BR_737 = R_1681; Constant BR_738 = R_1682; Constant BR_739 = R_1684; Constant BR_740 = R_1685; Constant BR_741 = R_1686; Constant BR_742 = R_1687; Constant BR_743 = R_1695; Constant BR_744 = R_1702; Constant BR_745 = R_1703; Constant BR_746 = R_1704; Constant BR_747 = R_1712; Constant BR_748 = R_1713; Constant BR_749 = R_1714; Constant BR_750 = R_1715; Constant BR_751 = R_1716; Constant BR_752 = R_1717; Constant BR_753 = R_1718; Constant BR_754 = R_1726; Constant BR_755 = R_1730; Constant BR_756 = R_1733; Constant BR_757 = R_1734; Constant BR_758 = R_1736; Constant BR_759 = R_1738; Constant BR_760 = R_1739; Constant BR_761 = R_1744; Constant BR_762 = R_1745; Constant BR_763 = R_1746; Constant BR_764 = R_1747; Constant BR_765 = R_1751; Constant BR_766 = R_1754; Constant BR_767 = R_1756; Constant BR_768 = R_1757; Constant BR_769 = R_1759; Constant BR_770 = R_1760; Constant BR_771 = R_1762; Constant BR_772 = R_1763; Constant BR_773 = R_1772; Constant BR_774 = R_1774; Constant BR_775 = R_1775; Constant BR_776 = R_1776; Constant BR_777 = R_1777; Constant BR_778 = R_1778; Constant BR_779 = R_1793; Constant BR_780 = R_1796; Constant BR_781 = R_1797; Constant BR_782 = R_1798; Constant BR_783 = R_1799; Constant BR_784 = R_1800; Constant BR_785 = R_1801; Constant BR_786 = R_1802; Constant BR_787 = R_1803; Constant BR_788 = R_1811; Constant BR_789 = R_1812; Constant BR_790 = R_1814; Constant BR_791 = R_1815; Constant BR_792 = R_1816; Constant BR_793 = R_1817; Constant BR_794 = R_1826; Constant BR_795 = R_1827; Constant BR_796 = R_1830; Constant BR_797 = R_1831; Constant BR_798 = R_1832; Constant BR_799 = R_1833; Constant BR_800 = R_1834; Constant BR_801 = R_1835; Constant BR_802 = R_1839; Constant BR_803 = R_1840; Constant BR_804 = R_1841; Constant BR_805 = R_1843; Constant BR_806 = R_1851; Constant BR_807 = R_1852; Constant BR_808 = R_1853; Constant BR_809 = R_1854; Constant BR_810 = R_1855; Constant BR_811 = R_1856; Constant BR_812 = R_1877; Constant BR_813 = R_1878; Constant BR_814 = R_1879; Constant BR_815 = R_1880; Constant BR_816 = R_1881; Constant BR_817 = R_1882; Constant BR_818 = R_1884; Constant BR_819 = R_1885; Constant BR_820 = R_1886; Constant BR_821 = R_1887; Constant BR_822 = R_1888; Constant BR_823 = R_1890; Constant BR_824 = R_1891; Constant BR_825 = R_1892; Constant BR_826 = R_1893; Constant BR_827 = R_1894; Constant BR_828 = R_1895; Constant BR_829 = R_1896; Constant BR_830 = R_1897; Constant BR_831 = R_1898; Constant BR_832 = R_1899; Constant BR_833 = R_1900; Constant BR_834 = R_1901; Constant BR_835 = R_1902; Constant BR_836 = R_1903; Constant BR_837 = R_1904; Constant BR_838 = R_1905; Constant BR_839 = R_1906; Constant BR_840 = R_1909; Constant BR_841 = R_1911; Constant BR_842 = R_1912; Constant BR_843 = R_1913; Constant BR_844 = R_1914; Constant BR_845 = R_1919; Constant BR_846 = R_1925; Constant BR_847 = R_1926; Constant BR_848 = R_1943; Constant BR_849 = R_1947; Constant BR_850 = R_1948; Constant BR_851 = R_1951; Constant BR_852 = R_1952; Constant BR_853 = R_1953; Constant BR_854 = R_1955; Constant BR_855 = R_1958; Constant BR_856 = R_1960; Constant BR_857 = R_1964; Constant BR_858 = R_1965; Constant BR_859 = R_1966; Constant BR_860 = R_1967; Constant BR_861 = R_1975; Constant BR_862 = R_1980; Constant BR_863 = R_1981; Constant BR_864 = R_1984; Constant BR_865 = R_1987; Constant BR_866 = R_1990; Constant BR_867 = R_1992; Constant BR_868 = R_1994; Constant BR_869 = R_1995; Constant BR_870 = R_1996; Constant BR_871 = R_1997; Constant BR_872 = R_1998; Constant BR_873 = R_1999; Constant BR_874 = R_2000; Constant BR_875 = R_2001; Constant BR_876 = R_2010; Constant BR_877 = R_2011; Constant BR_878 = R_2012; Constant BR_879 = R_2013; Constant BR_880 = R_2014; Constant BR_881 = R_2015; Constant BR_882 = R_2021; Constant BR_883 = R_2027; Constant BR_884 = R_2029; Constant BR_885 = R_2030; Constant BR_886 = R_2031; Constant BR_887 = R_2032; Constant BR_888 = R_2033; Constant BR_889 = R_2035; Constant BR_890 = R_2036; Constant BR_891 = R_2041; Constant BR_892 = R_2042; Constant BR_893 = R_2045; Constant BR_894 = R_2048; Constant BR_895 = R_2049; Constant BR_896 = R_2058; Constant BR_897 = R_2060; Constant BR_898 = R_2063; Constant BR_899 = R_2064; Constant BR_900 = R_2069; Constant BR_901 = R_2077; Constant BR_902 = R_2078; Constant BR_903 = R_2079; Constant BR_904 = R_2080; Constant BR_905 = R_2081; Constant BR_906 = R_2082; Constant BR_907 = R_2083; Constant BR_908 = R_2084; Constant BR_909 = R_2085; Constant BR_910 = R_2086; Constant BR_911 = R_2088; Constant BR_912 = R_2089; Constant BR_913 = R_2096; Constant BR_914 = R_2097; Constant BR_915 = R_2099; Constant BR_916 = R_2100; Constant BR_917 = R_2103; Constant BR_918 = R_2104; Constant BR_919 = R_2122; Constant BR_920 = R_2137; Constant BR_921 = R_2143; Constant BR_922 = R_2145; Constant BR_923 = R_2146; Constant BR_924 = R_2147; Constant BR_925 = R_2149; Constant BR_926 = R_2152; Constant BR_927 = R_2154; Constant BR_928 = R_2162; Constant BR_929 = R_2163; Constant BR_930 = R_2164; Constant BR_931 = R_2165; Constant BR_932 = R_2166; Constant BR_933 = R_2167; Constant BR_934 = R_2168; Constant BR_935 = R_2171; Constant BR_936 = R_2172; Constant BR_2153 = R_8; Constant BR_2159 = R_9; Constant BR_2160 = R_10; Constant BR_2161 = R_11; Constant BR_2162 = R_12; Constant BR_2170 = R_16; Constant BR_2171 = R_17; Constant BR_2173 = R_18; Constant BR_2176 = R_21; Constant BR_2177 = R_19; Constant BR_2178 = R_20; Constant BR_2182 = R_22; Constant BR_2186 = R_23; Constant BR_2192 = R_35; Constant BR_2194 = R_59; Constant BR_2195 = R_60; Constant BR_2197 = R_61; Constant BR_2202 = R_69; Constant BR_2203 = R_68; Constant BR_2205 = R_70; Constant BR_2206 = R_91; Constant BR_2207 = R_148; Constant BR_2228 = R_770; Constant BR_2229 = R_837; Constant BR_2230 = R_838; Constant BR_2233 = R_945; Constant BR_2234 = R_1140; Constant BR_2235 = R_1513; Constant BR_2236 = R_1578; Constant BR_2237 = R_1579; Constant BR_2238 = R_1580; Constant BR_2239 = R_1776; Constant BR_2240 = R_1827; Constant BR_2241 = R_983; [ DetectSceneChange chs sc ch ! Used for scene searches ; if (scene_status-->0 == 1) { if ((( (deadflag~=0) ))) { ch = true; if (debug_scenes) print "[Scene 'Entire Game' ends]^"; if (GProperty(39, 1, p104_recurring)) scene_status-->0 = 0; else scene_status-->0 = 2; ProcessRulebook(WHEN_SCENE_ENDS_RB, 1); ProcessRulebook(28); scene_ended-->0 = the_time; scene_endings-->0 = (scene_endings-->0)|2; scene_latest_ending-->0 = 1; jump CScene; } } if (scene_status-->0 == 0) { if ((( (deadflag==0) ))) { ch = true; if (debug_scenes) print "[Scene 'Entire Game' begins]^"; scene_status-->0 = 1; ProcessRulebook(WHEN_SCENE_BEGINS_RB, 1); ProcessRulebook(27); scene_started-->0 = the_time; scene_endings-->0 = (scene_endings-->0)|1; scene_latest_ending-->0 = 0; jump CScene; } } .CScene; if (chs>20) ">--> The scene change machinery is stuck."; if (ch>0) DetectSceneChange(++chs); rfalse; ]; #IFDEF DEBUG; [ ShowSceneStatus chs sc ch; if (scene_status-->0 == 1) { print "Scene 'Entire Game' playing (for ", the_time-(scene_started-->0), " mins now)^"; } else { if (scene_latest_ending-->0 > 0) { print "Scene 'Entire Game' ended"; print "^"; } } ]; #ENDIF; Constant AD_ACTION = 0; ! The I6 action number (0 to 4095) Constant AD_REQUIREMENTS = 1; ! Such as requiring light; a bitmap, see below Constant AD_NOUN_KOV = 2; ! Kind of value of the first noun Constant AD_SECOND_KOV = 3; ! Kind of value of the second noun Constant AD_VARIABLES_CREATOR = 4; ! Routine to initialise variables owned Constant AD_VARIABLES_ID = 5; ! Frame ID for variables owned by action Constant AD_RECORD_SIZE = 6; [ FindAction fa t; if (fa == -1) fa = action; t = 1; while (t <= ActionData-->0) { if (fa == ActionData-->t) return t; t = t + AD_RECORD_SIZE; } rfalse; ]; [ ActionNumberIndexed i; if ((i>=0) && (i < AD_RECORDS)) return ActionData-->(i*AD_RECORD_SIZE + AD_ACTION + 1); return 0; ]; Constant TOUCH_NOUN_ABIT = $$00000001; Constant TOUCH_SECOND_ABIT = $$00000010; Constant LIGHT_ABIT = $$00000100; Constant NEED_NOUN_ABIT = $$00001000; Constant NEED_SECOND_ABIT = $$00010000; Constant OUT_OF_WORLD_ABIT = $$00100000; Constant CARRY_NOUN_ABIT = $$01000000; Constant CARRY_SECOND_ABIT = $$10000000; [ NeedToCarryNoun; return TestActionMask(CARRY_NOUN_ABIT); ]; [ NeedToCarrySecondNoun; return TestActionMask(CARRY_SECOND_ABIT); ]; [ NeedToTouchNoun; return TestActionMask(TOUCH_NOUN_ABIT); ]; [ NeedToTouchSecondNoun; return TestActionMask(TOUCH_SECOND_ABIT); ]; [ NeedLightForAction; return TestActionMask(LIGHT_ABIT); ]; [ TestActionMask match mask at; at = FindAction(-1); if (at == 0) rfalse; mask = ActionData-->(at+AD_REQUIREMENTS); if (mask & match) rtrue; rfalse; ]; [ TryAction req by ac n s stora smeta tbits saved_command text_of_command; if (stora) return STORED_ACTION_TY_New(ac, n, s, by, req, stora); tbits = req & (16+32); req = req & 1; @push actor; @push act_requester; @push inp1; @push inp2; @push parsed_number; smeta = meta; actor = by; if (req) act_requester = player; else act_requester = 0; by = FindAction(ac); if (by) { if (ActionData-->(by+AD_NOUN_KOV) == OBJECT_TY) inp1 = n; else { inp1 = 1; parsed_number = n; } if (ActionData-->(by+AD_SECOND_KOV) == OBJECT_TY) inp2 = s; else { inp2 = 1; parsed_number = s; } if (((ActionData-->(by+AD_NOUN_KOV) == UNDERSTANDING_TY) || (ActionData-->(by+AD_SECOND_KOV) == UNDERSTANDING_TY)) && (tbits)) { saved_command = INDEXED_TEXT_TY_Create(); INDEXED_TEXT_TY_Cast(players_command, SNIPPET_TY, saved_command); text_of_command = INDEXED_TEXT_TY_Create(); INDEXED_TEXT_TY_Cast(parsed_number, TEXT_TY, text_of_command); SetPlayersCommand(text_of_command); if (tbits == 16) { n = players_command; inp1 = 1; parsed_number = players_command; } else { s = players_command; inp2 = 1; parsed_number = players_command; } BlkFree(text_of_command); @push consult_from; @push consult_words; consult_from = 1; consult_words = parsed_number - 100; } } BeginAction(ac, n, s, 0, true); if (saved_command) { @pull consult_words; @pull consult_from; SetPlayersCommand(saved_command); BlkFree(saved_command); } meta = smeta; @pull parsed_number; @pull inp2; @pull inp1; @pull act_requester; @pull actor; TrackActions(true, smeta); ]; [ R_Process a i j; @push inp1; @push inp2; inp1 = i; inp2 = j; BeginAction(a, i, j); @pull inp2; @pull inp1; ]; Global converted_action_outcome = -1; [ GVS_Convert ac n s; converted_action_outcome = BeginAction(ac, n, s); rtrue; ]; [ ConvertToGoingWithPush i oldrm newrm infl; i=noun; if (IndirectlyContains(noun, actor) == false) { move i to actor; infl = true; } move_pushing = i; oldrm = LocationOf(noun); BeginAction(##Go, second); newrm = LocationOf(actor); move_pushing = nothing; move i to newrm; if (newrm ~= oldrm) { if (IndirectlyContains(i, player)) TryAction(0, player, ##Look, 0, 0); RulebookSucceeds(); } else RulebookFails(); ]; [ ImplicitTake obj ks; if (actor == player) L__M(##Miscellany, 69, obj); else L__M(##Miscellany, 68, obj); ClearParagraphing(); @push keep_silent; keep_silent = true; if (act_requester) TryAction(true, actor, ##Take, obj, nothing); else TryAction(false, actor, ##Take, obj, nothing); @pull keep_silent; if (obj in actor) rtrue; rfalse; ]; [ LookAfterGoing; GoingLookBreak(); AbbreviatedRoomDescription(); ]; [ AbbreviatedRoomDescription prior_action pos frame_id; prior_action = action; action = ##Look; pos = FindAction(##Look); if ((pos) && (ActionData-->(pos+AD_VARIABLES_CREATOR))) { frame_id = ActionData-->(pos+AD_VARIABLES_ID); Mstack_Create_Frame(ActionData-->(pos+AD_VARIABLES_CREATOR), frame_id); ProcessRulebook(SETTING_ACTION_VARIABLES_RB); (MStack-->MstVO(frame_id, 0)) = prior_action; ! "room-describing action" (MStack-->MstVO(frame_id, 1)) = true; ! "abbreviated form allowed" } LookSub(); ! The I6 verb routine for "looking" if (frame_id) Mstack_Destroy_Frame(ActionData-->(pos+AD_VARIABLES_CREATOR), frame_id); action = prior_action; ]; [ BeginAction a n s moi notrack rv; ChronologyPoint(); @push action; @push noun; @push second; @push self; @push multiple_object_item; action = a; noun = n; second = s; self = noun; multiple_object_item = moi; if (action < 4096) rv = ActionPrimitive(); @pull multiple_object_item; @pull self; @pull second; @pull noun; @pull action; if (notrack == false) TrackActions(true, meta); return rv; ]; [ ActionPrimitive rv p1 p2 p3 p4 p5 frame_id; MStack_CreateRBVars(ACTION_PROCESSING_RB); if ((keep_silent == false) && (multiflag == false)) DivideParagraphPoint(); reason_the_action_failed = 0; frame_id = -1; p1 = FindAction(action); if ((p1) && (ActionData-->(p1+AD_VARIABLES_CREATOR))) { frame_id = ActionData-->(p1+AD_VARIABLES_ID); Mstack_Create_Frame(ActionData-->(p1+AD_VARIABLES_CREATOR), frame_id); } if (ActionVariablesNotTypeSafe()) { if (frame_id ~= -1) Mstack_Destroy_Frame(ActionData-->(p1+AD_VARIABLES_CREATOR), frame_id); MStack_DestroyRBVars(ACTION_PROCESSING_RB); return; } ProcessRulebook(SETTING_ACTION_VARIABLES_RB); #IFDEF DEBUG; if ((trace_actions) && (FindAction(-1))) { print "["; p1=actor; p2=act_requester; p3=action; p4=noun; p5=second; DB_Action(p1,p2,p3,p4,p5); print "]^"; ClearParagraphing(); } ++debug_rule_nesting; #ENDIF; TrackActions(false, meta); BeginFollowRulebook(); if ((meta) && (actor ~= player)) { L__M(##Miscellany, 74, actor); rv = RS_FAILS; } else if (meta) { DESCEND_TO_SPECIFIC_ACTION_R(); rv = RulebookOutcome(); } else { ProcessRulebook(ACTION_PROCESSING_RB); rv = RulebookOutcome(); } #IFDEF DEBUG; --debug_rule_nesting; if ((trace_actions) && (FindAction(-1))) { print "["; DB_Action(p1,p2,p3,p4,p5); print " - "; switch (rv) { RS_SUCCEEDS: print "succeeded"; RS_FAILS: print "failed"; #IFNDEF MEMORY_ECONOMY; if (reason_the_action_failed) print " the ", (RulePrintingRule) reason_the_action_failed; #ENDIF; default: print "ended without result"; } print "]^"; say__p = 1; SetRulebookOutcome(rv); ! In case disturbed by printing activities } #ENDIF; if (rv == RS_SUCCEEDS) UpdateActionBitmap(); EndFollowRulebook(); if (frame_id ~= -1) { p1 = FindAction(action); Mstack_Destroy_Frame(ActionData-->(p1+AD_VARIABLES_CREATOR), frame_id); } MStack_DestroyRBVars(ACTION_PROCESSING_RB); if ((keep_silent == false) && (multiflag == false)) DivideParagraphPoint(); if (rv == RS_SUCCEEDS) rtrue; rfalse; ]; [ ActionVariablesNotTypeSafe mask noun_kova second_kova at; at = FindAction(-1); if (at == 0) rfalse; ! For any I6-defined actions noun_kova = ActionData-->(at+AD_NOUN_KOV); second_kova = ActionData-->(at+AD_SECOND_KOV); !print "at = ", at, " nst = ", noun_kova, "^"; !print "consult_from = ", consult_from, " consult_words = ", consult_from, "^"; !print "inp1 = ", inp1, " noun = ", noun, "^"; !print "inp2 = ", inp2, " second = ", second, "^"; !print "sst = ", second_kova, "^"; if (noun_kova == SNIPPET_TY or UNDERSTANDING_TY) { if (inp1 ~= 1) { inp2 = inp1; second = noun; } parsed_number = 100*consult_from + consult_words; inp1 = 1; noun = nothing; ! noun = parsed_number; } if (second_kova == SNIPPET_TY or UNDERSTANDING_TY) { parsed_number = 100*consult_from + consult_words; inp2 = 1; second = nothing; ! second = parsed_number; } mask = ActionData-->(at+AD_REQUIREMENTS); if (mask & OUT_OF_WORLD_ABIT) { meta = 1; rfalse; } if (inp1 == 1) { if (noun_kova == OBJECT_TY) { return L__M(##Miscellany, 61); } } else { if (noun_kova ~= OBJECT_TY) { return L__M(##Miscellany, 62); } if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { @push act_requester; act_requester = nothing; CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); @pull act_requester; if (noun == nothing) { if (say__p) rtrue; return L__M(##Miscellany, 59); } } if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { return L__M(##Miscellany, 60); } } if (inp2 == 1) { if (second_kova == OBJECT_TY) { return L__M(##Miscellany, 63); } } else { if (second_kova ~= OBJECT_TY) { return L__M(##Miscellany, 64); } if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { @push act_requester; act_requester = nothing; CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); @pull act_requester; if (second == nothing) { if (say__p) rtrue; return L__M(##Miscellany, 65); } } if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { return L__M(##Miscellany, 66); } } rfalse; ]; [ BASIC_VISIBILITY_R; if (act_requester) rfalse; if ((NeedLightForAction()) && (actor == player) && (ProcessRulebook(VISIBLE_RB)) && (RulebookSucceeded())) { BeginActivity(REFUSAL_TO_ACT_IN_DARK_ACT); if (ForActivity(REFUSAL_TO_ACT_IN_DARK_ACT)==false) L__M(##Miscellany, 17); EndActivity(REFUSAL_TO_ACT_IN_DARK_ACT); reason_the_action_failed = BASIC_VISIBILITY_R; RulebookFails(); rtrue; } rfalse; ]; [ BASIC_ACCESSIBILITY_R mask at; if (act_requester) rfalse; at = FindAction(-1); if (at == 0) rfalse; mask = ActionData-->(at+AD_REQUIREMENTS); if ((mask & TOUCH_NOUN_ABIT) && noun && (inp1 ~= 1)) { if (noun ofclass K3_direction) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; if (actor~=player) rtrue; return L__M(##Miscellany, 67); } if (ObjectIsUntouchable(noun, (actor~=player), FALSE, actor)) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; rtrue; } } if ((mask & TOUCH_SECOND_ABIT) && second && (inp2 ~= 1)) { if (second ofclass K3_direction) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; if (actor~=player) rtrue; return L__M(##Miscellany, 67); } if (ObjectIsUntouchable(second, (actor~=player), FALSE, actor)) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; rtrue; } } rfalse; ]; [ CARRYING_REQUIREMENTS_R mask at; at = FindAction(-1); if (at == 0) rfalse; mask = ActionData-->(at+AD_REQUIREMENTS); if ((mask & TOUCH_NOUN_ABIT) && noun && (inp1 ~= 1)) { if ((mask & CARRY_NOUN_ABIT) && (noun notin actor)) { BeginActivity(IMPLICITLY_TAKING_ACT, noun); if (ForActivity(IMPLICITLY_TAKING_ACT, noun)==false) ImplicitTake(noun); EndActivity(IMPLICITLY_TAKING_ACT, noun); !if (act_requester) rfalse; if (noun notin actor) { RulebookFails(); reason_the_action_failed = CARRYING_REQUIREMENTS_R; rtrue; } } } if ((mask & TOUCH_SECOND_ABIT) && second && (inp2 ~= 1)) { if ((mask & CARRY_SECOND_ABIT) && (second notin actor)) { BeginActivity(IMPLICITLY_TAKING_ACT, second); if (ForActivity(IMPLICITLY_TAKING_ACT, second)==false) ImplicitTake(second); EndActivity(IMPLICITLY_TAKING_ACT, second); !if (act_requester) rfalse; if (second notin actor) { RulebookFails(); reason_the_action_failed = CARRYING_REQUIREMENTS_R; rtrue; } } } rfalse; ]; [ REQUESTED_ACTIONS_REQUIRE_R rv; if ((actor ~= player) && (act_requester)) { @push say__p; say__p = 0; rv = ProcessRulebook(PERSUADE_RB); if (RulebookSucceeded() == false) { if ((deadflag == false) && (say__p == FALSE)) L__M(##Miscellany, 72, actor); ActRulebookFails(rv); rtrue; } @pull say__p; } rfalse; ]; [ CARRY_OUT_REQUESTED_ACTIONS_R rv; if ((actor ~= player) && (act_requester)) { @push act_requester; act_requester = nothing; rv = BeginAction(action, noun, second); if (((meta) || (rv == false)) && (deadflag == false)) { if (ProcessRulebook(UNSUCCESSFUL_ATTEMPT_RB) == false) L__M(##Miscellany, 58); } @pull act_requester; ActRulebookSucceeds(); rtrue; } rfalse; ]; Array Details_of_Specific_Action-->5; [ GenericVerbSub ch co re vis rv; @push converted_action_outcome; converted_action_outcome = -1; Details_of_Specific_Action-->0 = true; if (meta) Details_of_Specific_Action-->0 = false; Details_of_Specific_Action-->1 = keep_silent; Details_of_Specific_Action-->2 = ch; ! Check rules for the action Details_of_Specific_Action-->3 = co; ! Carry out rules for the action Details_of_Specific_Action-->4 = re; ! Report rules for the action ProcessRulebook(SPECIFIC_ACTION_PROCESSING_RB, 0, true); if ((RulebookFailed()) && (converted_action_outcome == 1)) ActRulebookSucceeds(); @pull converted_action_outcome; rtrue; ]; [ WORK_OUT_DETAILS_OF_SPECIFIC_R; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 0) = Details_of_Specific_Action-->0; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 1) = Details_of_Specific_Action-->1; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 2) = Details_of_Specific_Action-->2; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 3) = Details_of_Specific_Action-->3; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 4) = Details_of_Specific_Action-->4; rfalse; ]; [ TestActionBitmap obj act i j k bitmap; if (obj == nothing) bitmap = ActionHappened; else { if (~~(obj provides action_bitmap)) rfalse; bitmap = obj.&action_bitmap; } if (act == -1) return (((bitmap->0) & 1) ~= 0); for (i=0, k=2; ii) { return (((bitmap->j) & k) ~= 0); } k = k*2; if (k == 256) { k = 1; j++; } } rfalse; ]; [ UpdateActionBitmap; SetActionBitmap(noun, action); if (action == ##Go) SetActionBitmap(location, ##Enter); ]; [ SetActionBitmap obj act i j k bitmap; for (i=0, k=2; ii) { if (obj provides action_bitmap) { bitmap = obj.&action_bitmap; bitmap->0 = (bitmap->0) | 1; bitmap->j = (bitmap->j) | k; } ActionHappened->0 = (ActionHappened->0) | 1; ActionHappened->j = (ActionHappened->j) | k; } k = k*2; if (k == 256) { k = 1; j++; } } ]; [ SayActionName act; DB_Action(0, 0, act, 0, 0, 2); ]; [ DA_Name n; if (n ofclass K3_direction) print (name) n; else print (the) n; ]; [ DA_Topic x a b c d i cf cw; cw = x%100; cf = x/100; print "~"; for (a=cf:di; } if (d 0)) print "(", debug_rule_nesting, ") "; if ((ac ~= player) && (for_say ~= 2)) { if (acr) print "asking ", (the) ac, " to try "; else print (the) ac, " "; } DB_Action_Details(act, n, s, for_say); if ((keep_silent) && (for_say == 0)) print " - silently"; ]; Constant MAX_NESTED_ACTIVITIES = 20; Global activities_sp = 0; Array activities_stack --> MAX_NESTED_ACTIVITIES; Array activity_parameters_stack --> MAX_NESTED_ACTIVITIES; Global inhibit_flag = 0; Global saved_debug_rules = 0; [ FixInhibitFlag n act inhibit_rule_debugging; for (n=0:nn; if (act == PRINTING_THE_NAME_ACT or PRINTING_THE_PLURAL_NAME_ACT or PRINTING_ROOM_DESC_DETAILS_ACT or LISTING_CONTENTS_ACT or GROUPING_TOGETHER_ACT) inhibit_rule_debugging = true; } if ((inhibit_flag == false) && (inhibit_rule_debugging)) { saved_debug_rules = debug_rules; debug_rules = 0; } if ((inhibit_flag) && (inhibit_rule_debugging == false)) { debug_rules = saved_debug_rules; } inhibit_flag = inhibit_rule_debugging; ]; [ TestActivity A desc val i; for (i=0:ii == A) { if (desc) { if ((desc)(activity_parameters_stack-->i)) rtrue; } else if (val) { if (val == activity_parameters_stack-->i) rtrue; } else rtrue; } rfalse; ]; [ ActivityEmpty A x; x = Activity_before_rulebooks-->A; if (((rulebooks_array-->x)-->0) ~= NULL) rfalse; x = Activity_for_rulebooks-->A; if (((rulebooks_array-->x)-->0) ~= NULL) rfalse; x = Activity_after_rulebooks-->A; if (((rulebooks_array-->x)-->0) ~= NULL) rfalse; rtrue; ]; [ RulebookEmpty rb; if (((rulebooks_array-->rb)-->0) ~= NULL) rfalse; rtrue; ]; [ ProcessActivityRulebook rulebook parameter rv; @push self; if (parameter) self = parameter; rv = ProcessRulebook(rulebook, parameter, true); @pull self; if (rv) rtrue; rfalse; ]; [ CarryOutActivity A o rv; BeginActivity(A, o); rv = ForActivity(A, o); EndActivity(A, o); return rv; ]; [ BeginActivity A o x; if (activities_sp == MAX_NESTED_ACTIVITIES) return RunTimeProblem(RTP_TOOMANYACTS); activity_parameters_stack-->activities_sp = o; activities_stack-->(activities_sp++) = A; FixInhibitFlag(); MStack_CreateAVVars(A); if (Activity_atb_rulebooks->A) { x = action; action = action_to_be; } o = ProcessActivityRulebook(Activity_before_rulebooks-->A, o); if (Activity_atb_rulebooks->A) action = x; return o; ]; [ ForActivity A o x; if (Activity_atb_rulebooks->A) { x = action; action = action_to_be; } o = ProcessActivityRulebook(Activity_for_rulebooks-->A, o); if (Activity_atb_rulebooks->A) action = x; return o; ]; [ EndActivity A o rv x; if ((activities_sp > 0) && (activities_stack-->(activities_sp-1) == A)) { if (Activity_atb_rulebooks->A) { x = action; action = action_to_be; } rv = ProcessActivityRulebook(Activity_after_rulebooks-->A, o); if (Activity_atb_rulebooks->A) action = x; activities_sp--; FixInhibitFlag(); MStack_DestroyAVVars(A); return rv; } return RunTimeProblem(RTP_CANTABANDON); ]; [ AbandonActivity A o; if ((activities_sp > 0) && (activities_stack-->(activities_sp-1) == A)) { activities_sp--; FixInhibitFlag(); MStack_DestroyAVVars(A); return; } return RunTimeProblem(RTP_CANTEND); ]; Array ResourceUsageFlags -> (2+0+5); [ DisplayFigure resource_ID one_time; if ((one_time) && (ResourceUsageFlags->resource_ID)) return; ResourceUsageFlags->resource_ID = true; print "^"; VM_Picture(resource_ID); print "^"; ]; [ PlaySound resource_ID one_time; if (resource_ID == 0) return; ! The "silence" non-sound effect if ((one_time) && (ResourceUsageFlags->resource_ID)) return; ResourceUsageFlags->resource_ID = true; VM_SoundEffect(resource_ID); ]; #IFDEF PLUGIN_FILES; Constant AUXF_MAGIC = 0; ! First word holds a safety constant Constant AUXF_MAGIC_VALUE = 16339; ! Should be first word of any valid file structure Constant AUXF_STATUS = 1; ! One of the following: Constant AUXF_STATUS_IS_CLOSED = 1; ! Currently closed, or perhaps doesn't exist Constant AUXF_STATUS_IS_OPEN_FOR_READ = 2; Constant AUXF_STATUS_IS_OPEN_FOR_WRITE = 3; Constant AUXF_STATUS_IS_OPEN_FOR_APPEND = 4; Constant AUXF_BINARY = 2; ! False for text files (I7 default), true for binary Constant AUXF_STREAM = 3; ! Stream for an open file (meaningless otherwise) Constant AUXF_FILENAME = 4; ! Packed address of constant string Constant AUXF_IFID_OF_OWNER = 5; ! UUID_ARRAY if owned by this project, or ! string array of IFID of owner wrapped in //...//, or NULL to leave open Constant NO_EXTERNAL_FILES 3; Array TableOfExternalFiles --> 0 X0_file_of_save_data X1_file_of_victories X2_file_of_achievements 0; Array X0_file_of_save_data --> AUXF_MAGIC_VALUE AUXF_STATUS_IS_CLOSED true 0 "KerkerkruipSaves" UUID_ARRAY; Array X1_file_of_victories --> AUXF_MAGIC_VALUE AUXF_STATUS_IS_CLOSED false 0 "KerkerkruipData" UUID_ARRAY; Array X2_file_of_achievements --> AUXF_MAGIC_VALUE AUXF_STATUS_IS_CLOSED false 0 "KerkerkruipAchievements" UUID_ARRAY; [ FileIO_Error extf err_text struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) { print "^*** Error on unknown file: ", (string) err_text, " ***^"; } else { struc = TableOfExternalFiles-->extf; print "^*** Error on file '", (string) struc-->AUXF_FILENAME, "': ", (string) err_text, " ***^"; } RunTimeProblem(RTP_FILEIOERROR); return 0; ]; #IFDEF TARGET_GLULX; [ FileIO_Exists extf fref struc rv usage; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) rfalse; struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); rv = glk_fileref_does_file_exist(fref); glk_fileref_destroy(fref); return rv; ]; [ FileIO_Ready extf struc fref usage str ch; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) rfalse; struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (glk_fileref_does_file_exist(fref) == false) { glk_fileref_destroy(fref); rfalse; } str = glk_stream_open_file(fref, filemode_Read, 0); ch = glk_get_char_stream(str); glk_stream_close(str, 0); glk_fileref_destroy(fref); if (ch ~= '*') rfalse; rtrue; ]; [ FileIO_MarkReady extf readiness struc fref str ch usage; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to open a non-file"); struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (glk_fileref_does_file_exist(fref) == false) { glk_fileref_destroy(fref); return FileIO_Error(extf, "only existing files can be marked"); } if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_CLOSED) { glk_fileref_destroy(fref); return FileIO_Error(extf, "only closed files can be marked"); } str = glk_stream_open_file(fref, filemode_ReadWrite, 0); glk_stream_set_position(str, 0, 0); ! seek start if (readiness) ch = '*'; else ch = '-'; glk_put_char_stream(str, ch); ! mark as complete glk_stream_close(str, 0); glk_fileref_destroy(fref); ]; [ FileIO_Open extf write_flag append_flag struc fref str mode ix ch not_this_ifid owner force_header usage; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to open a non-file"); struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_CLOSED) return FileIO_Error(extf, "tried to open a file already open"); if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (write_flag) { if (append_flag) { mode = filemode_WriteAppend; if (glk_fileref_does_file_exist(fref) == false) force_header = true; } else mode = filemode_Write; } else { mode = filemode_Read; if (glk_fileref_does_file_exist(fref) == false) { glk_fileref_destroy(fref); return FileIO_Error(extf, "tried to open a file which does not exist"); } } str = glk_stream_open_file(fref, mode, 0); glk_fileref_destroy(fref); if (str == 0) return FileIO_Error(extf, "tried to open a file but failed"); struc-->AUXF_STREAM = str; if (write_flag) { if (append_flag) struc-->AUXF_STATUS = AUXF_STATUS_IS_OPEN_FOR_APPEND; else struc-->AUXF_STATUS = AUXF_STATUS_IS_OPEN_FOR_WRITE; glk_stream_set_current(str); if ((append_flag == FALSE) || (force_header)) { print "- "; for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix; print " ", (string) struc-->AUXF_FILENAME, "^"; } } else { struc-->AUXF_STATUS = AUXF_STATUS_IS_OPEN_FOR_READ; ch = FileIO_GetC(extf); if (ch ~= '-' or '*') { jump BadFile; } if (ch == '-') return FileIO_Error(extf, "tried to open a file which was incomplete"); ch = FileIO_GetC(extf); if (ch ~= ' ') { jump BadFile; } ch = FileIO_GetC(extf); if (ch ~= '/') { jump BadFile; } ch = FileIO_GetC(extf); if (ch ~= '/') { jump BadFile; } owner = struc-->AUXF_IFID_OF_OWNER; ix = 3; if (owner == UUID_ARRAY) ix = 8; if (owner ~= NULL) { for (: ix <= owner->0: ix++) { ch = FileIO_GetC(extf); if (ch == -1) { jump BadFile; } if (ch ~= owner->ix) not_this_ifid = true; if (ch == ' ') break; } if (not_this_ifid == false) { ch = FileIO_GetC(extf); if (ch ~= ' ') { jump BadFile; } } } while (ch ~= -1) { ch = FileIO_GetC(extf); if (ch == 10 or 13) break; } if (not_this_ifid) { struc-->AUXF_STATUS = AUXF_STATUS_IS_CLOSED; glk_stream_close(str, 0); return FileIO_Error(extf, "tried to open a file owned by another project"); } } return struc-->AUXF_STREAM; .BadFile; struc-->AUXF_STATUS = AUXF_STATUS_IS_CLOSED; glk_stream_close(str, 0); return FileIO_Error(extf, "tried to open a file which seems to be malformed"); ]; [ FileIO_Close extf struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to open a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_OPEN_FOR_READ or AUXF_STATUS_IS_OPEN_FOR_WRITE or AUXF_STATUS_IS_OPEN_FOR_APPEND) return FileIO_Error(extf, "tried to close a file which is not open"); if ((struc-->AUXF_BINARY == false) && (struc-->AUXF_STATUS == AUXF_STATUS_IS_OPEN_FOR_WRITE or AUXF_STATUS_IS_OPEN_FOR_APPEND)) { glk_set_window(gg_mainwin); } if (struc-->AUXF_STATUS == AUXF_STATUS_IS_OPEN_FOR_WRITE or AUXF_STATUS_IS_OPEN_FOR_APPEND) { glk_stream_set_position(struc-->AUXF_STREAM, 0, 0); ! seek start glk_put_char_stream(struc-->AUXF_STREAM, '*'); ! mark as complete } glk_stream_close(struc-->AUXF_STREAM, 0); struc-->AUXF_STATUS = AUXF_STATUS_IS_CLOSED; ]; [ FileIO_GetC extf struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return -1; struc = TableOfExternalFiles-->extf; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_OPEN_FOR_READ) return -1; return glk_get_char_stream(struc-->AUXF_STREAM); ]; [ FileIO_PutC extf char struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return -1; return FileIO_Error(extf, "tried to write to a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_OPEN_FOR_WRITE or AUXF_STATUS_IS_OPEN_FOR_APPEND) return FileIO_Error(extf, "tried to write to a file which is not open for writing"); return glk_put_char_stream(struc-->AUXF_STREAM, char); ]; [ FileIO_PrintLine extf ch struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to write to a non-file"); struc = TableOfExternalFiles-->extf; for (::) { ch = FileIO_GetC(extf); if (ch == -1) rfalse; if (ch == 10 or 13) { print "^"; rtrue; } print (char) ch; } ]; [ FileIO_PrintContents extf tab struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to access a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "printing text will not work with binary files"); if (FileIO_Open(extf, false) == 0) rfalse; while (FileIO_PrintLine(extf)) ; FileIO_Close(extf); rtrue; ]; [ FileIO_PutContents extf text append_flag struc str ch; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to access a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "writing text will not work with binary files"); str = FileIO_Open(extf, true, append_flag); if (str == 0) rfalse; @push say__p; @push say__pc; ClearParagraphing(); PrintText(text); FileIO_Close(extf); @pull say__pc; @pull say__p; rfalse; ]; [ FileIO_PutTable extf tab rv struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to write table to a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "writing a table will not work with binary files"); if (FileIO_Open(extf, true) == 0) rfalse; rv = TablePrint(tab); FileIO_Close(extf); if (rv) return RunTimeProblem(RTP_TABLE_CANTSAVE, tab); rtrue; ]; [ FileIO_GetTable extf tab struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to read table from a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "reading a table will not work with binary files"); if (FileIO_Open(extf, false) == 0) rfalse; TableRead(tab, extf); FileIO_Close(extf); rtrue; ]; #IFNOT; ! TARGET_GLULX [ FileIO_Exists extf; rfalse; ]; [ FileIO_Ready extf; rfalse; ]; [ FileIO_GetC extf; return -1; ]; [ FileIO_PutTable extf tab; return FileIO_Error(extf, "external files can only be used under Glulx"); ]; [ FileIO_MarkReady extf status; FileIO_PutTable(extf); ]; [ FileIO_GetTable extf tab; FileIO_PutTable(extf); ]; [ FileIO_PrintContents extf; FileIO_PutTable(extf); ]; [ FileIO_PutContents extf; FileIO_PutTable(extf); ]; #ENDIF; ! TARGET_GLULX #IFNOT; ! PLUGIN_FILES [ FileIO_GetC extf; return -1; ]; #ENDIF; ! PLUGIN_FILES Constant MAX_MSTACK_FRAME = 2 + 6; Constant MSTACK_CAPACITY = 20; Constant MSTACK_SIZE = MSTACK_CAPACITY*MAX_MSTACK_FRAME; Array MStack --> MSTACK_SIZE; Global MStack_Top = 0; ! Topmost word currently used [ Mstack_Create_Frame creator id extent; if (creator == 0) rfalse; extent = creator.call(MStack_Top+2, 1); if (extent == 0) rfalse; if (MStack_Top + MAX_MSTACK_FRAME >= MSTACK_SIZE + 2) { RunTimeProblem(RTP_MSTACKMEMORY, MSTACK_SIZE); Mstack_Backtrace(); rfalse; } MStack_Top++; MStack-->MStack_Top = id; MStack_Top++; MStack_Top = MStack_Top + extent; MStack-->MStack_Top = -(extent+2); rtrue; ]; [ Mstack_Destroy_Frame creator id pos; pos = Mstack_Seek_Frame(id); if (pos == 0) rfalse; ! Not found: do nothing MStack_Top = pos - 2; ! Clear mstack down to just below this frame if (creator) creator.call(pos, -1); rtrue; ]; Global MStack_Frame_Extent = 0; [ Mstack_Seek_Frame id pos; pos = MStack_Top; while ((pos > 0) && (MStack-->pos ~= 0)) { MStack_Frame_Extent = MStack-->pos; pos = pos + MStack_Frame_Extent; MStack_Frame_Extent = (-2) - MStack_Frame_Extent; if (MStack-->(pos+1) == id) return pos+2; } MStack_Frame_Extent = 0; return 0; ! Not found ]; [ Mstack_Backtrace pos k; print "Mstack backtrace: size ", MStack_Top+1, " words^"; pos = MStack_Top; while (MStack-->pos ~= 0) { MStack_Frame_Extent = MStack-->pos; pos = pos + MStack_Frame_Extent; MStack_Frame_Extent = (-2) - MStack_Frame_Extent; print "Block at ", pos+2, " owner ID ", MStack-->(pos+1), " size ", MStack_Frame_Extent, "^"; for (k=0: k(pos+2+k), " "; print "^"; } ]; [ MstVO id off pos; pos = Mstack_Seek_Frame(id); if (pos == 0) { print "Variable unavailable for this action, activity or rulebook: ", "internal ID number ", id, "/", off, "^"; rfalse; } if ((off<0) || (off >= MStack_Frame_Extent)) { print "Variable stack offset wrong: ", id, "/", off, " at ", pos, "^"; rfalse; } return pos+off; ]; [ MstVON id off pos; pos = Mstack_Seek_Frame(id); if (pos == 0) { return 0; ! word position 0 on the M-stack } if ((off<0) || (off >= MStack_Frame_Extent)) { print "Variable stack offset wrong: ", id, "/", off, " at ", pos, "^"; rfalse; } return pos+off; ]; #IFNDEF MEMORY_ECONOMY; Array rulebook_var_creators --> 0 0 0 0 0 0 0 0 0 0 RBSTVC_10 0 RBSTVC_12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RBSTVC_420 RBSTVC_421 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RBSTVC_453 RBSTVC_454 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; #ENDIF; [ RBSTVC_10 pos state; if (state == 1) { MStack-->pos = selfobj; pos++; } else { pos++; } return 1; ]; [ RBSTVC_12 pos state; if (state == 1) { MStack-->pos = false; pos++; MStack-->pos = false; pos++; MStack-->pos = 0; pos++; MStack-->pos = 0; pos++; MStack-->pos = 0; pos++; MStack-->pos = false; pos++; } else { pos++; pos++; pos++; pos++; pos++; pos++; } return 6; ]; [ RBSTVC_420 pos state; if (state == 1) { MStack-->pos = 0; pos++; } else { pos++; } return 1; ]; [ RBSTVC_421 pos state; if (state == 1) { MStack-->pos = 0; pos++; MStack-->pos = 0; pos++; } else { pos++; pos++; } return 2; ]; [ RBSTVC_453 pos state; if (state == 1) { MStack-->pos = 0; pos++; } else { pos++; } return 1; ]; [ RBSTVC_454 pos state; if (state == 1) { MStack-->pos = 0; pos++; MStack-->pos = 0; pos++; } else { pos++; pos++; } return 2; ]; [ MStack_CreateRBVars rb cr; #IFDEF MEMORY_ECONOMY; switch (rb) { 10: cr = RBSTVC_10; 12: cr = RBSTVC_12; 420: cr = RBSTVC_420; 421: cr = RBSTVC_421; 453: cr = RBSTVC_453; 454: cr = RBSTVC_454; } #IFNOT; cr = rulebook_var_creators-->rb; #ENDIF; if (cr == 0) return; Mstack_Create_Frame(cr, rb); ]; [ MStack_DestroyRBVars rb cr; #IFDEF MEMORY_ECONOMY; switch (rb) { 10: cr = RBSTVC_10; 12: cr = RBSTVC_12; 420: cr = RBSTVC_420; 421: cr = RBSTVC_421; 453: cr = RBSTVC_453; 454: cr = RBSTVC_454; } #IFNOT; cr = rulebook_var_creators-->rb; #ENDIF; if (cr == 0) return; Mstack_Destroy_Frame(cr, rb); ]; Array activity_var_creators --> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 AVSTVC_33 0 0 0 0 0 0 0; [ AVSTVC_33 pos state; if (state == 1) { MStack-->pos = nothing; pos++; MStack-->pos = false; pos++; } else { pos++; pos++; } return 2; ]; [ MStack_CreateAVVars av cr; cr = activity_var_creators-->av; if (cr == 0) return; Mstack_Create_Frame(cr, av + 10000); ]; [ MStack_DestroyAVVars av cr; cr = activity_var_creators-->av; if (cr == 0) return; Mstack_Destroy_Frame(cr, av + 10000); ]; [ Perform_Undo; #ifdef PREVENT_UNDO; L__M(##Miscellany, 70); return; #endif; if (turns == 1) { L__M(##Miscellany, 11); return; } if (undo_flag == 0) { L__M(##Miscellany, 6); return; } if (undo_flag == 1) { L__M(##Miscellany, 7); return; } if (VM_Undo() == 0) L__M(##Miscellany, 7); ]; [ ANNOUNCE_SCORE_R; if (actor ~= player) rfalse; #ifdef NO_SCORING; L__M(##Score, 2); #ifnot; GL__M(##Score); PrintRank(); #endif; ]; [ SWITCH_SCORE_NOTIFY_ON_R; if (actor ~= player) rfalse; #ifdef NO_SCORING; ANNOUNCE_SCORE_R(); #ifnot; notify_mode=1; #endif; ]; [ REP_SWITCH_NOTIFY_ON_R; if (actor ~= player) rfalse; #ifndef NO_SCORING; GL__M(##NotifyOn); #endif; ]; [ SWITCH_SCORE_NOTIFY_OFF_R; if (actor ~= player) rfalse; #ifdef NO_SCORING; ANNOUNCE_SCORE_R(); #ifnot; notify_mode=0; #endif; ]; [ REP_SWITCH_NOTIFY_OFF_R; if (actor ~= player) rfalse; #ifndef NO_SCORING; GL__M(##NotifyOff); #endif; ]; [ PREFER_SOMETIMES_ABBREVIATED_R; if (actor ~= player) rfalse; lookmode=1; ]; ! Brief [ REP_PREFER_SOMETIMES_ABBR_R; if (actor ~= player) rfalse; print (string) Story; GL__M(##LMode1); ]; ! Brief [ PREFER_UNABBREVIATED_R; if (actor ~= player) rfalse; lookmode=2; ]; ! Verbose [ REP_PREFER_UNABBREVIATED_R; if (actor ~= player) rfalse; print (string) Story; GL__M(##LMode2); ]; ! Verbose [ PREFER_ABBREVIATED_R; if (actor ~= player) rfalse; lookmode=3; ]; ! Superbrief [ REP_PREFER_ABBREVIATED_R; if (actor ~= player) rfalse; print (string) Story; GL__M(##LMode3); ]; ! Superbrief [ ANNOUNCE_PRONOUN_MEANINGS_R x y c d; if (actor ~= player) rfalse; GL__M(##Pronouns, 1); c = (LanguagePronouns-->0)/3; if (player ~= selfobj) c++; if (c==0) return GL__M(##Pronouns, 4); for (x = 1, d = 0 : x <= LanguagePronouns-->0: x = x+3) { print "~", (address) LanguagePronouns-->x, "~ "; y = LanguagePronouns-->(x+2); if (y == NULL) GL__M(##Pronouns, 3); else { GL__M(##Pronouns, 2); print (the) y; } d++; if (d < c-1) print ", "; if (d == c-1) print (string) LISTAND__TX; } if (player ~= selfobj) { print "~", (address) ME1__WD, "~ "; GL__M(##Pronouns, 2); c = player; player = selfobj; print (the) c; player = c; } "."; ]; !Constant TRACE_I7_SPACING; [ ClearParagraphing; say__p = 0; say__pc = 0; ]; [ DivideParagraphPoint; #ifdef TRACE_I7_SPACING; print "[DPP", say__p, say__pc, "]"; #endif; if (say__p) { new_line; say__p = 0; say__pc = say__pc | PARA_COMPLETED; if (say__pc & PARA_PROMPTSKIP) say__pc = say__pc - PARA_PROMPTSKIP; if (say__pc & PARA_SUPPRESSPROMPTSKIP) say__pc = say__pc - PARA_SUPPRESSPROMPTSKIP; } #ifdef TRACE_I7_SPACING; print "[-->", say__p, say__pc, "]"; #endif; say__pc = say__pc | PARA_CONTENTEXPECTED; ]; [ ParaContent; if (say__pc & PARA_CONTENTEXPECTED) { say__pc = say__pc - PARA_CONTENTEXPECTED; say__p = 1; } ]; [ GoingLookBreak; if (say__pc & PARA_COMPLETED == 0) new_line; ClearParagraphing(); ]; [ CommandClarificationBreak; new_line; ClearParagraphing(); ]; [ RunParagraphOn; #ifdef TRACE_I7_SPACING; print "[RPO", say__p, say__pc, "]"; #endif; say__p = 0; say__pc = say__pc | PARA_PROMPTSKIP; say__pc = say__pc | PARA_SUPPRESSPROMPTSKIP; ]; [ SpecialLookSpacingBreak; #ifdef TRACE_I7_SPACING; print "[SLS", say__p, say__pc, "]"; #endif; say__p = 0; say__pc = say__pc | PARA_PROMPTSKIP; ]; [ EnsureBreakBeforePrompt; if ((say__p) || ((say__pc & PARA_PROMPTSKIP) && ((say__pc & PARA_SUPPRESSPROMPTSKIP)==0))) new_line; ClearParagraphing(); ]; [ PrintSingleParagraph matter; say__p = 1; say__pc = say__pc | PARA_NORULEBOOKBREAKS; PrintText(matter); DivideParagraphPoint(); say__pc = 0; ]; [ STextSubstitution; if (say__n ~= 1) print "s"; ]; [ PrintPrompt i; style roman; EnsureBreakBeforePrompt(); PrintText( (Global_Vars-->1) ); ClearBoxedText(); ClearParagraphing(); enable_rte = true; ]; Global pending_boxed_quotation; ! a routine to overlay the quotation on screen [ DisplayBoxedQuotation Q; pending_boxed_quotation = Q; ]; [ ClearBoxedText i; if (pending_boxed_quotation) { for (i=0: Runtime_Quotations_Displayed-->i: i++) if (Runtime_Quotations_Displayed-->i == pending_boxed_quotation) { pending_boxed_quotation = 0; return; } Runtime_Quotations_Displayed-->i = pending_boxed_quotation; ClearParagraphing(); pending_boxed_quotation(); ClearParagraphing(); pending_boxed_quotation = 0; } ]; [ NotifyTheScore; #Ifndef NO_SCORING; if (notify_mode == 1) { DivideParagraphPoint(); VM_Style(NOTE_VMSTY); print "["; L__M(##Miscellany, 50, score-last_score); print ".]^"; VM_Style(NORMAL_VMSTY); } #Endif; ]; #Ifdef TARGET_ZCODE; #Iftrue (#version_number == 6); [ DrawStatusLine; Z6_DrawStatusLine(); ]; #Endif; #Endif; #Ifndef DrawStatusLine; [ DrawStatusLine width posb; @push say__p; @push say__pc; BeginActivity(CONSTRUCTING_STATUS_LINE_ACT); VM_StatusLineHeight(1); VM_MoveCursorInStatusLine(1, 1); if (statuswin_current) { width = VM_ScreenWidth(); posb = width-15; spaces width; ClearParagraphing(); if (ForActivity(CONSTRUCTING_STATUS_LINE_ACT) == false) { VM_MoveCursorInStatusLine(1, 2); switch(metaclass(left_hand_status_line)) { String: print (string) left_hand_status_line; Routine: left_hand_status_line(); } VM_MoveCursorInStatusLine(1, posb); switch(metaclass(right_hand_status_line)) { String: print (string) right_hand_status_line; Routine: right_hand_status_line(); } } VM_MoveCursorInStatusLine(1, 1); VM_MainWindow(); } ClearParagraphing(); EndActivity(CONSTRUCTING_STATUS_LINE_ACT); @pull say__pc; @pull say__p; ]; #Endif; [ SL_Score_Moves; if (not_yet_in_play) return; #ifdef NO_SCORING; print sline2; #ifnot; print sline1, "/", sline2; #endif; ]; [ SL_Location; if (not_yet_in_play) return; if (location == thedark) { BeginActivity(PRINTING_NAME_OF_DARK_ROOM_ACT); if (ForActivity(PRINTING_NAME_OF_DARK_ROOM_ACT) == false) L__M(##Miscellany, 71); EndActivity(PRINTING_NAME_OF_DARK_ROOM_ACT); } else { FindVisibilityLevels(); if (visibility_ceiling == location) print (name) location; else print (The) visibility_ceiling; } ]; [ Banner; BeginActivity(PRINTING_BANNER_TEXT_ACT); if (ForActivity(PRINTING_BANNER_TEXT_ACT) == false) { VM_Style(HEADER_VMSTY); print (string) Story; VM_Style(NORMAL_VMSTY); new_line; print (string) Headline; #ifdef Story_Author; print " by ", (string) Story_Author; #endif; ! Story_Author new_line; VM_Describe_Release(); print " / Inform 7 build ", (string) NI_BUILD_COUNT, " "; print "(I6/v"; inversion; print " lib ", (string) LibRelease, ") "; #Ifdef STRICT_MODE; print "S"; #Endif; ! STRICT_MODE #Ifdef DEBUG; print "D"; #Endif; ! DEBUG new_line; } EndActivity(PRINTING_BANNER_TEXT_ACT); ]; [ DecimalNumber num; print num; ]; [ EnglishNumber n; LanguageNumber(n); ]; [ PrintText x; if (x ofclass String) print (string) x; if (x ofclass Routine) (x)(); ]; [ I7_String x; PrintText(x); ]; ! An alternative name now used only by extensions [ PrintOrRun obj prop no_break routine_return_value; !print "(", obj, ".", prop, ";", say__p, say__pc, ")"; if (prop == 0) { print (name) prop; routine_return_value = true; } else { switch (metaclass(obj.prop)) { nothing: routine_return_value = false; String: if (obj.prop == EMPTY_TEXT_VALUE) break; print (string) obj.prop; !if (no_break == false) new_line; routine_return_value = true; Routine: routine_return_value = RunRoutines(obj, prop); !print "[", routine_return_value, "]"; } } if (routine_return_value) { say__p = 1; if (no_break == false) { new_line; !print "(DP->", say__p, say__pc, ")"; DivideParagraphPoint(); !print "(to", say__p, say__pc, ")"; } } !print "(-->", say__p, say__pc, ")"; return routine_return_value; ]; Array StorageForShortName buffer 250; [ CPrintOrRun obj prop v length i; if ((obj ofclass String or Routine) || (prop == 0)) VM_PrintToBuffer (StorageForShortName, 160, obj); else { if (obj.prop == NULL) rfalse; if (metaclass(obj.prop) == Routine or String) VM_PrintToBuffer(StorageForShortName, 160, obj, prop); else return RunTimeError(2, obj, prop); } length = StorageForShortName-->0; StorageForShortName->WORDSIZE = VM_LowerToUpperCase(StorageForShortName->WORDSIZE); for (i=WORDSIZE: ii; if (i>WORDSIZE) say__p = 1; return; ]; [ Cap str nocaps; if (nocaps) print (string) str; else CPrintOrRun(str, 0); ]; [ PSN__ o; if (o == 0) { print (string) NOTHING__TX; rtrue; } switch (metaclass(o)) { Routine: print ""; rtrue; String: print ""; rtrue; nothing: print ""; rtrue; } CarryOutActivity(PRINTING_THE_NAME_ACT, o); ]; Global caps_mode = false; [ STANDARD_NAME_PRINTING_R obj; obj = parameter_object; if (obj == 0) { print (string) NOTHING__TX; return; } switch (metaclass(obj)) { Routine: print ""; return; String: print ""; return; nothing: print ""; return; } if (obj == player) { if (indef_mode == NULL && caps_mode) print (string) YOU__TX; else print (string) YOURSELF__TX; return; } #Ifdef LanguagePrintShortName; if (LanguagePrintShortName(obj)) return; #Endif; ! LanguagePrintShortName if (indef_mode && obj.&short_name_indef ~= 0 && PrintOrRun(obj, short_name_indef, true) ~= 0) return; if (caps_mode && obj.&cap_short_name ~= 0 && PrintOrRun(obj, cap_short_name, true) ~= 0) { caps_mode = false; return; } if (obj.&short_name ~= 0 && PrintOrRun(obj, short_name, true) ~= 0) return; print (object) obj; ]; Global short_name_case; [ PrefaceByArticle obj acode pluralise capitalise i artform findout artval; if (obj provides articles) { artval=(obj.&articles)-->(acode+short_name_case*LanguageCases); if (capitalise) print (Cap) artval, " "; else print (string) artval, " "; if (pluralise) return; print (PSN__) obj; return; } i = GetGNAOfObject(obj); if (pluralise) { if (i < 3 || (i >= 6 && i < 9)) i = i + 3; } i = LanguageGNAsToArticles-->i; artform = LanguageArticles + 3*WORDSIZE*LanguageContractionForms*(short_name_case + i*LanguageCases); #Iftrue (LanguageContractionForms == 2); if (artform-->acode ~= artform-->(acode+3)) findout = true; #Endif; ! LanguageContractionForms #Iftrue (LanguageContractionForms == 3); if (artform-->acode ~= artform-->(acode+3)) findout = true; if (artform-->(acode+3) ~= artform-->(acode+6)) findout = true; #Endif; ! LanguageContractionForms #Iftrue (LanguageContractionForms == 4); if (artform-->acode ~= artform-->(acode+3)) findout = true; if (artform-->(acode+3) ~= artform-->(acode+6)) findout = true; if (artform-->(acode+6) ~= artform-->(acode+9)) findout = true; #Endif; ! LanguageContractionForms #Iftrue (LanguageContractionForms > 4); findout = true; #Endif; ! LanguageContractionForms #Ifdef TARGET_ZCODE; if (standard_interpreter ~= 0 && findout) { StorageForShortName-->0 = 160; @output_stream 3 StorageForShortName; if (pluralise) print (number) pluralise; else print (PSN__) obj; @output_stream -3; acode = acode + 3*LanguageContraction(StorageForShortName + 2); } #Ifnot; ! TARGET_GLULX if (findout) { if (pluralise) Glulx_PrintAnyToArray(StorageForShortName, 160, EnglishNumber, pluralise); else Glulx_PrintAnyToArray(StorageForShortName, 160, PSN__, obj); acode = acode + 3*LanguageContraction(StorageForShortName); } #Endif; ! TARGET_ Cap (artform-->acode, ~~capitalise); ! print article if (pluralise) return; print (PSN__) obj; ]; [ IndefArt obj i; if (obj == 0) { print (string) NOTHING__TX; rtrue; } i = indef_mode; indef_mode = true; if (obj has proper) { indef_mode = NULL; print (PSN__) obj; indef_mode = i; return; } if ((obj provides article) && (obj.article ~= EMPTY_TEXT_VALUE)) { PrintOrRun(obj, article, true); print " ", (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 2); indef_mode = i; ]; [ CIndefArt obj i; if (obj == 0) { CPrintOrRun(NOTHING__TX, 0); rtrue; } i = indef_mode; indef_mode = true; if (obj has proper) { indef_mode = NULL; caps_mode = true; print (PSN__) obj; indef_mode = i; caps_mode = false; return; } if ((obj provides article) && (obj.article ~= EMPTY_TEXT_VALUE)) { CPrintOrRun(obj, article); print " ", (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 2, 0, 1); indef_mode = i; ]; [ DefArt obj i; i = indef_mode; indef_mode = false; if ((~~obj ofclass Object) || obj has proper) { indef_mode = NULL; print (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 1); indef_mode = i; ]; [ CDefArt obj i; i = indef_mode; indef_mode = false; if ((obj ofclass Object) && (obj has proper || obj == player)) { indef_mode = NULL; caps_mode = true; print (PSN__) obj; indef_mode = i; caps_mode = false; return; } if ((~~obj ofclass Object) || obj has proper) { indef_mode = NULL; print (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 0); indef_mode = i; ]; [ PrintShortName obj i; i = indef_mode; indef_mode = NULL; PSN__(obj); indef_mode = i; ]; [ I7_SOO_PAR oldval count; if (count <= 1) return count; return random(count); ]; [ I7_SOO_RAN oldval count v; if (count <= 1) return count; v = oldval; while (v == oldval) v = random(count); return v; ]; [ I7_SOO_STI oldval count v; if (oldval) return oldval; return I7_SOO_PAR(oldval, count); ]; [ I7_SOO_CYC oldval count; oldval++; if (oldval > count) oldval = 1; return oldval; ]; [ I7_SOO_STOP oldval count; oldval++; if (oldval > count) oldval = count; return oldval; ]; [ I7_SOO_TAP oldval count tn rn c; if (count <= 1) return count; tn = count*(count+1)/2; rn = random(tn); for (c=1:c<=count:c++) { rn = rn - c; if (rn<=0) return (count-c+1); } ]; [ I7_SOO_TRAN oldval count; if (oldval32; [ I7_SOO_SHU oldval count sd ct v i j s ssd scope cc base; base = count+1; v = oldval%base; oldval = oldval/base; ct = oldval%base; sd = oldval/base; if (count > 32) return I7_SOO_PAR(oldval, count); if (count <= 1) v = count; else { !print "^In v=", v, " ct=", ct, " sd=", sd, "^"; cc = base*base; scope = (MAX_POSITIVE_NUMBER-1)/cc; !print "Scope = ", scope, "^"; if (sd == 0) { sd = random(scope); ct=0; } for (i=0:ii = i; ssd = sd; for (i=0:ij; I7_SOO_SHUF->j = I7_SOO_SHUF->i; I7_SOO_SHUF->i = s; } !for (i=0:ii, " "; print "^"; v = (I7_SOO_SHUF->ct)+1; ct++; if (ct >= count) { ct = 0; ssd = 0; } } !print "Out v=", v, " ct=", ct, " ssd=", sd, "^"; !print "Return ", v + ct*base + ssd*base*base, "^"; return v + ct*base + ssd*base*base; ]; Constant RR_NAME 4; Constant RR_PERMISSIONS 5; Constant RR_STORAGE 6; Constant RR_KIND 7; Constant RR_HANDLER 8; Constant RR_DESCRIPTION 9; Constant VALENCY_MASK = RELS_EQUIVALENCE+RELS_SYMMETRIC+RELS_X_UNIQUE+RELS_Y_UNIQUE; [ RELATION_TY_EquivalenceAdjective rel set perms state handler; perms = rel-->RR_PERMISSIONS; if (perms & RELS_EQUIVALENCE) state = true; if (set < 0) return state; if ((set) && (state == false)) { perms = perms + RELS_EQUIVALENCE; if (perms & RELS_SYMMETRIC == 0) perms = perms + RELS_SYMMETRIC; } if ((set == false) && (state)) { perms = perms - RELS_EQUIVALENCE; if (perms & RELS_SYMMETRIC) perms = perms - RELS_SYMMETRIC; } rel-->RR_PERMISSIONS = perms; handler = rel-->RR_HANDLER; if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to an equivalence relation ***"; ]; [ RELATION_TY_SymmetricAdjective rel set perms state handler; perms = rel-->RR_PERMISSIONS; if (perms & RELS_SYMMETRIC) state = true; if (set < 0) return state; if ((set) && (state == false)) perms = perms + RELS_SYMMETRIC; if ((set == false) && (state)) perms = perms - RELS_SYMMETRIC; rel-->RR_PERMISSIONS = perms; handler = rel-->RR_HANDLER; if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a symmetric relation ***"; ]; [ RELATION_TY_OToOAdjective rel set perms state handler; perms = rel-->RR_PERMISSIONS; if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == RELS_X_UNIQUE+RELS_Y_UNIQUE) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE == 0) perms = perms + RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE == 0) perms = perms + RELS_Y_UNIQUE; if (perms & RELS_EQUIVALENCE) perms = perms - RELS_EQUIVALENCE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } rel-->RR_PERMISSIONS = perms; handler = rel-->RR_HANDLER; if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a one-to-one relation ***"; ]; [ RELATION_TY_OToVAdjective rel set perms state handler; perms = rel-->RR_PERMISSIONS; if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == RELS_X_UNIQUE) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE == 0) perms = perms + RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; if (perms & RELS_SYMMETRIC) perms = perms - RELS_SYMMETRIC; if (perms & RELS_EQUIVALENCE) perms = perms - RELS_EQUIVALENCE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } rel-->RR_PERMISSIONS = perms; handler = rel-->RR_HANDLER; if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a one-to-various relation ***"; ]; [ RELATION_TY_VToOAdjective rel set perms state handler; perms = rel-->RR_PERMISSIONS; if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == RELS_Y_UNIQUE) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE == 0) perms = perms + RELS_Y_UNIQUE; if (perms & RELS_SYMMETRIC) perms = perms - RELS_SYMMETRIC; if (perms & RELS_EQUIVALENCE) perms = perms - RELS_EQUIVALENCE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } rel-->RR_PERMISSIONS = perms; handler = rel-->RR_HANDLER; if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a various-to-one relation ***"; ]; [ RELATION_TY_VToVAdjective rel set perms state handler; perms = rel-->RR_PERMISSIONS; if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == 0) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE == 0) perms = perms + RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE == 0) perms = perms + RELS_Y_UNIQUE; } rel-->RR_PERMISSIONS = perms; handler = rel-->RR_HANDLER; if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a various-to-various relation ***"; ]; [ Relation_Now1to1 obj1 relation_property obj2 ol; ! Assert 1-1 true if (obj2) objectloop (ol provides relation_property) if (ol.relation_property == obj2) ol.relation_property = nothing; if (obj1) obj1.relation_property = obj2; ]; [ Relation_NowN1toV obj1 relation_property obj2; ! Assert 1-1 false if ((obj1) && (obj1.relation_property == obj2)) obj1.relation_property = nothing; ]; [ Relation_Now1to1V obj1 obj2 KOV relation_property ol N; ! Assert 1-1 true if (obj2) { N = KOVDomainSize(KOV); for (ol=1: ol<=N: ol++) if (GProperty(KOV, ol, relation_property) == obj2) WriteGProperty(KOV, ol, relation_property, 0); } if (obj1) WriteGProperty(KOV, obj1, relation_property, obj2); ]; [ Relation_NowN1toVV obj1 obj2 KOV relation_property; ! Assert 1-1 false if ((obj1) && (GProperty(KOV, obj1, relation_property) == obj2)) WriteGProperty(KOV, obj1, relation_property, 0); ]; [ Relation_NowS1to1 obj1 relation_property obj2; ! Assert symmetric 1-1 true if ((obj1 ofclass Object) && (obj1 provides relation_property) && (obj2 ofclass Object) && (obj2 provides relation_property)) { if (obj1.relation_property) { (obj1.relation_property).relation_property = 0; } if (obj2.relation_property) { (obj2.relation_property).relation_property = 0; } obj1.relation_property = obj2; obj2.relation_property = obj1; } ]; [ Relation_NowSN1to1 obj1 relation_property obj2; ! Assert symmetric 1-1 false if ((obj1 ofclass Object) && (obj1 provides relation_property) && (obj2 ofclass Object) && (obj2 provides relation_property) && (obj1.relation_property == obj2)) { obj1.relation_property = 0; obj2.relation_property = 0; } ]; [ Relation_NowS1to1V obj1 obj2 KOV relation_property; ! Assert symmetric 1-1 true if (GProperty(KOV, obj1, relation_property)) WriteGProperty(KOV, GProperty(KOV, obj1, relation_property), relation_property, 0); if (GProperty(KOV, obj2, relation_property)) WriteGProperty(KOV, GProperty(KOV, obj2, relation_property), relation_property, 0); WriteGProperty(KOV, obj1, relation_property, obj2); WriteGProperty(KOV, obj2, relation_property, obj1); ]; [ Relation_NowSN1to1V obj1 obj2 KOV relation_property; ! Assert symmetric 1-1 false if (GProperty(KOV, obj1, relation_property) == obj2) { WriteGProperty(KOV, obj1, relation_property, 0); WriteGProperty(KOV, obj2, relation_property, 0); } ]; Constant VTOVS_LEFT_INDEX_PROP = 0; Constant VTOVS_RIGHT_INDEX_PROP = 1; Constant VTOVS_LEFT_DOMAIN_SIZE = 2; Constant VTOVS_RIGHT_DOMAIN_SIZE = 3; Constant VTOVS_LEFT_PRINTING_ROUTINE = 4; Constant VTOVS_RIGHT_PRINTING_ROUTINE = 5; Constant VTOVS_CACHE_BROKEN = 6; Constant VTOVS_CACHE = 7; [ Relation_NowVtoV obj1 relation obj2 sym pr pr2 i1 i2 vtov_structure; if (sym && (obj2 ~= obj1)) { Relation_NowVtoV(obj2, relation, obj1, false); } vtov_structure = relation-->RR_STORAGE; pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; vtov_structure-->VTOVS_CACHE_BROKEN = true; ! Mark any cache as broken if (pr) { if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; else return RunTimeProblem(RTP_IMPREL, obj1, relation); } else i1 = obj1-1; if (pr2) { if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; else return RunTimeProblem(RTP_IMPREL, obj2, relation); } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; vtov_structure-->pr = (vtov_structure-->pr) | i1; ]; [ Relation_NowNVtoV obj1 relation obj2 sym pr pr2 i1 i2 vtov_structure; if (sym && (obj2 ~= obj1)) { Relation_NowNVtoV(obj2, relation, obj1, false); } vtov_structure = relation-->RR_STORAGE; pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; vtov_structure-->VTOVS_CACHE_BROKEN = true; ! Mark any cache as broken if (pr) { if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; else return RunTimeProblem(RTP_IMPREL, obj1, relation); } else i1 = obj1-1; if (pr2) { if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; else return RunTimeProblem(RTP_IMPREL, obj2, relation); } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; if ((vtov_structure-->pr) & i1) vtov_structure-->pr = vtov_structure-->pr - i1; ]; [ Relation_TestVtoV obj1 relation obj2 sym pr pr2 i1 i2 vtov_structure; vtov_structure = relation-->RR_STORAGE; pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; if (sym && (obj2 > obj1)) { sym = obj1; obj1 = obj2; obj2 = sym; } if (pr) { if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; else { RunTimeProblem(RTP_IMPREL, obj1, relation); rfalse; } } else i1 = obj1-1; if (pr2) { if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; else { RunTimeProblem(RTP_IMPREL, obj2, relation); rfalse; } } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; if ((vtov_structure-->pr) & i1) rtrue; rfalse; ]; [ Relation_NowEquiv obj1 relation_property obj2 big little; big = obj1.relation_property; little = obj2.relation_property; if (big == little) return; if (big < little) { little = obj1.relation_property; big = obj2.relation_property; } objectloop (obj1 provides relation_property) if (obj1.relation_property == big) obj1.relation_property = little; ]; [ Relation_NowNEquiv obj1 relation_property obj2 old new; old = obj1.relation_property; new = obj2.relation_property; if (old ~= new) return; new = 0; objectloop (obj2 provides relation_property) if (obj2.relation_property > new) new = obj2.relation_property; new++; obj1.relation_property = new; ]; [ Relation_NowEquivV obj1 obj2 KOV relation_property n big little i; big = GProperty(KOV, obj1, relation_property); little = GProperty(KOV, obj2, relation_property); if (big == little) return; if (big < little) { little = GProperty(KOV, obj1, relation_property); big = GProperty(KOV, obj2, relation_property); } n = KOVDomainSize(KOV); for (i=1: i<=n: i++) if (GProperty(KOV, i, relation_property) == big) WriteGProperty(KOV, i, relation_property, little); ]; [ Relation_NowNEquivV obj1 obj2 KOV relation_property n old new i; old = GProperty(KOV, obj1, relation_property); new = GProperty(KOV, obj2, relation_property); if (old ~= new) return; new = 0; n = KOVDomainSize(KOV); for (i=1: i<=n: i++) if (GProperty(KOV, i, relation_property) > new) new = GProperty(KOV, i, relation_property); new++; WriteGProperty(KOV, obj1, relation_property, new); ]; [ Relation_ShowVtoV relation sym x obj1 obj2 pr pr2 proutine1 proutine2 vtov_structure; vtov_structure = relation-->RR_STORAGE; pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; proutine1 = vtov_structure-->VTOVS_LEFT_PRINTING_ROUTINE; proutine2 = vtov_structure-->VTOVS_RIGHT_PRINTING_ROUTINE; if (pr && pr2) { objectloop (obj1 provides pr) objectloop (obj2 provides pr2) { if (sym && obj2 > obj1) continue; if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " ", (The) obj1; if (sym) print " <=> "; else print " >=> "; print (the) obj2, "^"; } } return; } if (pr && (pr2==0)) { objectloop (obj1 provides pr) for (obj2=1:obj2<=vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE:obj2++) { if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " ", (The) obj1, " >=> "; (proutine2).call(obj2); print "^"; } } return; } if ((pr==0) && (pr2)) { for (obj1=1:obj1<=vtov_structure-->2:obj1++) objectloop (obj2 provides pr2) { if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " "; (proutine1).call(obj1); print " >=> ", (the) obj2, "^"; } } return; } for (obj1=1:obj1<=vtov_structure-->2:obj1++) for (obj2=1:obj2<=vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE:obj2++) if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " "; (proutine1).call(obj1); print " >=> "; (proutine2).call(obj2); print "^"; } ]; [ Relation_ShowOtoO relation sym x relation_property t N obj1 obj2; relation_property = relation-->RR_STORAGE; t = KindBaseTerm(relation-->RR_KIND, 0); ! Kind of left term N = KOVDomainSize(t); if (t == OBJECT_TY) { objectloop (obj1 provides relation_property) { obj2 = obj1.relation_property; if (sym && obj2 < obj1) continue; if (obj2 == 0) continue; if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " ", (The) obj1; if (sym) print " == "; else print " >=> "; print (the) obj2, "^"; } } else { for (obj1=1: obj1<=N: obj1++) { obj2 = GProperty(t, obj1, relation_property); if (sym && obj2 < obj1) continue; if (obj2 == 0) continue; if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " "; PrintKindValuePair(t, obj1); if (sym) print " == "; else print " >=> "; PrintKindValuePair(t, obj2); print "^"; } } ]; [ Relation_RShowOtoO relation sym x relation_property obj1 obj2 t1 t2 N1 N2; relation_property = relation-->RR_STORAGE; t1 = KindBaseTerm(relation-->RR_KIND, 0); ! Kind of left term t2 = KindBaseTerm(relation-->RR_KIND, 1); ! Kind of right term if (t2 == OBJECT_TY) { if (t1 == OBJECT_TY) { objectloop (obj1) { objectloop (obj2 provides relation_property) { if (obj2.relation_property ~= obj1) continue; if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " ", (The) obj1; print " >=> "; print (the) obj2, "^"; } } } else { N1 = KOVDomainSize(t1); for (obj1=1: obj1<=N1: obj1++) { objectloop (obj2 provides relation_property) { if (obj2.relation_property ~= obj1) continue; if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " "; PrintKindValuePair(t1, obj1); print " >=> "; print (the) obj2, "^"; } } } } else { N2 = KOVDomainSize(t2); if (t1 == OBJECT_TY) { objectloop (obj1) { for (obj2=1: obj2<=N2: obj2++) { if (GProperty(t2, obj2, relation_property) ~= obj1) continue; if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " ", (The) obj1; print " >=> "; PrintKindValuePair(t2, obj2); print "^"; } } } else { N1 = KOVDomainSize(t1); for (obj1=1: obj1<=N1: obj1++) { for (obj2=1: obj2<=N2: obj2++) { if (GProperty(t2, obj2, relation_property) ~= obj1) continue; if (x == 0) { print (string) relation-->RR_DESCRIPTION, ":^"; x=1; } print " "; PrintKindValuePair(t1, obj1); print " >=> "; PrintKindValuePair(t2, obj2); print "^"; } } } } ]; [ RSE_Flip KOV v relation_property x; x = GProperty(KOV, v, relation_property); x = -x; WriteGProperty(KOV, v, relation_property, x); ]; [ RSE_Set KOV v relation_property; if (GProperty(KOV, v, relation_property) < 0) rtrue; rfalse; ]; [ Relation_ShowEquiv relation relation_property obj1 obj2 v c d somegroups t N x; print (string) relation-->RR_DESCRIPTION, ":^"; relation_property = relation-->RR_STORAGE; t = KindBaseTerm(relation-->RR_KIND, 0); ! Kind of left term N = KOVDomainSize(t); if (t == OBJECT_TY) { objectloop (obj1 provides relation_property) obj1.relation_property = -(obj1.relation_property); objectloop (obj1 provides relation_property) { if (obj1.relation_property < 0) { v = obj1.relation_property; c = 0; objectloop (obj2 has workflag2) give obj2 ~workflag2; objectloop (obj2 provides relation_property) { if (obj2.relation_property == v) { give obj2 workflag2; obj2.relation_property = -v; c++; } } if (c>1) { somegroups = true; print " { "; WriteListOfMarkedObjects(ENGLISH_BIT); print " }^"; } else obj1.relation_property = v; } } objectloop (obj2 has workflag2) give obj2 ~workflag2; c = 0; objectloop (obj1 provides relation_property) if (obj1.relation_property < 0) { c++; give obj1 workflag2; } if (c == 0) return; if (somegroups) print " and "; else print " "; if (c < 4) { WriteListOfMarkedObjects(ENGLISH_BIT); print " in"; } else print c; if (c == 1) print " a"; print " single-member group"; if (c > 1) print "s"; print "^"; objectloop (obj1 provides relation_property) if (obj1.relation_property < 0) obj1.relation_property = -(obj1.relation_property); } else { ! A slower method, since we have less efficient storage: for (obj1 = 1: obj1 <= N: obj1++) RSE_Flip(t, obj1, relation_property); for (obj1 = 1: obj1 <= N: obj1++) { if (RSE_Set(t, obj1, relation_property)) { v = GProperty(t, obj1, relation_property); c = 0; for (obj2 = 1: obj2 <= N: obj2++) if (GProperty(t, obj2, relation_property) == v) c++; if (c>1) { somegroups = true; print " {"; d = 0; for (obj2 = 1: obj2 <= N: obj2++) { if (GProperty(t, obj2, relation_property) == v) { print " "; PrintKindValuePair(t, obj2); if (d < c-1) print ","; print " "; RSE_Flip(t, obj2, relation_property); d++; } } print "}^"; } else WriteGProperty(t, obj1, relation_property, v); } } objectloop (obj2 has workflag2) give obj2 ~workflag2; c = 0; for (obj1 = 1: obj1 <= N: obj1++) if (RSE_Set(t, obj1, relation_property)) c++; if (c == 0) return; if (somegroups) print " and "; else print " "; if (c == 1) print "a"; else print c; print " single-member group"; if (c > 1) print "s"; print "^"; for (obj1 = 1: obj1 <= N: obj1++) if (RSE_Set(t, obj1, relation_property)) RSE_Flip(t, obj1, relation_property); } ]; #ifndef FAST_ROUTE_FINDING; #ifndef SLOW_ROUTE_FINDING; #ifdef TARGET_GLULX; Constant FAST_ROUTE_FINDING; #ifnot; Constant SLOW_ROUTE_FINDING; #endif; #endif; #endif; Constant NUM_DOORS = 0; Constant NUM_ROOMS = 53; Array DoorRoutingViable -> NUM_DOORS+1; Global map_has_changed = true; Global last_filter; Global last_use_doors; [ SignalMapChange; map_has_changed = true; ]; [ MapRouteTo from to filter use_doors count oy oyi ds; if (from == nothing) return nothing; if (to == nothing) return nothing; if (from == to) return nothing; if ((filter) && (filter(from) == 0)) return nothing; if ((filter) && (filter(to) == 0)) return nothing; if ((last_filter ~= filter) || (last_use_doors ~= use_doors)) map_has_changed = true; oyi = 0; objectloop (oy has mark_as_room) { if ((filter == 0) || (filter(oy))) { if (oy.room_index == -1) map_has_changed = true; oy.room_index = oyi++; } else { if (oy.room_index >= 0) map_has_changed = true; oy.room_index = -1; } } oyi = 0; objectloop (oy ofclass K4_door) { ds = false; if ((use_doors & 2) || (oy has open) || ((oy has openable) && (oy hasnt locked))) ds = true; if (DoorRoutingViable->oyi ~= ds) map_has_changed = true; DoorRoutingViable->oyi = ds; oyi++; } if (map_has_changed) { #ifdef FAST_ROUTE_FINDING; ComputeFWMatrix(filter, use_doors); #endif; map_has_changed = false; last_filter = filter; last_use_doors = use_doors; } #ifdef FAST_ROUTE_FINDING; if (count) return FastCountRouteTo(from, to, filter, use_doors); return FastRouteTo(from, to, filter, use_doors); #ifnot; if (count) return SlowCountRouteTo(from, to, filter, use_doors); return SlowRouteTo(from, to, filter, use_doors); #endif; ]; #ifdef FAST_ROUTE_FINDING; Array FWMatrix --> NUM_ROOMS*NUM_ROOMS; [ FastRouteTo from to filter use_doors diri i dir oy; if (from == to) return nothing; i = (FWMatrix-->(from.room_index*NUM_ROOMS + to.room_index))/No_Directions; if (i == 0) return nothing; diri = (FWMatrix-->(from.room_index*NUM_ROOMS + to.room_index))%No_Directions; i=0; objectloop (dir ofclass K3_direction) { if (i == diri) return dir; i++; } return nothing; ]; [ FastCountRouteTo from to filter use_doors k; if (from == to) return 0; k = (FWMatrix-->(from.room_index*NUM_ROOMS + to.room_index))/No_Directions; if (k == 0) return -1; return k; ]; [ ComputeFWMatrix filter use_doors oy ox oj axy ayj axj dir diri nd row; objectloop (oy has mark_as_room) if (oy.room_index >= 0) objectloop (ox has mark_as_room) if (ox.room_index >= 0) FWMatrix-->(oy.room_index*NUM_ROOMS + ox.room_index) = 0; objectloop (oy has mark_as_room) if (oy.room_index >= 0) { row = (oy.IK1_Count)*No_Directions; for (diri=0: diri(row+diri); if ((ox) && (ox has mark_as_room) && (ox.room_index >= 0)) { FWMatrix-->(oy.room_index*NUM_ROOMS + ox.room_index) = No_Directions + diri; continue; } if (use_doors && (ox ofclass K4_door) && ((use_doors & 2) || (DoorRoutingViable->(ox.IK4_Count)))) { @push location; location = oy; ox = ox.door_to(); @pull location; if ((ox) && (ox has mark_as_room) && (ox.room_index >= 0)) { FWMatrix-->(oy.room_index*NUM_ROOMS + ox.room_index) = No_Directions + diri; continue; } } } } objectloop (oy has mark_as_room) if (oy.room_index >= 0) objectloop (ox has mark_as_room) if (ox.room_index >= 0) { axy = (FWMatrix-->(ox.room_index*NUM_ROOMS + oy.room_index))/No_Directions; if (axy > 0) objectloop (oj has mark_as_room) if (oj.room_index >= 0) { ayj = (FWMatrix-->(oy.room_index*NUM_ROOMS + oj.room_index))/No_Directions; if (ayj > 0) { !print "Is it faster to go from ", (name) ox, " to ", ! (name) oj, " via ", (name) oy, "?^"; axj = (FWMatrix-->(ox.room_index*NUM_ROOMS + oj.room_index))/ No_Directions; if ((axj == 0) || (axy + ayj < axj)) { !print "Yes^"; FWMatrix-->(ox.room_index*NUM_ROOMS + oj.room_index) = (axy + ayj)*No_Directions + (FWMatrix-->(ox.room_index*NUM_ROOMS + oy.room_index))% No_Directions; } } } } ]; #ENDIF; #ifndef FAST_ROUTE_FINDING; [ SlowRouteTo from to filter use_doors obj dir in_direction progressed sl through_door; if (from == nothing) return nothing; if (to == nothing) return nothing; if (from == to) return nothing; objectloop (obj has mark_as_room) obj.vector = 0; to.vector = 1; !print "Routing from ", (the) from, " to ", (the) to, "^"; while (true) { progressed = false; !print "Pass begins^"; objectloop (obj has mark_as_room) if ((filter == 0) || (filter(obj))) if (obj.vector == 0) objectloop (dir ofclass K3_direction) { in_direction = Map_Storage-->((obj.IK1_Count)*No_Directions + dir.IK3_Count); if (in_direction == nothing) continue; !print (the) obj, " > ", (the) dir, " > ", (the) in_direction, "^"; if ((in_direction) && (in_direction has mark_as_room) && (in_direction.vector > 0) && ((filter == 0) || (filter(in_direction)))) { obj.vector = dir | WORD_HIGHBIT; !print "* ", (the) obj, " vector is ", (the) dir, "^"; progressed = true; continue; } if (use_doors && (in_direction ofclass K4_door) && ((use_doors & 2) || (in_direction has open) || ((in_direction has openable) && (in_direction hasnt locked)))) { sl = location; location = obj; through_door = in_direction.door_to(); location = sl; !print "Through door is ", (the) through_door, "^"; if ((through_door) && (through_door has mark_as_room) && (through_door.vector > 0) && ((filter == 0) || (filter(through_door)))) { obj.vector = dir | WORD_HIGHBIT; !print "* ", (the) obj, " vector is ", (the) dir, "^"; progressed = true; continue; } } } objectloop (obj has mark_as_room) obj.vector = obj.vector &~ WORD_HIGHBIT; if (from.vector) return from.vector; if (progressed == false) return from.vector; } ]; [ SlowCountRouteTo from to filter use_doors obj i; if (from == nothing) return -1; if (to == nothing) return -1; if (from == to) return 0; if (from has mark_as_room && to has mark_as_room) { obj = MapRouteTo(from,to,filter,use_doors); if (obj == nothing) return -1; i = 0; obj = from; while ((obj ~= to) && (iRR_PERMISSIONS) & RELS_ROUTE_FIND) == 0) { RunTimeProblem(RTP_ROUTELESS); return nothing; } if (relation-->RR_STORAGE == 0) return nothing; handler = relation-->RR_HANDLER; if (count) return handler(relation, RELS_ROUTE_FIND_COUNT, from, to); return handler(relation, RELS_ROUTE_FIND, from, to); ]; [ RelFollowVector rv from to obj i; if (rv == nothing) return -1; i = 0; obj = from; while ((obj ~= to) && (i<=MAX_ROUTE_LENGTH)) { i++; obj = obj.vector; } return i; ]; [ OtoVRelRouteTo relation_property from to previous; while ((to) && (to provides relation_property) && (to.relation_property)) { previous = to.relation_property; previous.vector = to; if (previous == from) return to; to = previous; } return nothing; ]; [ VtoORelRouteTo relation_property from to next start; start = from; while ((from) && (from provides relation_property) && (from.relation_property)) { next = from.relation_property; from.vector = next; if (from == to) return start.vector; from = next; } return nothing; ]; [ VtoVRelRouteTo relation from to count obj obj2 related progressed left_ix pr2 i vtov_structure; vtov_structure = relation-->RR_STORAGE; if (vtov_structure-->VTOVS_CACHE) return FastVtoVRelRouteTo(relation, from, to, count); left_ix = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; objectloop (obj ofclass Object && obj provides vector) obj.vector = 0; to.vector = 1; while (true) { progressed = false; objectloop (obj ofclass Object && obj provides left_ix) if (obj.vector == 0) { objectloop (obj2 ofclass Object && obj2 provides pr2 && obj2.vector > 0) { if (Relation_TestVtoV(obj, relation, obj2)) { obj.vector = obj2 | WORD_HIGHBIT; progressed = true; continue; } } } objectloop (obj ofclass Object && obj provides left_ix) obj.vector = obj.vector &~ WORD_HIGHBIT; if (from.vector) break; if (progressed == false) break; } if (count) { if (from.vector == nothing) return -1; i = 0; obj = from; while ((obj ~= to) && (i<=MAX_ROUTE_LENGTH)) { i++; obj = obj.vector; } return i; } return from.vector; ]; [ FastVtoVRelRouteTo relation from to count domainsize cache cache2 left_ix ox oy oj offset axy axj ayj; domainsize = relation-->RR_STORAGE-->2; ! Number of left instances left_ix = relation-->RR_STORAGE-->VTOVS_LEFT_INDEX_PROP; if ((from provides left_ix) && (to provides left_ix)) { if (domainsize < 256) { cache = relation-->RR_STORAGE-->VTOVS_CACHE; cache2 = cache + domainsize*domainsize; if (relation-->RR_STORAGE-->VTOVS_CACHE_BROKEN == true) { relation-->RR_STORAGE-->VTOVS_CACHE_BROKEN = false; objectloop (oy provides left_ix) objectloop (ox provides left_ix) if (Relation_TestVtoV(oy, relation, ox)) { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache->offset = 1; cache2->offset = ox.left_ix; } else { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache->offset = 0; cache2->offset = 255; } for (oy=0: oy(ox*domainsize + oy); if (axy > 0) for (oj=0: oj(oy*domainsize + oj); if (ayj > 0) { offset = ox*domainsize + oj; axj = cache->offset; if ((axj == 0) || (axy + ayj < axj)) { cache->offset = (axy + ayj); cache2->offset = cache2->(ox*domainsize + oy); } } } } } if (count) { count = cache->((from.left_ix)*domainsize + (to.left_ix)); if (count == 0) return -1; return count; } oy = cache2->((from.left_ix)*domainsize + (to.left_ix)); if (oy < 255) objectloop (ox provides left_ix) if (ox.left_ix == oy) return oy; return nothing; } else { cache = relation-->RR_STORAGE-->VTOVS_CACHE; cache2 = cache + WORDSIZE*domainsize*domainsize; if (relation-->RR_STORAGE-->VTOVS_CACHE_BROKEN == true) { relation-->RR_STORAGE-->VTOVS_CACHE_BROKEN = false; objectloop (oy provides left_ix) objectloop (ox provides left_ix) if (Relation_TestVtoV(oy, relation, ox)) { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache-->offset = 1; cache2-->offset = ox; } else { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache-->offset = 0; cache2-->offset = nothing; } for (oy=0: oy(ox*domainsize + oy); if (axy > 0) for (oj=0: oj(oy*domainsize + oj); if (ayj > 0) { offset = ox*domainsize + oj; axj = cache-->offset; if ((axj == 0) || (axy + ayj < axj)) { cache-->offset = (axy + ayj); cache2-->offset = cache2-->(ox*domainsize + oy); } } } } } if (count) { count = cache-->((from.left_ix)*domainsize + (to.left_ix)); if (count == 0) return -1; return count; } return cache2-->((from.left_ix)*domainsize + (to.left_ix)); } } if (count) return -1; return nothing; ]; [ IterateRelations callback; callback(Rel_Record_63); callback(Rel_Record_65); callback(Rel_Record_67); callback(Rel_Record_69); callback(Rel_Record_71); callback(Rel_Record_73); callback(Rel_Record_75); callback(Rel_Record_79); callback(Rel_Record_81); callback(Rel_Record_83); callback(Rel_Record_85); callback(Rel_Record_87); ]; [ RunTimeProblem n par1 par2 par3 ln i c; if (enable_rte == false) return; enable_rte = false; print "^*** Run-time problem P", n; if (ln) print " (at paragraph ", ln, " in the source text)"; print ": "; switch(n) { RTP_BACKDROP: print "Tried to move ", (the) par1, " (a backdrop) to ", (the) par2, ", which is not a region.^"; RTP_CANTCHANGE: print "Tried to change player to ", (the) par1, ", which is not a person.^"; RTP_NOEXIT: print "Tried to change ", (the) par2, " exit of ", (the) par1, ", but it didn't seem to have such an exit to change.^"; RTP_EXITDOOR: print "Tried to change ", (the) par2, " exit of ", (the) par1, ", but it led to a door, not a room.^"; RTP_IMPREL: print "Tried to access an inappropriate relation for ", (the) par1, ", violating '", (string) par2-->RR_DESCRIPTION, "'.^"; RTP_RULESTACK: print "Too many procedural rules acting all at once.^"; RTP_TOOMANYRULEBOOKS: print "Too many rulebooks in simultaneous use.^"; RTP_TOOMANYEVENTS: print "Too many timed events are going on at once.^"; RTP_BADPROPERTY: print "Tried to access non-existent property for ", (the) par1, ".^"; RTP_UNPROVIDED: print "Since ", (the) par1, " is not allowed the property ~", (string) par2, "~, it is against the rules to try to use it.^"; RTP_UNSET: print "Although ", (the) par1, " is allowed to have the property ~", (string) par2, "~, no value was ever given, so it can't now be used.^"; RTP_TOOMANYACTS: print "Too many activities are going on at once.^"; RTP_CANTABANDON: print "Tried to abandon an activity which wasn't going on.^"; RTP_CANTEND: print "Tried to end an activity which wasn't going on.^"; RTP_CANTMOVENOTHING: print "You can't move nothing.^"; RTP_CANTREMOVENOTHING: print "You can't remove nothing from play.^"; RTP_DIVZERO: print "You can't divide by zero.^"; RTP_BADVALUEPROPERTY: print "Tried to access property for a value which didn't fit: ", "if this were a number it would be ", par1, ".^"; RTP_NOTBACKDROP: print "Tried to move ", (the) par1, " (not a backdrop) to ", (the) par2, ", which is a region.^"; RTP_TABLE_NOCOL: print "Attempt to look up a non-existent column in the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOCORR: print "Attempt to look up a non-existent correspondence in the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOROW: print "Attempt to look up a non-existent row in the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOENTRY: print "Attempt to look up a non-existent entry at column ", par2, ", row ", par3, " of the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOTABLE: print "Attempt to blank out a row from a non-existent table (value ", par1, ").^"; RTP_TABLE_NOMOREBLANKS: print "Attempt to choose a blank row in a table with none left: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOROWS: print "Attempt to choose a random row in an entirely blank table: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_CANTRUNTHROUGH: print "Attempt to repeat through a table in a tricky column order: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_CANTSORT: print "Attempt to sort a table whose ordering must remain fixed: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_CANTSAVE: print "Attempt to save a table to a file whose data is unstable: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_WONTFIT: print "File being read has too many rows or columns to fit into table: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_BADFILE: print "File being read is not a previously saved table: table '", (PrintTableName) par1, "'.^"; RTP_NOTINAROOM: print "Attempt to test if the current location is '", (the) par1, "', which is not a room or region.^"; RTP_BADTOPIC: print "Attempt to see if a snippet of text matches something which is not a topic.^"; RTP_ROUTELESS: print "Attempt to find route or count steps through an implicit relation.^"; RTP_PROPOFNOTHING: print "Attempt to use a property of the 'nothing' non-object: property ", (PrintPropertyName) par2, "^"; RTP_DECIDEONWRONGKIND: print "Attempt to 'decide on V' where V is the wrong kind of object.^"; RTP_DECIDEONNOTHING: print "Attempt to 'decide on nothing'.^"; RTP_LOWLEVELERROR: print "Low level error.^"; RTP_DONTIGNORETURNSEQUENCE: print "Attempt to ignore the turn sequence rules.^"; RTP_SAYINVALIDSNIPPET: print "Attempt to say a snippet value which is currently invalid: words ", par1, " to ", par2, ".^"; RTP_SPLICEINVALIDSNIPPET: print "Attempt to splice a snippet value which is currently invalid: words ", par1, " to ", par2, ".^"; RTP_INCLUDEINVALIDSNIPPET: print "Attempt to match a snippet value which is currently invalid: words ", par1, " to ", par2, ".^"; RTP_LISTWRITERMEMORY: print "The list-writer has run out of memory.^"; RTP_CANTREMOVEPLAYER: print "Attempt to remove the player from play.^"; RTP_CANTREMOVEDOORS: print "Attempt to remove a door from play.^"; RTP_CANTCHANGEOFFSTAGE: print "Attempt to change the player to a person off-stage.^"; RTP_MSTACKMEMORY: print "The memory stack is exhausted.^"; RTP_TYPECHECK: print "Phrase applied to an incompatible kind of value.^"; RTP_FILEIOERROR: print "Error handling external file.^"; RTP_HEAPERROR: print "Memory allocation proved impossible.^"; RTP_LISTRANGEERROR: print "Attempt to use list item which does not exist.^"; RTP_REGEXPSYNTAXERROR: print "Syntax error in regular expression.^"; RTP_NOGLULXUNICODE: print "This interpreter does not support Unicode.^"; RTP_BACKDROPONLY: print "Only backdrops can be moved to multiple places.^"; RTP_NOTBACKDROP: print "Tried to move ", (the) par1, " (not a thing) to ", (the) par2, ", but only things can move around.^"; RTP_SCENEHASNTSTARTED: print "The scene ", (PrintSceneName) par1, " hasn't started, so you can't ask when it did.^"; RTP_SCENEHASNTENDED: print "The scene ", (PrintSceneName) par1, " hasn't ended, so you can't ask when it did.^"; RTP_NEGATIVEROOT: print "You can't take the square root of a negative number.^"; RTP_CANTITERATE: print "You can't implicitly repeat through the values of this kind: ", "a problem arising from a description which started out here - ~", (string) par1, "~.^"; RTP_WRONGASSIGNEDKIND: print "Attempt to set a variable to the wrong kind of object: ", "you wrote '", (string) par2, "', which sets the value to ", (the) par1, " - but that doesn't have the kind '", (string) par3, "'.^"; } print "^"; ]; Constant MAX_TIMERS = 0; [ RunTimeError n p1 p2; #Ifdef DEBUG; print "** Library error ", n, " (", p1, ",", p2, ") **^** "; switch (n) { 1: print "preposition not found (this should not occur)"; 2: print "Property value not routine or string: ~", (property) p2, "~ of ~", (name) p1, "~ (", p1, ")"; 3: print "Entry in property list not routine or string: ~", (property) p2, "~ list of ~", (name) p1, "~ (", p1, ")"; 4: print "Too many timers/daemons are active simultaneously. The limit is the library constant MAX_TIMERS (currently ", MAX_TIMERS, ") and should be increased"; 5: print "Object ~", (name) p1, "~ has no ~time_left~ property"; 7: print "The object ~", (name) p1, "~ can only be used as a player object if it has the ~number~ property"; 8: print "Attempt to take random entry from an empty table array"; 9: print p1, " is not a valid direction property number"; 10: print "The player-object is outside the object tree"; 11: print "The room ~", (name) p1, "~ has no ~description~ property"; 12: print "Tried to set a non-existent pronoun using SetPronoun"; 13: print "A 'topic' token can only be followed by a preposition"; default: print "(unexplained)"; } print " **^"; #Ifnot; print "** Library error ", n, " (", p1, ",", p2, ") **^"; #Endif; ! DEBUG RunTimeProblem(RTP_LOWLEVELERROR); ]; [ ArgumentTypeFailed file line arg; RunTimeProblem(RTP_TYPECHECK, 0, 0, 0, line); ]; [ CheckKindReturned V K; if (V ofclass K) return V; if (v == nothing) RunTimeProblem(RTP_DECIDEONNOTHING); else RunTimeProblem(RTP_DECIDEONWRONGKIND); return V; ]; [ WhetherProvides obj either_or p issue_rtp off i textual a l; if (metaclass(obj) ~= Object) rfalse; if (p<0) p = ~p; if (either_or) { if (p < FBNA_PROP_NUMBER) off = attributed_property_offsets-->p; else off = valued_property_offsets-->p; } else off = valued_property_offsets-->p; if (off<0) { if (issue_rtp) RunTimeProblem(RTP_BADPROPERTY, obj); rfalse; } textual = property_metadata-->off; off++; if (ScanPropertyMetadata(obj, off)) jump PermissionFound; if (obj provides KD_Count) { l = obj.KD_Count; while (l > 0) { a = l*2; if (ScanPropertyMetadata(KindHierarchy-->a, off)) jump PermissionFound; l = KindHierarchy-->(a+1); } } if (issue_rtp) RunTimeProblem(RTP_UNPROVIDED, obj, textual); rfalse; .PermissionFound; if (either_or) rtrue; if (obj provides p) rtrue; if (issue_rtp) RunTimeProblem(RTP_UNSET, obj, textual); rfalse; ]; [ PrintPropertyName p off textual; if (p<0) p = ~p; off = valued_property_offsets-->p; textual = property_metadata-->off; print (string) textual; ]; [ ScanPropertyMetadata obj off i; for (i=off: property_metadata-->i >= 0: i++) if (obj == property_metadata-->i) rtrue; rfalse; ]; [ GetEitherOrProperty o p; if (o == nothing) rfalse; if (p<0) p = ~p; if (WhetherProvides(o, true, p, false)) { if (pK; if (obj == 0) { RunTimeProblem(RTP_PROPOFNOTHING, obj, pr); rfalse; } if (obj provides pr) { if (K == OBJECT_TY) { if (pr == door_to) return obj.pr(); if (WhetherProvides(V, false, pr, true)) return obj.pr; rfalse; } if (obj ofclass K0_kind) WhetherProvides(V, false, pr, true); ! to force a run-time problem if ((V < 1) || (V > obj.value_range)) { RunTimeProblem(RTP_BADVALUEPROPERTY); return 0; } return (obj.pr)-->(V+COL_HSIZE); } else { if (obj ofclass K0_kind) WhetherProvides(V, false, pr, true); ! to force a run-time problem } rfalse; ]; [ WriteGProperty K V pr val obj; if (K == OBJECT_TY) obj = V; else obj = KOV_representatives-->K; if (obj == 0) { RunTimeProblem(RTP_PROPOFNOTHING, obj, pr); rfalse; } if (K == OBJECT_TY) { if (WhetherProvides(V, false, pr, true)) obj.pr = val; } else { if ((V < 1) || (V > obj.value_range)) return RunTimeProblem(RTP_BADVALUEPROPERTY); if (obj provides pr) { (obj.pr)-->(V+COL_HSIZE) = val; } } ]; [ PROPERTY_TY_Say v; print "property ", v; ]; Constant RULECHANGE_STACK_SIZE = 501; Global rulechange_sp = 0; Array rulechange_stack --> RULECHANGE_STACK_SIZE; [ PushRuleChange usage rule1 rule2; if (rulechange_sp >= RULECHANGE_STACK_SIZE) return RunTimeProblem(RTP_RULESTACK); if ((rulechange_stack-->rulechange_sp == RS_SUCCEEDS or RS_FAILS) && (KOVIsBlockValue(rulechange_stack-->(rulechange_sp+1)))) BlkValueDestroy(rulechange_stack-->(rulechange_sp+2)); if ((usage == RS_SUCCEEDS or RS_FAILS) && (KOVIsBlockValue(rule1))) rule2 = BlkValueCopy(BlkValueCreate(rule1), rule2); rulechange_stack-->rulechange_sp++ = usage; rulechange_stack-->rulechange_sp++ = rule1; rulechange_stack-->rulechange_sp++ = rule2; ]; Constant RS_FRAME = -1; Constant RS_DONOTRUN = 1; Constant RS_RUN = 2; Constant RS_MOVEBEFORE = 3; Constant RS_MOVEAFTER = 4; Constant RS_DONOTUSE = 5; Constant RS_USE = 6; Constant RS_SUBSTITUTE = 7; Constant RS_SUCCEEDS = 8; Constant RS_FAILS = 9; Constant RS_NEITHER = 10; Global rule_frames = 0; ! Number of frames currently in force Constant MAX_SIMULTANEOUS_FRAMES = 20; [ FollowRulebook rulebook parameter no_paragraph_skips rv; @push self; if ((Protect_I7_Arrays-->0 ~= 16339) || (Protect_I7_Arrays-->1 ~= 12345)) { print "^^*** Fatal programming error: I7 arrays corrupted ***^^"; @quit; } if (parameter) self = parameter; if (rulebook ~= PROCEDURAL_RB) BeginFollowRulebook(); rv = ProcessRulebook(rulebook, parameter, no_paragraph_skips); if (rulebook ~= PROCEDURAL_RB) EndFollowRulebook(); @pull self; if (rv) rtrue; rfalse; ]; [ BeginFollowRulebook; PushRuleChange(RS_FRAME, RS_FRAME, RS_FRAME); rule_frames++; if (rule_frames == MAX_SIMULTANEOUS_FRAMES) { RunTimeProblem(RTP_TOOMANYRULEBOOKS); rule_frames = -1; ! For recovery: this terminates rulebook processing return; } ProcessRulebook(PROCEDURAL_RB, 0, true); ]; [ EndFollowRulebook r x y; if (rulechange_stack-->rulechange_sp == RS_SUCCEEDS) r = 1; else if (rulechange_stack-->rulechange_sp == RS_FAILS) r = 0; else r = -1; if (r ~= -1) { x = rulechange_stack-->(rulechange_sp+1); y = rulechange_stack-->(rulechange_sp+2); } rule_frames--; while (rulechange_sp > 0) { rulechange_sp = rulechange_sp - 3; if (rulechange_stack-->rulechange_sp == RS_FRAME) break; } if (rulechange_sp == 0) rule_frames = 0; if (r == 1) rulechange_stack-->rulechange_sp = RS_SUCCEEDS; else if (r == 0) rulechange_stack-->rulechange_sp = RS_FAILS; if (r ~= -1) { rulechange_stack-->(rulechange_sp+1) = x; rulechange_stack-->(rulechange_sp+2) = y; } ]; Constant RS_ACTIVE_BIT = 1; Constant RS_MOVED_BIT = 2; Constant RS_USERESULT_BIT = 4; Constant RS_ACTIVITY = 8; Constant RS_NOSKIPS = 16; Constant RS_AFFECTED_BIT = 32; Global process_rulebook_count; ! Depth of processing recursion Global debugging_rules = false; ! Are we tracing rule invocations? [ ProcessRulebook rulebook parameter bits rv x frame_base substituted_rule usage original_deadflag rbaddress ra acf gc ga; if (bits) bits = RS_ACTIVITY + RS_NOSKIPS; if (say__pc & PARA_NORULEBOOKBREAKS) bits = bits | RS_NOSKIPS; if (rule_frames<0) rfalse; if (parameter) parameter_object = parameter; for (x = rulechange_sp-3: x>=0: x = x - 3) { usage = rulechange_stack-->x; if (usage == RS_FRAME) { x=x+3; break; } if (rulechange_stack-->(x+1) == rulebook) { bits = bits | (RS_AFFECTED_BIT); if (usage == RS_MOVEBEFORE or RS_MOVEAFTER) bits = bits | (RS_MOVED_BIT); } if (rulechange_stack-->(x+2) == rulebook) { bits = bits | (RS_AFFECTED_BIT); } } if (x<0) x=0; frame_base = x; if ((bits & RS_MOVED_BIT) && (rv == false)) { rfalse; } ! rv was a call parameter: it's no longer needed and is now reused bits = bits | (RS_ACTIVE_BIT + RS_USERESULT_BIT); substituted_rule = rulebook; rv = 0; if (bits & RS_AFFECTED_BIT) for (: xx; if (rulechange_stack-->(x+1) == rulebook) { if (usage == RS_DONOTRUN) bits = bits & (~RS_ACTIVE_BIT); if (usage == RS_RUN) bits = bits | (RS_ACTIVE_BIT); if (usage == RS_DONOTUSE) bits = bits & (~RS_USERESULT_BIT); if (usage == RS_USE) bits = bits | (RS_USERESULT_BIT); if (usage == RS_SUBSTITUTE) substituted_rule = rulechange_stack-->(x+2); } if ((usage == RS_MOVEBEFORE) && (rulechange_stack-->(x+2) == rulebook)) { rv = ProcessRulebook(rulechange_stack-->(x+1), parameter, (bits & RS_ACTIVITY ~= 0), true); if (rv) return rv; } } if ((bits & RS_ACTIVE_BIT) == 0) rfalse; ! We now reuse usage to keep the stack frame slimmer usage = debugging_rules; #ifndef MEMORY_ECONOMY; if (debugging_rules) DebugRulebooks(substituted_rule, parameter); #endif; ! (A routine defined in the I7 code generator) process_rulebook_count = process_rulebook_count + debugging_rules; if ((substituted_rule >= 0) && (substituted_rule < NUMBER_RULEBOOKS_CREATED)) { rbaddress = rulebooks_array-->substituted_rule; ra = rbaddress-->0; x = 0; original_deadflag = deadflag; if (ra ~= NULL) { acf = (bits & RS_ACTIVITY ~= 0); if (substituted_rule ~= ACTION_PROCESSING_RB) MStack_CreateRBVars(substituted_rule); if (ra == (-2)) { for (x=1: original_deadflag == deadflag: x++) { ra = rbaddress-->x; if (ra == NULL) break; if (gc == 0) { ga = ra; x++; gc = rbaddress-->x; if ((gc<1) || (gc>31)) { gc = 1; x--; } x++; ra = rbaddress-->x; } gc--; if (ga ~= (-2) or action) continue; if ((rv = (ProcessRulebook(ra, parameter, acf))) && (bits & RS_USERESULT_BIT)) jump NonNullResult; } } else { for (: original_deadflag == deadflag: x++) { ra = rbaddress-->x; if (ra == NULL) break; if ((rv = (ProcessRulebook(ra, parameter, acf))) && (bits & RS_USERESULT_BIT)) jump NonNullResult; } } rv = 0; .NonNullResult; if (substituted_rule ~= ACTION_PROCESSING_RB) MStack_DestroyRBVars(substituted_rule); } } else { if ((say__p) && (bits & RS_NOSKIPS == 0)) DivideParagraphPoint(); rv = indirect(substituted_rule); if (rv == 2) rv = reason_the_action_failed; else if (rv) rv = substituted_rule; } if (rv && (bits & RS_USERESULT_BIT)) { process_rulebook_count = process_rulebook_count - debugging_rules; if (process_rulebook_count < 0) process_rulebook_count = 0; #ifndef MEMORY_ECONOMY; if (debugging_rules) { spaces(2*process_rulebook_count); if (rulechange_stack-->rulechange_sp == RS_SUCCEEDS) print "[stopped: success]^"; if (rulechange_stack-->rulechange_sp == RS_FAILS) print "[stopped: fail]^"; } #endif; debugging_rules = usage; return rv; } if (bits & RS_AFFECTED_BIT) for (x=rulechange_sp-3: x>=frame_base: x = x-3) { if ((rulechange_stack-->x == RS_MOVEAFTER) && (rulechange_stack-->(x+2) == rulebook)) { rv = ProcessRulebook(rulechange_stack-->(x+1), parameter, (bits & RS_ACTIVITY ~= 0), true); if (rv) { process_rulebook_count--; debugging_rules = usage; return rv; } } } process_rulebook_count = process_rulebook_count - debugging_rules; rulechange_stack-->rulechange_sp = 0; debugging_rules = usage; rfalse; ]; [ ActRulebookSucceeds rule_id; if (rule_id) reason_the_action_failed = rule_id; RulebookSucceeds(); ]; [ ActRulebookFails rule_id; if (rule_id) reason_the_action_failed = rule_id; RulebookFails(); ]; [ RulebookSucceeds weak_kind value; PushRuleChange(RS_SUCCEEDS, weak_kind, value); rulechange_sp = rulechange_sp - 3; ]; [ RulebookFails weak_kind value; PushRuleChange(RS_FAILS, weak_kind, value); rulechange_sp = rulechange_sp - 3; ]; [ RuleHasNoOutcome; PushRuleChange(RS_NEITHER, 0, 0); rulechange_sp = rulechange_sp - 3; ]; [ SetRulebookOutcome a; rulechange_stack-->rulechange_sp = a; ]; [ RulebookOutcome a; a = rulechange_stack-->rulechange_sp; if ((a == RS_FAILS) || (a == RS_SUCCEEDS)) return a; return RS_NEITHER; ]; [ RulebookFailed; if (rulechange_stack-->rulechange_sp == RS_FAILS) rtrue; rfalse; ]; [ RulebookSucceeded; if (rulechange_stack-->rulechange_sp == RS_SUCCEEDS) rtrue; rfalse; ]; [ ResultOfRule RB V F K a; if (RB) ProcessRulebook(RB, V, F); a = rulechange_stack-->rulechange_sp; if ((a == RS_FAILS) || (a == RS_SUCCEEDS)) { a = rulechange_stack-->(rulechange_sp + 1); if (a) return rulechange_stack-->(rulechange_sp + 2); } if (K) return DefaultValueOfKOV(K); return 0; ]; Global DITS_said = false; [ SuppressRule rule; if (rule == TURN_SEQUENCE_RB) { if (DITS_said == false) RunTimeProblem(RTP_DONTIGNORETURNSEQUENCE); DITS_said = true; } else PushRuleChange(RS_DONOTRUN, rule, 0); ]; [ ReinstateRule rule; PushRuleChange(RS_RUN, rule, 0); ]; [ DonotuseRule rule; PushRuleChange(RS_DONOTUSE, rule, 0); ]; [ UseRule rule; PushRuleChange(RS_USE, rule, 0); ]; [ SubstituteRule rule1 rule2; PushRuleChange(RS_SUBSTITUTE, rule2, rule1); ]; [ MoveRuleBefore rule1 rule2; PushRuleChange(RS_MOVEBEFORE, rule1, rule2); ]; [ MoveRuleAfter rule1 rule2; PushRuleChange(RS_MOVEAFTER, rule1, rule2); ]; #IFNDEF MEMORY_ECONOMY; Array RulebookNames --> "Procedural rulebook" ! 0 "Startup rulebook" ! 1 "Turn sequence rulebook" ! 2 "Shutdown rulebook" ! 3 "Scene changing rulebook" ! 4 "When play begins rulebook" ! 5 "When play ends rulebook" ! 6 "When scene begins rulebook" ! 7 "When scene ends rulebook" ! 8 "Every turn rulebook" ! 9 "Action-processing rulebook" ! 10 "Setting action variables rulebook" ! 11 "specific action-processing rulebook" ! 12 "player's action awareness rulebook" ! 13 "Accessibility rulebook" ! 14 "Reaching inside rulebook" ! 15 "Reaching outside rulebook" ! 16 "Visibility rulebook" ! 17 "Persuasion rulebook" ! 18 "Unsuccessful attempt by rulebook" ! 19 "Before rulebook" ! 20 "Instead rulebook" ! 21 "Check rulebook" ! 22 "Carry out rulebook" ! 23 "After rulebook" ! 24 "Report rulebook" ! 25 "does the player mean rulebook" ! 26 "when Entire Game begins rulebook" ! 27 "when Entire Game ends rulebook" ! 28 "before Printing the name rulebook" ! 29 "for Printing the name rulebook" ! 30 "after Printing the name rulebook" ! 31 "before Printing the plural name rulebook" ! 32 "for Printing the plural name rulebook" ! 33 "after Printing the plural name rulebook" ! 34 "before Printing a number rulebook" ! 35 "for Printing a number rulebook" ! 36 "after Printing a number rulebook" ! 37 "before Printing room description details rulebook" ! 38 "for Printing room description details rulebook" ! 39 "after Printing room description details rulebook" ! 40 "before Listing contents rulebook" ! 41 "for Listing contents rulebook" ! 42 "after Listing contents rulebook" ! 43 "before Grouping together rulebook" ! 44 "for Grouping together rulebook" ! 45 "after Grouping together rulebook" ! 46 "before Writing a paragraph about rulebook" ! 47 "for Writing a paragraph about rulebook" ! 48 "after Writing a paragraph about rulebook" ! 49 "before Listing nondescript items rulebook" ! 50 "for Listing nondescript items rulebook" ! 51 "after Listing nondescript items rulebook" ! 52 "before Printing the name of a dark room rulebook" ! 53 "for Printing the name of a dark room rulebook" ! 54 "after Printing the name of a dark room rulebook" ! 55 "before Printing the description of a dark room rulebook" ! 56 "for Printing the description of a dark room rulebook" ! 57 "after Printing the description of a dark room rulebook" ! 58 "before Printing the announcement of darkness rulebook" ! 59 "for Printing the announcement of darkness rulebook" ! 60 "after Printing the announcement of darkness rulebook" ! 61 "before Printing the announcement of light rulebook" ! 62 "for Printing the announcement of light rulebook" ! 63 "after Printing the announcement of light rulebook" ! 64 "before Printing a refusal to act in the dark rulebook" ! 65 "for Printing a refusal to act in the dark rulebook" ! 66 "after Printing a refusal to act in the dark rulebook" ! 67 "before Constructing the status line rulebook" ! 68 "for Constructing the status line rulebook" ! 69 "after Constructing the status line rulebook" ! 70 "before Printing the banner text rulebook" ! 71 "for Printing the banner text rulebook" ! 72 "after Printing the banner text rulebook" ! 73 "before Reading a command rulebook" ! 74 "for Reading a command rulebook" ! 75 "after Reading a command rulebook" ! 76 "before Deciding the scope rulebook" ! 77 "for Deciding the scope rulebook" ! 78 "after Deciding the scope rulebook" ! 79 "before Deciding the concealed possessions rulebook" ! 80 "for Deciding the concealed possessions rulebook" ! 81 "after Deciding the concealed possessions rulebook" ! 82 "before Deciding whether all includes rulebook" ! 83 "for Deciding whether all includes rulebook" ! 84 "after Deciding whether all includes rulebook" ! 85 "before Clarifying the parser's choice rulebook" ! 86 "for Clarifying the parser's choice rulebook" ! 87 "after Clarifying the parser's choice rulebook" ! 88 "before Asking which do you mean rulebook" ! 89 "for Asking which do you mean rulebook" ! 90 "after Asking which do you mean rulebook" ! 91 "before Printing a parser error rulebook" ! 92 "for Printing a parser error rulebook" ! 93 "after Printing a parser error rulebook" ! 94 "before Supplying a missing noun rulebook" ! 95 "for Supplying a missing noun rulebook" ! 96 "after Supplying a missing noun rulebook" ! 97 "before Supplying a missing second noun rulebook" ! 98 "for Supplying a missing second noun rulebook" ! 99 "after Supplying a missing second noun rulebook" ! 100 "before Implicitly taking rulebook" ! 101 "for Implicitly taking rulebook" ! 102 "after Implicitly taking rulebook" ! 103 "before Starting the virtual machine rulebook" ! 104 "for Starting the virtual machine rulebook" ! 105 "after Starting the virtual machine rulebook" ! 106 "before Amusing a victorious player rulebook" ! 107 "for Amusing a victorious player rulebook" ! 108 "after Amusing a victorious player rulebook" ! 109 "before Printing the player's obituary rulebook" ! 110 "for Printing the player's obituary rulebook" ! 111 "after Printing the player's obituary rulebook" ! 112 "before Handling the final question rulebook" ! 113 "for Handling the final question rulebook" ! 114 "after Handling the final question rulebook" ! 115 "before Printing the locale description rulebook" ! 116 "for Printing the locale description rulebook" ! 117 "after Printing the locale description rulebook" ! 118 "before Choosing notable locale objects rulebook" ! 119 "for Choosing notable locale objects rulebook" ! 120 "after Choosing notable locale objects rulebook" ! 121 "before Printing a locale paragraph about rulebook" ! 122 "for Printing a locale paragraph about rulebook" ! 123 "after Printing a locale paragraph about rulebook" ! 124 "check Taking inventory rulebook" ! 125 "carry out Taking inventory rulebook" ! 126 "report Taking inventory rulebook" ! 127 "check Taking rulebook" ! 128 "carry out Taking rulebook" ! 129 "report Taking rulebook" ! 130 "check Removing it from rulebook" ! 131 "carry out Removing it from rulebook" ! 132 "report Removing it from rulebook" ! 133 "check Dropping rulebook" ! 134 "carry out Dropping rulebook" ! 135 "report Dropping rulebook" ! 136 "check Putting it on rulebook" ! 137 "carry out Putting it on rulebook" ! 138 "report Putting it on rulebook" ! 139 "check Inserting it into rulebook" ! 140 "carry out Inserting it into rulebook" ! 141 "report Inserting it into rulebook" ! 142 "check Eating rulebook" ! 143 "carry out Eating rulebook" ! 144 "report Eating rulebook" ! 145 "check Going rulebook" ! 146 "carry out Going rulebook" ! 147 "report Going rulebook" ! 148 "check Entering rulebook" ! 149 "carry out Entering rulebook" ! 150 "report Entering rulebook" ! 151 "check Exiting rulebook" ! 152 "carry out Exiting rulebook" ! 153 "report Exiting rulebook" ! 154 "check Getting off rulebook" ! 155 "carry out Getting off rulebook" ! 156 "report Getting off rulebook" ! 157 "check Looking rulebook" ! 158 "carry out Looking rulebook" ! 159 "report Looking rulebook" ! 160 "check Examining rulebook" ! 161 "carry out Examining rulebook" ! 162 "report Examining rulebook" ! 163 "check Looking under rulebook" ! 164 "carry out Looking under rulebook" ! 165 "report Looking under rulebook" ! 166 "check Searching rulebook" ! 167 "carry out Searching rulebook" ! 168 "report Searching rulebook" ! 169 "check Consulting it about rulebook" ! 170 "carry out Consulting it about rulebook" ! 171 "report Consulting it about rulebook" ! 172 "check Locking it with rulebook" ! 173 "carry out Locking it with rulebook" ! 174 "report Locking it with rulebook" ! 175 "check Unlocking it with rulebook" ! 176 "carry out Unlocking it with rulebook" ! 177 "report Unlocking it with rulebook" ! 178 "check Switching on rulebook" ! 179 "carry out Switching on rulebook" ! 180 "report Switching on rulebook" ! 181 "check Switching off rulebook" ! 182 "carry out Switching off rulebook" ! 183 "report Switching off rulebook" ! 184 "check Opening rulebook" ! 185 "carry out Opening rulebook" ! 186 "report Opening rulebook" ! 187 "check Closing rulebook" ! 188 "carry out Closing rulebook" ! 189 "report Closing rulebook" ! 190 "check Wearing rulebook" ! 191 "carry out Wearing rulebook" ! 192 "report Wearing rulebook" ! 193 "check Taking off rulebook" ! 194 "carry out Taking off rulebook" ! 195 "report Taking off rulebook" ! 196 "check Giving it to rulebook" ! 197 "carry out Giving it to rulebook" ! 198 "report Giving it to rulebook" ! 199 "check Showing it to rulebook" ! 200 "carry out Showing it to rulebook" ! 201 "report Showing it to rulebook" ! 202 "check Waking rulebook" ! 203 "carry out Waking rulebook" ! 204 "report Waking rulebook" ! 205 "check Throwing it at rulebook" ! 206 "carry out Throwing it at rulebook" ! 207 "report Throwing it at rulebook" ! 208 "check Attacking rulebook" ! 209 "carry out Attacking rulebook" ! 210 "report Attacking rulebook" ! 211 "check Kissing rulebook" ! 212 "carry out Kissing rulebook" ! 213 "report Kissing rulebook" ! 214 "check Answering it that rulebook" ! 215 "carry out Answering it that rulebook" ! 216 "report Answering it that rulebook" ! 217 "check Telling it about rulebook" ! 218 "carry out Telling it about rulebook" ! 219 "report Telling it about rulebook" ! 220 "check Asking it about rulebook" ! 221 "carry out Asking it about rulebook" ! 222 "report Asking it about rulebook" ! 223 "check Asking it for rulebook" ! 224 "carry out Asking it for rulebook" ! 225 "report Asking it for rulebook" ! 226 "check Waiting rulebook" ! 227 "carry out Waiting rulebook" ! 228 "report Waiting rulebook" ! 229 "check Touching rulebook" ! 230 "carry out Touching rulebook" ! 231 "report Touching rulebook" ! 232 "check Waving rulebook" ! 233 "carry out Waving rulebook" ! 234 "report Waving rulebook" ! 235 "check Pulling rulebook" ! 236 "carry out Pulling rulebook" ! 237 "report Pulling rulebook" ! 238 "check Pushing rulebook" ! 239 "carry out Pushing rulebook" ! 240 "report Pushing rulebook" ! 241 "check Turning rulebook" ! 242 "carry out Turning rulebook" ! 243 "report Turning rulebook" ! 244 "check Pushing it to rulebook" ! 245 "carry out Pushing it to rulebook" ! 246 "report Pushing it to rulebook" ! 247 "check Squeezing rulebook" ! 248 "carry out Squeezing rulebook" ! 249 "report Squeezing rulebook" ! 250 "check Saying yes rulebook" ! 251 "carry out Saying yes rulebook" ! 252 "report Saying yes rulebook" ! 253 "check Saying no rulebook" ! 254 "carry out Saying no rulebook" ! 255 "report Saying no rulebook" ! 256 "check Burning rulebook" ! 257 "carry out Burning rulebook" ! 258 "report Burning rulebook" ! 259 "check Waking up rulebook" ! 260 "carry out Waking up rulebook" ! 261 "report Waking up rulebook" ! 262 "check Thinking rulebook" ! 263 "carry out Thinking rulebook" ! 264 "report Thinking rulebook" ! 265 "check Smelling rulebook" ! 266 "carry out Smelling rulebook" ! 267 "report Smelling rulebook" ! 268 "check Listening to rulebook" ! 269 "carry out Listening to rulebook" ! 270 "report Listening to rulebook" ! 271 "check Tasting rulebook" ! 272 "carry out Tasting rulebook" ! 273 "report Tasting rulebook" ! 274 "check Cutting rulebook" ! 275 "carry out Cutting rulebook" ! 276 "report Cutting rulebook" ! 277 "check Jumping rulebook" ! 278 "carry out Jumping rulebook" ! 279 "report Jumping rulebook" ! 280 "check Tying it to rulebook" ! 281 "carry out Tying it to rulebook" ! 282 "report Tying it to rulebook" ! 283 "check Drinking rulebook" ! 284 "carry out Drinking rulebook" ! 285 "report Drinking rulebook" ! 286 "check Saying sorry rulebook" ! 287 "carry out Saying sorry rulebook" ! 288 "report Saying sorry rulebook" ! 289 "check Swearing obscenely rulebook" ! 290 "carry out Swearing obscenely rulebook" ! 291 "report Swearing obscenely rulebook" ! 292 "check Swearing mildly rulebook" ! 293 "carry out Swearing mildly rulebook" ! 294 "report Swearing mildly rulebook" ! 295 "check Swinging rulebook" ! 296 "carry out Swinging rulebook" ! 297 "report Swinging rulebook" ! 298 "check Rubbing rulebook" ! 299 "carry out Rubbing rulebook" ! 300 "report Rubbing rulebook" ! 301 "check Setting it to rulebook" ! 302 "carry out Setting it to rulebook" ! 303 "report Setting it to rulebook" ! 304 "check Waving hands rulebook" ! 305 "carry out Waving hands rulebook" ! 306 "report Waving hands rulebook" ! 307 "check Buying rulebook" ! 308 "carry out Buying rulebook" ! 309 "report Buying rulebook" ! 310 "check Singing rulebook" ! 311 "carry out Singing rulebook" ! 312 "report Singing rulebook" ! 313 "check Climbing rulebook" ! 314 "carry out Climbing rulebook" ! 315 "report Climbing rulebook" ! 316 "check Sleeping rulebook" ! 317 "carry out Sleeping rulebook" ! 318 "report Sleeping rulebook" ! 319 "check Quitting the game rulebook" ! 320 "carry out Quitting the game rulebook" ! 321 "report Quitting the game rulebook" ! 322 "check Saving the game rulebook" ! 323 "carry out Saving the game rulebook" ! 324 "report Saving the game rulebook" ! 325 "check Restoring the game rulebook" ! 326 "carry out Restoring the game rulebook" ! 327 "report Restoring the game rulebook" ! 328 "check Restarting the game rulebook" ! 329 "carry out Restarting the game rulebook" ! 330 "report Restarting the game rulebook" ! 331 "check Verifying the story file rulebook" ! 332 "carry out Verifying the story file rulebook" ! 333 "report Verifying the story file rulebook" ! 334 "check Switching the story transcript on rulebook" ! 335 "carry out Switching the story transcript on rulebook" ! 336 "report Switching the story transcript on rulebook" ! 337 "check Switching the story transcript off rulebook" ! 338 "carry out Switching the story transcript off rulebook" ! 339 "report Switching the story transcript off rulebook" ! 340 "check Requesting the story file version rulebook" ! 341 "carry out Requesting the story file version rulebook" ! 342 "report Requesting the story file version rulebook" ! 343 "check Requesting the score rulebook" ! 344 "carry out Requesting the score rulebook" ! 345 "report Requesting the score rulebook" ! 346 "check Preferring abbreviated room descriptions rulebook" ! 347 "carry out Preferring abbreviated room descriptions rulebook" ! 348 "report Preferring abbreviated room descriptions rulebook" ! 349 "check Preferring unabbreviated room descriptions rulebook" ! 350 "carry out Preferring unabbreviated room descriptions rulebook" ! 351 "report Preferring unabbreviated room descriptions rulebook" ! 352 "check Preferring sometimes abbreviated room descriptions rulebook" ! 353 "carry out Preferring sometimes abbreviated room descriptions rulebook" ! 354 "report Preferring sometimes abbreviated room descriptions rulebook" ! 355 "check Switching score notification on rulebook" ! 356 "carry out Switching score notification on rulebook" ! 357 "report Switching score notification on rulebook" ! 358 "check Switching score notification off rulebook" ! 359 "carry out Switching score notification off rulebook" ! 360 "report Switching score notification off rulebook" ! 361 "check Requesting the pronoun meanings rulebook" ! 362 "carry out Requesting the pronoun meanings rulebook" ! 363 "report Requesting the pronoun meanings rulebook" ! 364 "before Displaying rulebook" ! 365 "for Displaying rulebook" ! 366 "after Displaying rulebook" ! 367 "check Requesting epistemic status of rulebook" ! 368 "carry out Requesting epistemic status of rulebook" ! 369 "report Requesting epistemic status of rulebook" ! 370 "glulx timed activity rulebook" ! 371 "glulx redrawing rulebook" ! 372 "glulx arranging rulebook" ! 373 "glulx sound notification rulebook" ! 374 "glulx mouse input rulebook" ! 375 "glulx character input rulebook" ! 376 "glulx line input rulebook" ! 377 "glulx hyperlink rulebook" ! 378 "glulx zeroing-reference rulebook" ! 379 "glulx resetting-windows rulebook" ! 380 "glulx resetting-streams rulebook" ! 381 "glulx resetting-filerefs rulebook" ! 382 "glulx object-updating rulebook" ! 383 "command-counting rulebook" ! 384 "input-cancelling rulebook" ! 385 "command-showing rulebook" ! 386 "command-pasting rulebook" ! 387 "before Cloning a new object from rulebook" ! 388 "for Cloning a new object from rulebook" ! 389 "after Cloning a new object from rulebook" ! 390 "before Restoring from a saved game rulebook" ! 391 "for Restoring from a saved game rulebook" ! 392 "after Restoring from a saved game rulebook" ! 393 "before Failing to restore from a saved game rulebook" ! 394 "for Failing to restore from a saved game rulebook" ! 395 "after Failing to restore from a saved game rulebook" ! 396 "before Automatically saving the game rulebook" ! 397 "for Automatically saving the game rulebook" ! 398 "after Automatically saving the game rulebook" ! 399 "before Failing to automatically save the game rulebook" ! 400 "for Failing to automatically save the game rulebook" ! 401 "after Failing to automatically save the game rulebook" ! 402 "before Failing to delete a saved game rulebook" ! 403 "for Failing to delete a saved game rulebook" ! 404 "after Failing to delete a saved game rulebook" ! 405 "hate rulebook" ! 406 "combat round rulebook" ! 407 "starting the combat round rulebook" ! 408 "before Running the parser rulebook" ! 409 "for Running the parser rulebook" ! 410 "after Running the parser rulebook" ! 411 "initiative update rulebook" ! 412 "Standard AI rulebook" ! 413 "check Switching weightings on rulebook" ! 414 "carry out Switching weightings on rulebook" ! 415 "report Switching weightings on rulebook" ! 416 "check Switching weightings off rulebook" ! 417 "carry out Switching weightings off rulebook" ! 418 "report Switching weightings off rulebook" ! 419 "AI target selection rulebook" ! 420 "AI action selection rulebook" ! 421 "check Checking the numbers boolean rulebook" ! 422 "carry out Checking the numbers boolean rulebook" ! 423 "report Checking the numbers boolean rulebook" ! 424 "check Switching the numbers off rulebook" ! 425 "carry out Switching the numbers off rulebook" ! 426 "report Switching the numbers off rulebook" ! 427 "check Switching the numbers on rulebook" ! 428 "carry out Switching the numbers on rulebook" ! 429 "report Switching the numbers on rulebook" ! 430 "after reporting rulebook" ! 431 "check Hitting rulebook" ! 432 "carry out Hitting rulebook" ! 433 "report Hitting rulebook" ! 434 "attack modifier rulebook" ! 435 "contact rulebook" ! 436 "damage modifier rulebook" ! 437 "damage multiplier rulebook" ! 438 "aftereffects rulebook" ! 439 "check Readying rulebook" ! 440 "carry out Readying rulebook" ! 441 "report Readying rulebook" ! 442 "check Concentrating rulebook" ! 443 "carry out Concentrating rulebook" ! 444 "report Concentrating rulebook" ! 445 "lose concentration prose rulebook" ! 446 "check Parrying rulebook" ! 447 "carry out Parrying rulebook" ! 448 "report Parrying rulebook" ! 449 "check Dodging rulebook" ! 450 "carry out Dodging rulebook" ! 451 "report Dodging rulebook" ! 452 "AI weapon selection rulebook" ! 453 "chance to win rulebook" ! 454 "further generation rulebook" ! 455 "resetting the map rulebook" ! 456 "creating the map rulebook" ! 457 "additional placement rulebook" ! 458 "placement possible rulebook" ! 459 "placement scoring rulebook" ! 460 "final monster placement rulebook" ! 461 "monster placement possible rulebook" ! 462 "monster placement scoring rulebook" ! 463 "treasure placement rulebook" ! 464 "treasure scoring rulebook" ! 465 "dungeon interest rulebook" ! 466 "dungeon finish rulebook" ! 467 "falling destination rulebook" ! 468 "preempt falling rulebook" ! 469 "falling rulebook" ! 470 "fragmentation rulebook" ! 471 "killing rulebook" ! 472 "shatter rulebook" ! 473 "teleportation event rulebook" ! 474 "ability test rulebook" ! 475 "perception test rulebook" ! 476 "dexterity test rulebook" ! 477 "willpower test rulebook" ! 478 "check Digging rulebook" ! 479 "carry out Digging rulebook" ! 480 "report Digging rulebook" ! 481 "check Collapsing rulebook" ! 482 "carry out Collapsing rulebook" ! 483 "report Collapsing rulebook" ! 484 "Absorbing rulebook" ! 485 "Repelling rulebook" ! 486 "absorption stopping rulebook" ! 487 "flying rulebook" ! 488 "blindness rulebook" ! 489 "check Healing rulebook" ! 490 "carry out Healing rulebook" ! 491 "report Healing rulebook" ! 492 "check Teleporting rulebook" ! 493 "carry out Teleporting rulebook" ! 494 "report Teleporting rulebook" ! 495 "teleport impossible rulebook" ! 496 "special teleportation destination rulebook" ! 497 "check Disintegrating rulebook" ! 498 "carry out Disintegrating rulebook" ! 499 "report Disintegrating rulebook" ! 500 "followers rulebook" ! 501 "beloved of Aite rulebook" ! 502 "heat resistance rulebook" ! 503 "rusting rulebook" ! 504 "corroding rulebook" ! 505 "sudden combat reset rulebook" ! 506 "impeded movement rulebook" ! 507 "physical damage reduction rulebook" ! 508 "falling-test rulebook" ! 509 "check Turning bat rulebook" ! 510 "carry out Turning bat rulebook" ! 511 "report Turning bat rulebook" ! 512 "check Turning vampire rulebook" ! 513 "carry out Turning vampire rulebook" ! 514 "report Turning vampire rulebook" ! 515 "detection rulebook" ! 516 "smoke rulebook" ! 517 "smoke immunity rulebook" ! 518 "check Inhaling rulebook" ! 519 "carry out Inhaling rulebook" ! 520 "report Inhaling rulebook" ! 521 "check Throwing rulebook" ! 522 "carry out Throwing rulebook" ! 523 "report Throwing rulebook" ! 524 "check Applying it to rulebook" ! 525 "carry out Applying it to rulebook" ! 526 "report Applying it to rulebook" ! 527 "check Spraying rulebook" ! 528 "carry out Spraying rulebook" ! 529 "report Spraying rulebook" ! 530 "check Reading rulebook" ! 531 "carry out Reading rulebook" ! 532 "report Reading rulebook" ! 533 "unholy wave rulebook" ! 534 "check Snorting rulebook" ! 535 "carry out Snorting rulebook" ! 536 "report Snorting rulebook" ! 537 "extra scoring rulebook" ! 538 "check Piercing rulebook" ! 539 "carry out Piercing rulebook" ! 540 "report Piercing rulebook" ! 541 "check Armadillo-eating rulebook" ! 542 "carry out Armadillo-eating rulebook" ! 543 "report Armadillo-eating rulebook" ! 544 "check Scaling rulebook" ! 545 "carry out Scaling rulebook" ! 546 "report Scaling rulebook" ! 547 "check Stunning rulebook" ! 548 "carry out Stunning rulebook" ! 549 "report Stunning rulebook" ! 550 "check Golem-disarming rulebook" ! 551 "carry out Golem-disarming rulebook" ! 552 "report Golem-disarming rulebook" ! 553 "check Lashing rulebook" ! 554 "carry out Lashing rulebook" ! 555 "report Lashing rulebook" ! 556 "check Reaping rulebook" ! 557 "carry out Reaping rulebook" ! 558 "report Reaping rulebook" ! 559 "check Mindblasting rulebook" ! 560 "carry out Mindblasting rulebook" ! 561 "report Mindblasting rulebook" ! 562 "check Dominating rulebook" ! 563 "carry out Dominating rulebook" ! 564 "report Dominating rulebook" ! 565 "check Tentacle-constricting rulebook" ! 566 "carry out Tentacle-constricting rulebook" ! 567 "report Tentacle-constricting rulebook" ! 568 "check Tentacle-shaking rulebook" ! 569 "carry out Tentacle-shaking rulebook" ! 570 "report Tentacle-shaking rulebook" ! 571 "check Confusing rulebook" ! 572 "carry out Confusing rulebook" ! 573 "report Confusing rulebook" ! 574 "check Bodmall-fogging rulebook" ! 575 "carry out Bodmall-fogging rulebook" ! 576 "report Bodmall-fogging rulebook" ! 577 "check Bodmall-transmuting rulebook" ! 578 "carry out Bodmall-transmuting rulebook" ! 579 "report Bodmall-transmuting rulebook" ! 580 "check Bodmall-barkskinning rulebook" ! 581 "carry out Bodmall-barkskinning rulebook" ! 582 "report Bodmall-barkskinning rulebook" ! 583 "check Bodmall-summoning rulebook" ! 584 "carry out Bodmall-summoning rulebook" ! 585 "report Bodmall-summoning rulebook" ! 586 "check Summoning thorns rulebook" ! 587 "carry out Summoning thorns rulebook" ! 588 "report Summoning thorns rulebook" ! 589 "check Unghouling rulebook" ! 590 "carry out Unghouling rulebook" ! 591 "report Unghouling rulebook" ! 592 "check Aswang-shifting rulebook" ! 593 "carry out Aswang-shifting rulebook" ! 594 "report Aswang-shifting rulebook" ! 595 "check Aswang-hexing rulebook" ! 596 "carry out Aswang-hexing rulebook" ! 597 "report Aswang-hexing rulebook" ! 598 "check Aswang-fleeing rulebook" ! 599 "carry out Aswang-fleeing rulebook" ! 600 "report Aswang-fleeing rulebook" ! 601 "check Pulsating rulebook" ! 602 "carry out Pulsating rulebook" ! 603 "report Pulsating rulebook" ! 604 "check Imping rulebook" ! 605 "carry out Imping rulebook" ! 606 "report Imping rulebook" ! 607 "check Imp-grabbing rulebook" ! 608 "carry out Imp-grabbing rulebook" ! 609 "report Imp-grabbing rulebook" ! 610 "check Retreating rulebook" ! 611 "carry out Retreating rulebook" ! 612 "report Retreating rulebook" ! 613 "check Going to rulebook" ! 614 "carry out Going to rulebook" ! 615 "report Going to rulebook" ! 616 "check Shorter going to rulebook" ! 617 "carry out Shorter going to rulebook" ! 618 "report Shorter going to rulebook" ! 619 "check Asking status rulebook" ! 620 "carry out Asking status rulebook" ! 621 "report Asking status rulebook" ! 622 "status rulebook" ! 623 "status skill rulebook" ! 624 "check Remembering rulebook" ! 625 "carry out Remembering rulebook" ! 626 "report Remembering rulebook" ! 627 "check Sensing rulebook" ! 628 "carry out Sensing rulebook" ! 629 "report Sensing rulebook" ! 630 "check Trophylisting rulebook" ! 631 "carry out Trophylisting rulebook" ! 632 "report Trophylisting rulebook" ! 633 "check Showing commands rulebook" ! 634 "carry out Showing commands rulebook" ! 635 "report Showing commands rulebook" ! 636 "check Praying rulebook" ! 637 "carry out Praying rulebook" ! 638 "report Praying rulebook" ! 639 "check Direction-jumping rulebook" ! 640 "carry out Direction-jumping rulebook" ! 641 "report Direction-jumping rulebook" ! 642 "check Equipping rulebook" ! 643 "carry out Equipping rulebook" ! 644 "report Equipping rulebook" ! 645 "check Talking to rulebook" ! 646 "carry out Talking to rulebook" ! 647 "report Talking to rulebook" ! 648 "check Plunking rulebook" ! 649 "carry out Plunking rulebook" ! 650 "report Plunking rulebook" ! 651 "check Plonking rulebook" ! 652 "carry out Plonking rulebook" ! 653 "report Plonking rulebook" ! 654 "check Ramboing rulebook" ! 655 "carry out Ramboing rulebook" ! 656 "report Ramboing rulebook" ! 657 "check Meatboying rulebook" ! 658 "carry out Meatboying rulebook" ! 659 "report Meatboying rulebook" ! 660 "check Reducing rulebook" ! 661 "carry out Reducing rulebook" ! 662 "report Reducing rulebook" ! 663 "check Testreadying rulebook" ! 664 "carry out Testreadying rulebook" ! 665 "report Testreadying rulebook" ! 666 "victory message rulebook" ! 667 "check Asking for help rulebook" ! 668 "carry out Asking for help rulebook" ! 669 "report Asking for help rulebook" ! 670 "check Achievemenuing rulebook" ! 671 "carry out Achievemenuing rulebook" ! 672 "report Achievemenuing rulebook" ! 673 ; #ENDIF; ! MEMORY_ECONOMY [ RulePrintingRule R p1; #ifndef MEMORY_ECONOMY; if ((R>=0) && (RR); } else { if (R == R_8) { print "start in the correct scenes rule"; return; } ! 0, case 1 if (R == R_9) { print "when play begins stage rule"; return; } ! 1, case 1 if (R == R_10) { print "fix baseline scoring rule"; return; } ! 2, case 1 if (R == R_11) { print "display banner rule"; return; } ! 3, case 1 if (R == R_12) { print "initial room description rule"; return; } ! 4, case 1 if (R == R_13) { print "every turn stage rule"; return; } ! 5, case 1 if (R == R_16) { print "notify score changes rule"; return; } ! 6, case 1 if (R == R_17) { print "when play ends stage rule"; return; } ! 7, case 1 if (R == R_18) { print "print player's obituary rule"; return; } ! 8, case 1 if (R == R_19) { print "set pronouns from items from multiple object lists rule"; return; } ! 9, case 1 if (R == R_20) { print "announce items from multiple object lists rule"; return; } ! 10, case 1 if (R == R_21) { print "before stage rule"; return; } ! 11, case 1 if (R == R_22) { print "instead stage rule"; return; } ! 12, case 1 if (R == R_23) { print "end action-processing in success rule"; return; } ! 13, case 1 if (R == R_24) { print "investigate player's awareness before action rule"; return; } ! 14, case 1 if (R == R_25) { print "check stage rule"; return; } ! 15, case 1 if (R == R_26) { print "carry out stage rule"; return; } ! 16, case 1 if (R == R_27) { print "after stage rule"; return; } ! 17, case 1 if (R == R_28) { print "investigate player's awareness after action rule"; return; } ! 18, case 1 if (R == R_29) { print "report stage rule"; return; } ! 19, case 1 if (R == R_31) { print "player aware of his own actions rule"; return; } ! 20, case 1 if (R == R_32) { print "player aware of actions by visible actors rule"; return; } ! 21, case 1 if (R == R_33) { print "player aware of actions on visible nouns rule"; return; } ! 22, case 1 if (R == R_34) { print "player aware of actions on visible second nouns rule"; return; } ! 23, case 1 if (R == R_35) { print "can't act in the dark rule"; return; } ! 24, case 1 if (R == R_36) { print "very unlikely to mean taking what's already carried rule"; return; } ! 25, case 1 if (R == R_57) { print "scene description text rule"; return; } ! 26, case 1 if (R == R_58) { print "make named things mentioned rule"; return; } ! 27, case 1 if (R == R_59) { print "standard printing the plural name rule"; return; } ! 28, case 1 if (R == R_60) { print "standard printing a number of something rule"; return; } ! 29, case 1 if (R == R_61) { print "look around once light available rule"; return; } ! 30, case 1 if (R == R_62) { print "exclude scenery from take all rule"; return; } ! 31, case 1 if (R == R_63) { print "exclude people from take all rule"; return; } ! 32, case 1 if (R == R_64) { print "exclude fixed in place things from take all rule"; return; } ! 33, case 1 if (R == R_65) { print "ambient odour rule"; return; } ! 34, case 1 if (R == R_66) { print "ambient sound rule"; return; } ! 35, case 1 if (R == R_67) { print "block vaguely going rule"; return; } ! 36, case 1 if (R == R_68) { print "print the final prompt rule"; return; } ! 37, case 1 if (R == R_69) { print "print the final question rule"; return; } ! 38, case 1 if (R == R_70) { print "standard respond to final question rule"; return; } ! 39, case 1 if (R == R_73) { print "initialise locale description rule"; return; } ! 40, case 1 if (R == R_74) { print "find notable locale objects rule"; return; } ! 41, case 1 if (R == R_75) { print "interesting locale paragraphs rule"; return; } ! 42, case 1 if (R == R_76) { print "you-can-also-see rule"; return; } ! 43, case 1 if (R == R_77) { print "standard notable locale objects rule"; return; } ! 44, case 1 if (R == R_78) { print "don't mention player's supporter in room descriptions rule"; return; } ! 45, case 1 if (R == R_79) { print "don't mention scenery in room descriptions rule"; return; } ! 46, case 1 if (R == R_80) { print "don't mention undescribed items in room descriptions rule"; return; } ! 47, case 1 if (R == R_81) { print "set pronouns from items in room descriptions rule"; return; } ! 48, case 1 if (R == R_82) { print "offer items to writing a paragraph about rule"; return; } ! 49, case 1 if (R == R_83) { print "use initial appearance in room descriptions rule"; return; } ! 50, case 1 if (R == R_85) { print "describe what's on scenery supporters in room descriptions rule"; return; } ! 51, case 1 if (R == R_86) { print "print empty inventory rule"; return; } ! 52, case 1 if (R == R_87) { print "print standard inventory rule"; return; } ! 53, case 1 if (R == R_88) { print "report other people taking inventory rule"; return; } ! 54, case 1 if (R == R_89) { print "can't take yourself rule"; return; } ! 55, case 1 if (R == R_90) { print "can't take other people rule"; return; } ! 56, case 1 if (R == R_91) { print "can't take component parts rule"; return; } ! 57, case 1 if (R == R_92) { print "can't take people's possessions rule"; return; } ! 58, case 1 if (R == R_93) { print "can't take items out of play rule"; return; } ! 59, case 1 if (R == R_94) { print "can't take what you're inside rule"; return; } ! 60, case 1 if (R == R_95) { print "can't take what's already taken rule"; return; } ! 61, case 1 if (R == R_96) { print "can't take scenery rule"; return; } ! 62, case 1 if (R == R_97) { print "can only take things rule"; return; } ! 63, case 1 if (R == R_98) { print "can't take what's fixed in place rule"; return; } ! 64, case 1 if (R == R_99) { print "use player's holdall to avoid exceeding carrying capacity rule"; return; } ! 65, case 1 if (R == R_100) { print "can't exceed carrying capacity rule"; return; } ! 66, case 1 if (R == R_101) { print "standard taking rule"; return; } ! 67, case 1 if (R == R_102) { print "standard report taking rule"; return; } ! 68, case 1 if (R == R_103) { print "can't remove what's not inside rule"; return; } ! 69, case 1 if (R == R_104) { print "can't remove from people rule"; return; } ! 70, case 1 if (R == R_105) { print "convert remove to take rule"; return; } ! 71, case 1 if (R == R_106) { print "can't drop yourself rule"; return; } ! 72, case 1 if (R == R_107) { print "can't drop what's already dropped rule"; return; } ! 73, case 1 if (R == R_108) { print "can't drop what's not held rule"; return; } ! 74, case 1 if (R == R_109) { print "can't drop clothes being worn rule"; return; } ! 75, case 1 if (R == R_110) { print "can't drop if this exceeds carrying capacity rule"; return; } ! 76, case 1 if (R == R_111) { print "standard dropping rule"; return; } ! 77, case 1 if (R == R_112) { print "standard report dropping rule"; return; } ! 78, case 1 if (R == R_113) { print "convert put to drop where possible rule"; return; } ! 79, case 1 if (R == R_114) { print "can't put what's not held rule"; return; } ! 80, case 1 if (R == R_115) { print "can't put something on itself rule"; return; } ! 81, case 1 if (R == R_116) { print "can't put onto what's not a supporter rule"; return; } ! 82, case 1 if (R == R_117) { print "can't put onto something being carried rule"; return; } ! 83, case 1 if (R == R_118) { print "can't put clothes being worn rule"; return; } ! 84, case 1 if (R == R_119) { print "can't put if this exceeds carrying capacity rule"; return; } ! 85, case 1 if (R == R_120) { print "standard putting rule"; return; } ! 86, case 1 if (R == R_121) { print "concise report putting rule"; return; } ! 87, case 1 if (R == R_122) { print "standard report putting rule"; return; } ! 88, case 1 if (R == R_123) { print "convert insert to drop where possible rule"; return; } ! 89, case 1 if (R == R_124) { print "can't insert what's not held rule"; return; } ! 90, case 1 if (R == R_125) { print "can't insert something into itself rule"; return; } ! 91, case 1 if (R == R_126) { print "can't insert into closed containers rule"; return; } ! 92, case 1 if (R == R_127) { print "can't insert into what's not a container rule"; return; } ! 93, case 1 if (R == R_128) { print "can't insert clothes being worn rule"; return; } ! 94, case 1 if (R == R_129) { print "can't insert if this exceeds carrying capacity rule"; return; } ! 95, case 1 if (R == R_130) { print "standard inserting rule"; return; } ! 96, case 1 if (R == R_131) { print "concise report inserting rule"; return; } ! 97, case 1 if (R == R_132) { print "standard report inserting rule"; return; } ! 98, case 1 if (R == R_133) { print "can't eat unless edible rule"; return; } ! 99, case 1 if (R == R_134) { print "can't eat clothing without removing it first rule"; return; } ! 100, case 1 if (R == R_135) { print "standard eating rule"; return; } ! 101, case 1 if (R == R_136) { print "standard report eating rule"; return; } ! 102, case 1 if (R == R_137) { print "standard set going variables rule"; return; } ! 103, case 1 if (R == R_138) { print "stand up before going rule"; return; } ! 104, case 1 if (R == R_139) { print "can't travel in what's not a vehicle rule"; return; } ! 105, case 1 if (R == R_140) { print "can't go through undescribed doors rule"; return; } ! 106, case 1 if (R == R_141) { print "can't go through closed doors rule"; return; } ! 107, case 1 if (R == R_142) { print "determine map connection rule"; return; } ! 108, case 1 if (R == R_143) { print "can't go that way rule"; return; } ! 109, case 1 if (R == R_144) { print "move player and vehicle rule"; return; } ! 110, case 1 if (R == R_145) { print "move floating objects rule"; return; } ! 111, case 1 if (R == R_146) { print "check light in new location rule"; return; } ! 112, case 1 if (R == R_147) { print "describe room gone into rule"; return; } ! 113, case 1 if (R == R_148) { print "find what to enter rule"; return; } ! 114, case 1 if (R == R_149) { print "convert enter door into go rule"; return; } ! 115, case 1 if (R == R_150) { print "convert enter compass direction into go rule"; return; } ! 116, case 1 if (R == R_151) { print "can't enter what's already entered rule"; return; } ! 117, case 1 if (R == R_152) { print "can't enter what's not enterable rule"; return; } ! 118, case 1 if (R == R_153) { print "can't enter closed containers rule"; return; } ! 119, case 1 if (R == R_154) { print "can't enter something carried rule"; return; } ! 120, case 1 if (R == R_155) { print "implicitly pass through other barriers rule"; return; } ! 121, case 1 if (R == R_156) { print "standard entering rule"; return; } ! 122, case 1 if (R == R_157) { print "standard report entering rule"; return; } ! 123, case 1 if (R == R_158) { print "describe contents entered into rule"; return; } ! 124, case 1 if (R == R_160) { print "convert exit into go out rule"; return; } ! 125, case 1 if (R == R_161) { print "can't exit when not inside anything rule"; return; } ! 126, case 1 if (R == R_162) { print "can't exit closed containers rule"; return; } ! 127, case 1 if (R == R_163) { print "convert exit into get off rule"; return; } ! 128, case 1 if (R == R_164) { print "standard exiting rule"; return; } ! 129, case 1 if (R == R_165) { print "standard report exiting rule"; return; } ! 130, case 1 if (R == R_166) { print "describe room emerged into rule"; return; } ! 131, case 1 if (R == R_167) { print "can't get off things rule"; return; } ! 132, case 1 if (R == R_168) { print "standard getting off rule"; return; } ! 133, case 1 if (R == R_169) { print "standard report getting off rule"; return; } ! 134, case 1 if (R == R_170) { print "describe room stood up into rule"; return; } ! 135, case 1 if (R == R_171) { print "determine visibility ceiling rule"; return; } ! 136, case 1 if (R == R_172) { print "room description heading rule"; return; } ! 137, case 1 if (R == R_173) { print "room description body text rule"; return; } ! 138, case 1 if (R == R_174) { print "room description paragraphs about objects rule"; return; } ! 139, case 1 if (R == R_175) { print "check new arrival rule"; return; } ! 140, case 1 if (R == R_176) { print "other people looking rule"; return; } ! 141, case 1 if (R == R_177) { print "standard examining rule"; return; } ! 142, case 1 if (R == R_178) { print "examine directions rule"; return; } ! 143, case 1 if (R == R_179) { print "examine containers rule"; return; } ! 144, case 1 if (R == R_180) { print "examine supporters rule"; return; } ! 145, case 1 if (R == R_181) { print "examine devices rule"; return; } ! 146, case 1 if (R == R_182) { print "examine undescribed things rule"; return; } ! 147, case 1 if (R == R_183) { print "report other people examining rule"; return; } ! 148, case 1 if (R == R_184) { print "standard looking under rule"; return; } ! 149, case 1 if (R == R_185) { print "report other people looking under rule"; return; } ! 150, case 1 if (R == R_186) { print "can't search unless container or supporter rule"; return; } ! 151, case 1 if (R == R_187) { print "can't search closed opaque containers rule"; return; } ! 152, case 1 if (R == R_188) { print "standard search containers rule"; return; } ! 153, case 1 if (R == R_189) { print "standard search supporters rule"; return; } ! 154, case 1 if (R == R_190) { print "report other people searching rule"; return; } ! 155, case 1 if (R == R_191) { print "block consulting rule"; return; } ! 156, case 1 if (R == R_192) { print "can't lock without a lock rule"; return; } ! 157, case 1 if (R == R_193) { print "can't lock what's already locked rule"; return; } ! 158, case 1 if (R == R_194) { print "can't lock what's open rule"; return; } ! 159, case 1 if (R == R_195) { print "can't lock without the correct key rule"; return; } ! 160, case 1 if (R == R_196) { print "standard locking rule"; return; } ! 161, case 1 if (R == R_197) { print "standard report locking rule"; return; } ! 162, case 1 if (R == R_198) { print "can't unlock without a lock rule"; return; } ! 163, case 1 if (R == R_199) { print "can't unlock what's already unlocked rule"; return; } ! 164, case 1 if (R == R_200) { print "can't unlock without the correct key rule"; return; } ! 165, case 1 if (R == R_201) { print "standard unlocking rule"; return; } ! 166, case 1 if (R == R_202) { print "standard report unlocking rule"; return; } ! 167, case 1 if (R == R_203) { print "can't switch on unless switchable rule"; return; } ! 168, case 1 if (R == R_204) { print "can't switch on what's already on rule"; return; } ! 169, case 1 if (R == R_205) { print "standard switching on rule"; return; } ! 170, case 1 if (R == R_206) { print "standard report switching on rule"; return; } ! 171, case 1 if (R == R_207) { print "can't switch off unless switchable rule"; return; } ! 172, case 1 if (R == R_208) { print "can't switch off what's already off rule"; return; } ! 173, case 1 if (R == R_209) { print "standard switching off rule"; return; } ! 174, case 1 if (R == R_210) { print "standard report switching off rule"; return; } ! 175, case 1 if (R == R_211) { print "can't open unless openable rule"; return; } ! 176, case 1 if (R == R_212) { print "can't open what's locked rule"; return; } ! 177, case 1 if (R == R_213) { print "can't open what's already open rule"; return; } ! 178, case 1 if (R == R_214) { print "standard opening rule"; return; } ! 179, case 1 if (R == R_215) { print "reveal any newly visible interior rule"; return; } ! 180, case 1 if (R == R_216) { print "standard report opening rule"; return; } ! 181, case 1 if (R == R_217) { print "can't close unless openable rule"; return; } ! 182, case 1 if (R == R_218) { print "can't close what's already closed rule"; return; } ! 183, case 1 if (R == R_219) { print "standard closing rule"; return; } ! 184, case 1 if (R == R_220) { print "standard report closing rule"; return; } ! 185, case 1 if (R == R_221) { print "can't wear what's not clothing rule"; return; } ! 186, case 1 if (R == R_222) { print "can't wear what's not held rule"; return; } ! 187, case 1 if (R == R_223) { print "can't wear what's already worn rule"; return; } ! 188, case 1 if (R == R_224) { print "standard wearing rule"; return; } ! 189, case 1 if (R == R_225) { print "standard report wearing rule"; return; } ! 190, case 1 if (R == R_226) { print "can't take off what's not worn rule"; return; } ! 191, case 1 if (R == R_227) { print "standard taking off rule"; return; } ! 192, case 1 if (R == R_228) { print "standard report taking off rule"; return; } ! 193, case 1 if (R == R_229) { print "can't give what you haven't got rule"; return; } ! 194, case 1 if (R == R_230) { print "can't give to yourself rule"; return; } ! 195, case 1 if (R == R_231) { print "can't give to a non-person rule"; return; } ! 196, case 1 if (R == R_232) { print "can't give clothes being worn rule"; return; } ! 197, case 1 if (R == R_233) { print "block giving rule"; return; } ! 198, case 1 if (R == R_234) { print "standard giving rule"; return; } ! 199, case 1 if (R == R_235) { print "standard report giving rule"; return; } ! 200, case 1 if (R == R_236) { print "can't show what you haven't got rule"; return; } ! 201, case 1 if (R == R_237) { print "convert show to yourself to examine rule"; return; } ! 202, case 1 if (R == R_238) { print "block showing rule"; return; } ! 203, case 1 if (R == R_239) { print "block waking rule"; return; } ! 204, case 1 if (R == R_240) { print "implicitly remove thrown clothing rule"; return; } ! 205, case 1 if (R == R_241) { print "futile to throw things at inanimate objects rule"; return; } ! 206, case 1 if (R == R_242) { print "block throwing at rule"; return; } ! 207, case 1 if (R == R_243) { print "block attacking rule"; return; } ! 208, case 1 if (R == R_244) { print "kissing yourself rule"; return; } ! 209, case 1 if (R == R_245) { print "block kissing rule"; return; } ! 210, case 1 if (R == R_246) { print "block answering rule"; return; } ! 211, case 1 if (R == R_247) { print "telling yourself rule"; return; } ! 212, case 1 if (R == R_248) { print "block telling rule"; return; } ! 213, case 1 if (R == R_249) { print "block asking rule"; return; } ! 214, case 1 if (R == R_250) { print "asking yourself for something rule"; return; } ! 215, case 1 if (R == R_251) { print "translate asking for to giving rule"; return; } ! 216, case 1 if (R == R_252) { print "standard report waiting rule"; return; } ! 217, case 1 if (R == R_253) { print "report touching yourself rule"; return; } ! 218, case 1 if (R == R_254) { print "report touching other people rule"; return; } ! 219, case 1 if (R == R_255) { print "report touching things rule"; return; } ! 220, case 1 if (R == R_256) { print "can't wave what's not held rule"; return; } ! 221, case 1 if (R == R_257) { print "report waving things rule"; return; } ! 222, case 1 if (R == R_258) { print "can't pull what's fixed in place rule"; return; } ! 223, case 1 if (R == R_259) { print "can't pull scenery rule"; return; } ! 224, case 1 if (R == R_260) { print "can't pull people rule"; return; } ! 225, case 1 if (R == R_261) { print "report pulling rule"; return; } ! 226, case 1 if (R == R_262) { print "can't push what's fixed in place rule"; return; } ! 227, case 1 if (R == R_263) { print "can't push scenery rule"; return; } ! 228, case 1 if (R == R_264) { print "can't push people rule"; return; } ! 229, case 1 if (R == R_265) { print "report pushing rule"; return; } ! 230, case 1 if (R == R_266) { print "can't turn what's fixed in place rule"; return; } ! 231, case 1 if (R == R_267) { print "can't turn scenery rule"; return; } ! 232, case 1 if (R == R_268) { print "can't turn people rule"; return; } ! 233, case 1 if (R == R_269) { print "report turning rule"; return; } ! 234, case 1 if (R == R_270) { print "can't push unpushable things rule"; return; } ! 235, case 1 if (R == R_271) { print "can't push to non-directions rule"; return; } ! 236, case 1 if (R == R_272) { print "can't push vertically rule"; return; } ! 237, case 1 if (R == R_273) { print "standard pushing in directions rule"; return; } ! 238, case 1 if (R == R_274) { print "block pushing in directions rule"; return; } ! 239, case 1 if (R == R_275) { print "innuendo about squeezing people rule"; return; } ! 240, case 1 if (R == R_276) { print "report squeezing rule"; return; } ! 241, case 1 if (R == R_277) { print "block saying yes rule"; return; } ! 242, case 1 if (R == R_278) { print "block saying no rule"; return; } ! 243, case 1 if (R == R_279) { print "block burning rule"; return; } ! 244, case 1 if (R == R_280) { print "block waking up rule"; return; } ! 245, case 1 if (R == R_281) { print "block thinking rule"; return; } ! 246, case 1 if (R == R_282) { print "block smelling rule"; return; } ! 247, case 1 if (R == R_283) { print "block listening rule"; return; } ! 248, case 1 if (R == R_284) { print "block tasting rule"; return; } ! 249, case 1 if (R == R_285) { print "block cutting rule"; return; } ! 250, case 1 if (R == R_286) { print "block jumping rule"; return; } ! 251, case 1 if (R == R_287) { print "block tying rule"; return; } ! 252, case 1 if (R == R_288) { print "block drinking rule"; return; } ! 253, case 1 if (R == R_289) { print "block saying sorry rule"; return; } ! 254, case 1 if (R == R_290) { print "block swearing obscenely rule"; return; } ! 255, case 1 if (R == R_291) { print "block swearing mildly rule"; return; } ! 256, case 1 if (R == R_292) { print "block swinging rule"; return; } ! 257, case 1 if (R == R_293) { print "block rubbing rule"; return; } ! 258, case 1 if (R == R_294) { print "block setting it to rule"; return; } ! 259, case 1 if (R == R_295) { print "block waving hands rule"; return; } ! 260, case 1 if (R == R_296) { print "block buying rule"; return; } ! 261, case 1 if (R == R_297) { print "block singing rule"; return; } ! 262, case 1 if (R == R_298) { print "block climbing rule"; return; } ! 263, case 1 if (R == R_299) { print "block sleeping rule"; return; } ! 264, case 1 if (R == R_740) { print "quit rule"; return; } ! 265, case 1 if (R == R_741) { print "move down rule"; return; } ! 266, case 1 if (R == R_742) { print "move up rule"; return; } ! 267, case 1 if (R == R_743) { print "select rule"; return; } ! 268, case 1 if (R == R_747) { print "basic menu contents rule"; return; } ! 269, case 1 if (R == R_748) { print "constructing status line while displaying rule"; return; } ! 270, case 1 if (R == R_751) { print "hint toggle rule"; return; } ! 271, case 1 if (R == R_769) { print "mark items as seen when looking rule"; return; } ! 272, case 1 if (R == R_770) { print "mark items as seen on opening a container rule"; return; } ! 273, case 1 if (R == R_771) { print "mark items as seen on examining rule"; return; } ! 274, case 1 if (R == R_775) { print "Numbered Disambiguation Choices preface disambiguation objects with numbers rule"; return; } ! 275, case 1 if (R == R_776) { print "Numbered Disambiguation Choices cleanup disambiguation-busy flag rule"; return; } ! 276, case 1 if (R == R_777) { print "Numbered Disambiguation Choices reset disambiguables rule"; return; } ! 277, case 1 if (R == R_778) { print "Numbered Disambiguation Choices don't use number rule"; return; } ! 278, case 1 if (R == R_779) { print "Numbered Disambiguation Choices strip closing parenthesis rule"; return; } ! 279, case 1 if (R == R_794) { print "ordinary checking for content rule"; return; } ! 280, case 1 if (R == R_795) { print "cancelling input in the main window rule"; return; } ! 281, case 1 if (R == R_798) { print "print text to the input prompt rule"; return; } ! 282, case 1 if (R == R_800) { print "glue replacement command into parse buffer rule"; return; } ! 283, case 1 if (R == R_807) { print "dynamic objects setting activity variables rule"; return; } ! 284, case 1 if (R == R_809) { print "dynamic objects belt loosening rule"; return; } ! 285, case 1 if (R == R_811) { print "mark items as seen every turn rule"; return; } ! 286, case 1 if (R == R_816) { print "automatically save before input rule"; return; } ! 287, case 1 if (R == R_817) { print "restore when play begins rule"; return; } ! 288, case 1 if (R == R_818) { print "default roguelike restore rule"; return; } ! 289, case 1 if (R == R_819) { print "default roguelike restore failed rule"; return; } ! 290, case 1 if (R == R_820) { print "default roguelike save failed rule"; return; } ! 291, case 1 if (R == R_821) { print "default roguelike delete save failed rule"; return; } ! 292, case 1 if (R == R_822) { print "block saving rule"; return; } ! 293, case 1 if (R == R_823) { print "block restore rule"; return; } ! 294, case 1 if (R == R_824) { print "delete save on finish rule"; return; } ! 295, case 1 if (R == R_825) { print "delete save on restart rule"; return; } ! 296, case 1 if (R == R_826) { print "change the yourself text rule"; return; } ! 297, case 1 if (R == R_831) { print "improper print dead property rule"; return; } ! 298, case 1 if (R == R_832) { print "proper print dead property rule"; return; } ! 299, case 1 if (R == R_834) { print "standard hate rule"; return; } ! 300, case 1 if (R == R_837) { print "abide by the combat round rules rule"; return; } ! 301, case 1 if (R == R_838) { print "inactive players don't increment the turn count rule"; return; } ! 302, case 1 if (R == R_839) { print "update the combat status rule"; return; } ! 303, case 1 if (R == R_840) { print "business as usual rule"; return; } ! 304, case 1 if (R == R_841) { print "determine the main actor rule"; return; } ! 305, case 1 if (R == R_842) { print "consider the starting the combat round rules rule"; return; } ! 306, case 1 if (R == R_843) { print "main actor chooses an action rule"; return; } ! 307, case 1 if (R == R_844) { print "player chooses an action or reaction rule"; return; } ! 308, case 1 if (R == R_845) { print "reactors choose reactions rule"; return; } ! 309, case 1 if (R == R_846) { print "run delayed actions rule"; return; } ! 310, case 1 if (R == R_847) { print "conclude the combat round rule"; return; } ! 311, case 1 if (R == R_848) { print "no low initiative trap rule"; return; } ! 312, case 1 if (R == R_849) { print "increase initiative every round rule"; return; } ! 313, case 1 if (R == R_850) { print "random initiative rule"; return; } ! 314, case 1 if (R == R_851) { print "reset the initiative of the main actor rule"; return; } ! 315, case 1 if (R == R_855) { print "reset take no time boolean rule"; return; } ! 316, case 1 if (R == R_856) { print "acting fast actions are fast rule"; return; } ! 317, case 1 if (R == R_857) { print "all out of world actions are fast rule"; return; } ! 318, case 1 if (R == R_858) { print "looking at the beginning of the game is not acting fast rule"; return; } ! 319, case 1 if (R == R_859) { print "first make sure that going is not acting fast rule"; return; } ! 320, case 1 if (R == R_860) { print "second make sure that going is not acting fast rule"; return; } ! 321, case 1 if (R == R_864) { print "standard switching weightings on rule"; return; } ! 322, case 1 if (R == R_865) { print "standard switching weightings off rule"; return; } ! 323, case 1 if (R == R_867) { print "select a target rule"; return; } ! 324, case 1 if (R == R_868) { print "reactors target the main actor rule"; return; } ! 325, case 1 if (R == R_869) { print "reset AI variables rule"; return; } ! 326, case 1 if (R == R_870) { print "do not prefer passive targets rule"; return; } ! 327, case 1 if (R == R_871) { print "prefer targets you press rule"; return; } ! 328, case 1 if (R == R_872) { print "prefer those who press you rule"; return; } ! 329, case 1 if (R == R_873) { print "prefer the player rule"; return; } ! 330, case 1 if (R == R_874) { print "randomise the target result rule"; return; } ! 331, case 1 if (R == R_875) { print "return the target weight rule"; return; } ! 332, case 1 if (R == R_876) { print "select an action and do it rule"; return; } ! 333, case 1 if (R == R_877) { print "randomise the action result rule"; return; } ! 334, case 1 if (R == R_878) { print "waiting lets someone else go first rule"; return; } ! 335, case 1 if (R == R_879) { print "consider waiting rule"; return; } ! 336, case 1 if (R == R_880) { print "notice plurality of printed object rule"; return; } ! 337, case 1 if (R == R_945) { print "update ambiguous pronouns for actions rule"; return; } ! 338, case 1 if (R == R_946) { print "notice plurality of printed ambiguous object rule"; return; } ! 339, case 1 if (R == R_950) { print "standard checking the numbers boolean rule"; return; } ! 340, case 1 if (R == R_951) { print "standard switching the numbers off rule"; return; } ! 341, case 1 if (R == R_952) { print "standard switching the numbers on rule"; return; } ! 342, case 1 if (R == R_953) { print "after reporting stage rule"; return; } ! 343, case 1 if (R == R_955) { print "can't take living people's possessions rule"; return; } ! 344, case 1 if (R == R_956) { print "give list of possession on dead person rule"; return; } ! 345, case 1 if (R == R_957) { print "set permanent health to initial health rule"; return; } ! 346, case 1 if (R == R_961) { print "readied inventory listing rule"; return; } ! 347, case 1 if (R == R_962) { print "weapon attack bonus rule"; return; } ! 348, case 1 if (R == R_963) { print "CTW attack bonus from weapon rule"; return; } ! 349, case 1 if (R == R_967) { print "ready weapons for everyone rule"; return; } ! 350, case 1 if (R == R_968) { print "ready natural weapons rule"; return; } ! 351, case 1 if (R == R_969) { print "unready on dropping rule"; return; } ! 352, case 1 if (R == R_970) { print "unready on putting on rule"; return; } ! 353, case 1 if (R == R_971) { print "unready on inserting rule"; return; } ! 354, case 1 if (R == R_972) { print "reset hitting variables rule"; return; } ! 355, case 1 if (R == R_973) { print "consider the attack modifier rules rule"; return; } ! 356, case 1 if (R == R_974) { print "standard attack roll rule"; return; } ! 357, case 1 if (R == R_975) { print "melee attack bonus rule"; return; } ! 358, case 1 if (R == R_976) { print "standard show results of the attack roll rule"; return; } ! 359, case 1 if (R == R_977) { print "abide by the contact rules rule"; return; } ! 360, case 1 if (R == R_978) { print "standard whether the attack hit rule"; return; } ! 361, case 1 if (R == R_979) { print "consider the damage modifier rules rule"; return; } ! 362, case 1 if (R == R_980) { print "standard damage roll rule"; return; } ! 363, case 1 if (R == R_981) { print "consider the damage multiplier rules rule"; return; } ! 364, case 1 if (R == R_982) { print "can't deal negative damage rule"; return; } ! 365, case 1 if (R == R_983) { print "standard show the attack damage dealt rule"; return; } ! 366, case 1 if (R == R_984) { print "subtract damage from health rule"; return; } ! 367, case 1 if (R == R_985) { print "basic flavour rule"; return; } ! 368, case 1 if (R == R_986) { print "basic fatal player flavour rule"; return; } ! 369, case 1 if (R == R_987) { print "basic fatal flavour rule"; return; } ! 370, case 1 if (R == R_988) { print "consider the aftereffects rules rule"; return; } ! 371, case 1 if (R == R_989) { print "unready weapons of dead person rule"; return; } ! 372, case 1 if (R == R_990) { print "modify initiative based on combat results rule"; return; } ! 373, case 1 if (R == R_992) { print "cannot ready what is already readied rule"; return; } ! 374, case 1 if (R == R_993) { print "cannot ready what is not a weapon rule"; return; } ! 375, case 1 if (R == R_994) { print "implicit taking when readying rule"; return; } ! 376, case 1 if (R == R_995) { print "carry out readying when enclosing rule"; return; } ! 377, case 1 if (R == R_996) { print "unready all other weapons rule"; return; } ! 378, case 1 if (R == R_997) { print "standard report readying rule"; return; } ! 379, case 1 if (R == R_1000) { print "only attack persons rule"; return; } ! 380, case 1 if (R == R_1001) { print "only attack the living rule"; return; } ! 381, case 1 if (R == R_1002) { print "do not kill yourself rule"; return; } ! 382, case 1 if (R == R_1003) { print "do not attack friendly people rule"; return; } ! 383, case 1 if (R == R_1004) { print "do not attack neutral people rule"; return; } ! 384, case 1 if (R == R_1005) { print "cannot attack as reaction rule"; return; } ! 385, case 1 if (R == R_1006) { print "standard carry out an actor attacking rule"; return; } ! 386, case 1 if (R == R_1007) { print "standard report an actor attacking rule"; return; } ! 387, case 1 if (R == R_1008) { print "do not concentrate when at maximum rule"; return; } ! 388, case 1 if (R == R_1009) { print "standard concentrating improves initiative rule"; return; } ! 389, case 1 if (R == R_1010) { print "standard carry out concentrating rule"; return; } ! 390, case 1 if (R == R_1011) { print "standard concentrating prose rule"; return; } ! 391, case 1 if (R == R_1012) { print "concentration attack modifier rule"; return; } ! 392, case 1 if (R == R_1013) { print "concentration damage modifier rule"; return; } ! 393, case 1 if (R == R_1014) { print "lose concentration when hit rule"; return; } ! 394, case 1 if (R == R_1015) { print "lose concentration after attacking rule"; return; } ! 395, case 1 if (R == R_1017) { print "standard lose concentration prose rule"; return; } ! 396, case 1 if (R == R_1018) { print "CTW concentration bonus rule"; return; } ! 397, case 1 if (R == R_1019) { print "lose concentration on going rule"; return; } ! 398, case 1 if (R == R_1020) { print "cannot parry when not reacting rule"; return; } ! 399, case 1 if (R == R_1021) { print "parrying changes initiative rule"; return; } ! 400, case 1 if (R == R_1022) { print "standard carry out parrying rule"; return; } ! 401, case 1 if (R == R_1023) { print "standard parry prose rule"; return; } ! 402, case 1 if (R == R_1024) { print "parry defence bonus rule"; return; } ! 403, case 1 if (R == R_1025) { print "no longer at parry after the attack rule"; return; } ! 404, case 1 if (R == R_1026) { print "CTW parry bonus rule"; return; } ! 405, case 1 if (R == R_1027) { print "cannot dodge when not reacting rule"; return; } ! 406, case 1 if (R == R_1028) { print "standard carry out dodging rule"; return; } ! 407, case 1 if (R == R_1029) { print "standard dodge prose rule"; return; } ! 408, case 1 if (R == R_1030) { print "dodge defence bonus rule"; return; } ! 409, case 1 if (R == R_1031) { print "no longer at dodge after the attack rule"; return; } ! 410, case 1 if (R == R_1032) { print "CTW dodge bonus rule"; return; } ! 411, case 1 if (R == R_1033) { print "prefer the severely wounded rule"; return; } ! 412, case 1 if (R == R_1034) { print "prefer concentrated people rule"; return; } ! 413, case 1 if (R == R_1035) { print "prefer those with good weapons rule"; return; } ! 414, case 1 if (R == R_1036) { print "do not prefer good parriers rule"; return; } ! 415, case 1 if (R == R_1037) { print "do not prefer high defence unless concentrated rule"; return; } ! 416, case 1 if (R == R_1038) { print "select a weapon rule"; return; } ! 417, case 1 if (R == R_1039) { print "prefer lots of damage rule"; return; } ! 418, case 1 if (R == R_1040) { print "prefer low dodgability and passive parry rule"; return; } ! 419, case 1 if (R == R_1041) { print "prefer good active parry rule"; return; } ! 420, case 1 if (R == R_1042) { print "prefer good attack bonus rule"; return; } ! 421, case 1 if (R == R_1043) { print "prefer readied weapon if the end is near rule"; return; } ! 422, case 1 if (R == R_1044) { print "return the weapon weight rule"; return; } ! 423, case 1 if (R == R_1045) { print "consider attacking rule"; return; } ! 424, case 1 if (R == R_1046) { print "consider concentrating rule"; return; } ! 425, case 1 if (R == R_1047) { print "consider dodging rule"; return; } ! 426, case 1 if (R == R_1048) { print "consider parrying rule"; return; } ! 427, case 1 if (R == R_1049) { print "consider readying rule"; return; } ! 428, case 1 if (R == R_1050) { print "calculate the chance to win rule"; return; } ! 429, case 1 if (R == R_1051) { print "CTW default rule"; return; } ! 430, case 1 if (R == R_1052) { print "CTW melee bonus rule"; return; } ! 431, case 1 if (R == R_1053) { print "CTW defence bonus rule"; return; } ! 432, case 1 if (R == R_1054) { print "account for the best defence and return the CTW rule"; return; } ! 433, case 1 if (R == R_1055) { print "standard attack select rule"; return; } ! 434, case 1 if (R == R_1056) { print "standard concentration select rule"; return; } ! 435, case 1 if (R == R_1057) { print "concentration influences attacking rule"; return; } ! 436, case 1 if (R == R_1058) { print "standard parry and dodge against attack select rule"; return; } ! 437, case 1 if (R == R_1059) { print "don't attack or concentrate with an unreadied weapon rule"; return; } ! 438, case 1 if (R == R_1060) { print "killing after attack rule"; return; } ! 439, case 1 if (R == R_1061) { print "new lose concentration prose rule"; return; } ! 440, case 1 if (R == R_1062) { print "report player suicide rule"; return; } ! 441, case 1 if (R == R_1063) { print "randomise the target result more rule"; return; } ! 442, case 1 if (R == R_1065) { print "d might mean dodge rule"; return; } ! 443, case 1 if (R == R_1066) { print "stop hitting if the target has teleported rule"; return; } ! 444, case 1 if (R == R_1067) { print "attack self when not in combat rule"; return; } ! 445, case 1 if (R == R_1068) { print "standard increase or reset the tension rule"; return; } ! 446, case 1 if (R == R_1069) { print "standard tension attack modifier rule"; return; } ! 447, case 1 if (R == R_1070) { print "standard tension damage modifier rule"; return; } ! 448, case 1 if (R == R_1071) { print "standard reduce tension after hit rule"; return; } ! 449, case 1 if (R == R_1072) { print "CTW tension bonus rule"; return; } ! 450, case 1 if (R == R_1073) { print "tension influences attacking rule"; return; } ! 451, case 1 if (R == R_1076) { print "destroy all connections rule"; return; } ! 452, case 1 if (R == R_1077) { print "we start with entrance Hall rule"; return; } ! 453, case 1 if (R == R_1078) { print "locate and connect all rooms rule"; return; } ! 454, case 1 if (R == R_1079) { print "possibly adding some further connections rule"; return; } ! 455, case 1 if (R == R_1080) { print "reset collapse rule"; return; } ! 456, case 1 if (R == R_1084) { print "do not use rooms that are too difficult rule"; return; } ! 457, case 1 if (R == R_1105) { print "only monsters of the right level rule"; return; } ! 458, case 1 if (R == R_1106) { print "monster difficulty level rule"; return; } ! 459, case 1 if (R == R_1111) { print "stock minor treasure rule"; return; } ! 460, case 1 if (R == R_1112) { print "stock major treasure rule"; return; } ! 461, case 1 if (R == R_1113) { print "stock epic treasure rule"; return; } ! 462, case 1 if (R == R_1114) { print "stock special treasure rule"; return; } ! 463, case 1 if (R == R_1123) { print "remove item from play rule"; return; } ! 464, case 1 if (R == R_1124) { print "basic fragmentation damage rule"; return; } ! 465, case 1 if (R == R_1125) { print "glass items can shatter through fragmentation rule"; return; } ! 466, case 1 if (R == R_1128) { print "people shattering rule"; return; } ! 467, case 1 if (R == R_1129) { print "things shattering rule"; return; } ! 468, case 1 if (R == R_1131) { print "alternative block vaguely going rule"; return; } ! 469, case 1 if (R == R_1132) { print "alternative can't go that way rule"; return; } ! 470, case 1 if (R == R_1133) { print "alternative can't take what's already taken rule"; return; } ! 471, case 1 if (R == R_1137) { print "inherent damage modifier rule"; return; } ! 472, case 1 if (R == R_1138) { print "extra weapon info rule"; return; } ! 473, case 1 if (R == R_1140) { print "alternative attack roll rule"; return; } ! 474, case 1 if (R == R_1142) { print "vertical placement possible rule"; return; } ! 475, case 1 if (R == R_1143) { print "vertical placement scoring rule"; return; } ! 476, case 1 if (R == R_1144) { print "link rooms with the same mood rule"; return; } ! 477, case 1 if (R == R_1145) { print "collapse rule"; return; } ! 478, case 1 if (R == R_1146) { print "dig in a direct rule"; return; } ! 479, case 1 if (R == R_1147) { print "can only dig when carrying a digging tool rule"; return; } ! 480, case 1 if (R == R_1148) { print "only dig in connectable rooms rule"; return; } ! 481, case 1 if (R == R_1151) { print "hint about other rooms rule"; return; } ! 482, case 1 if (R == R_1152) { print "collapse in a direct rule"; return; } ! 483, case 1 if (R == R_1153) { print "can only collapse when carrying a collapsing tool rule"; return; } ! 484, case 1 if (R == R_1156) { print "non weapon users never ready rule"; return; } ! 485, case 1 if (R == R_1157) { print "grant powers when a monster is slain rule"; return; } ! 486, case 1 if (R == R_1158) { print "remove all killed monsters from play rule"; return; } ! 487, case 1 if (R == R_1167) { print "flyers fly rule"; return; } ! 488, case 1 if (R == R_1168) { print "flying status rule"; return; } ! 489, case 1 if (R == R_1170) { print "blind if blinded rule"; return; } ! 490, case 1 if (R == R_1171) { print "blind if eyeless rule"; return; } ! 491, case 1 if (R == R_1172) { print "blindness status rule"; return; } ! 492, case 1 if (R == R_1173) { print "blindness attack modifier rule"; return; } ! 493, case 1 if (R == R_1174) { print "blindness defence modifier rule"; return; } ! 494, case 1 if (R == R_1175) { print "blindness affects perception rule"; return; } ! 495, case 1 if (R == R_1176) { print "consider healing rule"; return; } ! 496, case 1 if (R == R_1178) { print "reduce heal cooldown of the main actor rule"; return; } ! 497, case 1 if (R == R_1180) { print "consider teleporting rule"; return; } ! 498, case 1 if (R == R_1181) { print "teleport eagerness rule"; return; } ! 499, case 1 if (R == R_1182) { print "spontaneous teleport rule"; return; } ! 500, case 1 if (R == R_1183) { print "teleport impossible rule"; return; } ! 501, case 1 if (R == R_1184) { print "standard monster teleport rule"; return; } ! 502, case 1 if (R == R_1187) { print "teleport impossible awareness expires rule"; return; } ! 503, case 1 if (R == R_1188) { print "consider disintegrating rule"; return; } ! 504, case 1 if (R == R_1189) { print "standard disintegrate rule"; return; } ! 505, case 1 if (R == R_1190) { print "reduce disintegrate cooldown of the main actor rule"; return; } ! 506, case 1 if (R == R_1191) { print "have followers follow rule"; return; } ! 507, case 1 if (R == R_1192) { print "follower percentile chance rule"; return; } ! 508, case 1 if (R == R_1193) { print "follower cannot follow hidden person rule"; return; } ! 509, case 1 if (R == R_1194) { print "set undead and horror factions rule"; return; } ! 510, case 1 if (R == R_1195) { print "nonstandard hate rule"; return; } ! 511, case 1 if (R == R_1196) { print "undead status rule"; return; } ! 512, case 1 if (R == R_1197) { print "undead follow undead rule"; return; } ! 513, case 1 if (R == R_1198) { print "set original material rule"; return; } ! 514, case 1 if (R == R_1199) { print "set incorruptibility based on material rule"; return; } ! 515, case 1 if (R == R_1202) { print "silver damage rule"; return; } ! 516, case 1 if (R == R_1203) { print "defender is doing something risky rule"; return; } ! 517, case 1 if (R == R_1204) { print "CTW risky bonus rule"; return; } ! 518, case 1 if (R == R_1206) { print "Aite-loved rule"; return; } ! 519, case 1 if (R == R_1216) { print "flaming items burn away rule"; return; } ! 520, case 1 if (R == R_1218) { print "heat destroys items rule"; return; } ! 521, case 1 if (R == R_1219) { print "heat increases damage rule"; return; } ! 522, case 1 if (R == R_1220) { print "heat can cause weapons to break rule"; return; } ! 523, case 1 if (R == R_1222) { print "material heat resistance rule"; return; } ! 524, case 1 if (R == R_1223) { print "intrinsic heat resistance rule"; return; } ! 525, case 1 if (R == R_1226) { print "internal heat rule"; return; } ! 526, case 1 if (R == R_1227) { print "cooling rule"; return; } ! 527, case 1 if (R == R_1235) { print "rust decreases damage rule"; return; } ! 528, case 1 if (R == R_1236) { print "rusted monster decreases damage rule"; return; } ! 529, case 1 if (R == R_1237) { print "rusted monster decreases attack rule"; return; } ! 530, case 1 if (R == R_1238) { print "CTW rusted monster penalty rule"; return; } ! 531, case 1 if (R == R_1242) { print "rust spores rust iron rule"; return; } ! 532, case 1 if (R == R_1244) { print "hot items cannot rust rule"; return; } ! 533, case 1 if (R == R_1245) { print "only iron items can rust rule"; return; } ! 534, case 1 if (R == R_1246) { print "spread rust spores rule"; return; } ! 535, case 1 if (R == R_1247) { print "add rust to the dungeon rule"; return; } ! 536, case 1 if (R == R_1248) { print "rust the contents of rust-releasing containers rule"; return; } ! 537, case 1 if (R == R_1250) { print "sometimes containers release rust rule"; return; } ! 538, case 1 if (R == R_1253) { print "incorruptible things do not corrode rule"; return; } ! 539, case 1 if (R == R_1254) { print "corroding resistances rule"; return; } ! 540, case 1 if (R == R_1255) { print "environmental effects rule"; return; } ! 541, case 1 if (R == R_1256) { print "sudden concentration reset rule"; return; } ! 542, case 1 if (R == R_1257) { print "reset the player to at-Inactive rule"; return; } ! 543, case 1 if (R == R_1259) { print "remove forced action rule"; return; } ! 544, case 1 if (R == R_1261) { print "death-blessed rule"; return; } ! 545, case 1 if (R == R_1262) { print "death-cursed rule"; return; } ! 546, case 1 if (R == R_1264) { print "fliers cannot fall rule"; return; } ! 547, case 1 if (R == R_1265) { print "non-moving persons cannot fall rule"; return; } ! 548, case 1 if (R == R_1266) { print "ethereal persons cannot fall rule"; return; } ! 549, case 1 if (R == R_1267) { print "standard falling destination rule"; return; } ! 550, case 1 if (R == R_1268) { print "move the falling person to the destination rule"; return; } ! 551, case 1 if (R == R_1269) { print "standard deal falling damage rule"; return; } ! 552, case 1 if (R == R_1271) { print "ghoul has less chance to hit rule"; return; } ! 553, case 1 if (R == R_1272) { print "ghoul gives damage resistance rule"; return; } ! 554, case 1 if (R == R_1273) { print "ghoul damage reduction rule"; return; } ! 555, case 1 if (R == R_1274) { print "ghoul status rule"; return; } ! 556, case 1 if (R == R_1277) { print "vampire status rule"; return; } ! 557, case 1 if (R == R_1278) { print "willpower bonus of vampire rule"; return; } ! 558, case 1 if (R == R_1279) { print "vampire has more chance to hit rule"; return; } ! 559, case 1 if (R == R_1280) { print "vampire has more chance to be hit rule"; return; } ! 560, case 1 if (R == R_1281) { print "CTW versus vampire rule"; return; } ! 561, case 1 if (R == R_1282) { print "vampire detection rule"; return; } ! 562, case 1 if (R == R_1286) { print "vampire bat status rule"; return; } ! 563, case 1 if (R == R_1287) { print "vampire bat has less chance to be hit rule"; return; } ! 564, case 1 if (R == R_1288) { print "CTW versus vampire bat rule"; return; } ! 565, case 1 if (R == R_1289) { print "vampire bat has less chance to hit rule"; return; } ! 566, case 1 if (R == R_1290) { print "vampire bat detection rule"; return; } ! 567, case 1 if (R == R_1291) { print "vampire bat flies rule"; return; } ! 568, case 1 if (R == R_1292) { print "vampire bat grants better retreat rule"; return; } ! 569, case 1 if (R == R_1293) { print "vampire bat cannot ready a weapon rule"; return; } ! 570, case 1 if (R == R_1294) { print "vampire bat cannot wear clothing rule"; return; } ! 571, case 1 if (R == R_1295) { print "unready readied weapons when bat rule"; return; } ! 572, case 1 if (R == R_1298) { print "hidden status rule"; return; } ! 573, case 1 if (R == R_1299) { print "hidden gives a small attack bonus rule"; return; } ! 574, case 1 if (R == R_1300) { print "do nothing when all enemies hidden rule"; return; } ! 575, case 1 if (R == R_1301) { print "possibly detected rule"; return; } ! 576, case 1 if (R == R_1302) { print "base probability of detection rule"; return; } ! 577, case 1 if (R == R_1303) { print "tension increases probability of detection rule"; return; } ! 578, case 1 if (R == R_1304) { print "perception probability of detection rule"; return; } ! 579, case 1 if (R == R_1305) { print "on-the-lookout increases probability of detection rule"; return; } ! 580, case 1 if (R == R_1306) { print "blindness decreases probability of detection rule"; return; } ! 581, case 1 if (R == R_1307) { print "unnatural awareness detection rule"; return; } ! 582, case 1 if (R == R_1317) { print "reduce smoke timer rule"; return; } ! 583, case 1 if (R == R_1318) { print "smoke slowly dissipates rule"; return; } ! 584, case 1 if (R == R_1319) { print "smoke may drift in from another room rule"; return; } ! 585, case 1 if (R == R_1326) { print "smoke immune if smoke attuned rule"; return; } ! 586, case 1 if (R == R_1327) { print "smoke immune if eyeless rule"; return; } ! 587, case 1 if (R == R_1329) { print "smoke lessens probability of detection rule"; return; } ! 588, case 1 if (R == R_1330) { print "thick smoke makes attacking a little harder rule"; return; } ! 589, case 1 if (R == R_1331) { print "CTW smoke penalty rule"; return; } ! 590, case 1 if (R == R_1332) { print "running is less risky with smoke rule"; return; } ! 591, case 1 if (R == R_1333) { print "retreating is less risky with smoke rule"; return; } ! 592, case 1 if (R == R_1334) { print "perception penalty of smoke rule"; return; } ! 593, case 1 if (R == R_1335) { print "set ethereal timer for ethereal people rule"; return; } ! 594, case 1 if (R == R_1336) { print "decrease etherealness rule"; return; } ! 595, case 1 if (R == R_1340) { print "ethereal damage multiplier rule"; return; } ! 596, case 1 if (R == R_1341) { print "ethereal status rule"; return; } ! 597, case 1 if (R == R_1342) { print "no physical damage when ethereal rule"; return; } ! 598, case 1 if (R == R_1343) { print "can always move when ethereal rule"; return; } ! 599, case 1 if (R == R_1344) { print "ethereal makes hiding easier rule"; return; } ! 600, case 1 if (R == R_1346) { print "destroy solid rock coordinates rule"; return; } ! 601, case 1 if (R == R_1347) { print "player dies in solid rock if not ethereal rule"; return; } ! 602, case 1 if (R == R_1348) { print "better treasures farther away rule"; return; } ! 603, case 1 if (R == R_1349) { print "mood rule"; return; } ! 604, case 1 if (R == R_1350) { print "remove treasure packs rule"; return; } ! 605, case 1 if (R == R_1368) { print "suit check rule"; return; } ! 606, case 1 if (R == R_1375) { print "putting a salve on someone is risky rule"; return; } ! 607, case 1 if (R == R_1380) { print "can only read scrolls rule"; return; } ! 608, case 1 if (R == R_1381) { print "cannot read when blind rule"; return; } ! 609, case 1 if (R == R_1385) { print "set plural names for scrolls rule"; return; } ! 610, case 1 if (R == R_1388) { print "set up scroll identities rule"; return; } ! 611, case 1 if (R == R_1391) { print "dagger extra tension attack bonus rule"; return; } ! 612, case 1 if (R == R_1392) { print "CTW dagger concentration bonus rule"; return; } ! 613, case 1 if (R == R_1393) { print "dagger extra tension damage bonus rule"; return; } ! 614, case 1 if (R == R_1400) { print "cannot ready when holding a cursed weapon rule"; return; } ! 615, case 1 if (R == R_1401) { print "cannot drop a cursed readied weapon rule"; return; } ! 616, case 1 if (R == R_1402) { print "cannot put on a cursed readied weapon rule"; return; } ! 617, case 1 if (R == R_1403) { print "cannot insert a cursed readied weapon rule"; return; } ! 618, case 1 if (R == R_1406) { print "sometimes loses initiative when cautious rule"; return; } ! 619, case 1 if (R == R_1407) { print "caution grants better retreat rule"; return; } ! 620, case 1 if (R == R_1409) { print "do not retreat when enraged rule"; return; } ! 621, case 1 if (R == R_1410) { print "do not go in combat when enraged rule"; return; } ! 622, case 1 if (R == R_1414) { print "tormenting necklace rule"; return; } ! 623, case 1 if (R == R_1415) { print "acuity can be blindness rule"; return; } ! 624, case 1 if (R == R_1416) { print "perception bonus of the goggles of acuity rule"; return; } ! 625, case 1 if (R == R_1417) { print "goggles of blindness rule"; return; } ! 626, case 1 if (R == R_1418) { print "crown of empire can be crown of Hargo rule"; return; } ! 627, case 1 if (R == R_1419) { print "willpower bonus of the crown of the empire rule"; return; } ! 628, case 1 if (R == R_1420) { print "crown of Hargo rule"; return; } ! 629, case 1 if (R == R_1421) { print "CTW crown of Hargo bonus rule"; return; } ! 630, case 1 if (R == R_1422) { print "willpower bonus of crown of Hargo rule"; return; } ! 631, case 1 if (R == R_1428) { print "Metastasio's hat grants worse attack and better retreat rule"; return; } ! 632, case 1 if (R == R_1429) { print "war mask Aite rule"; return; } ! 633, case 1 if (R == R_1430) { print "smoky robe is better when smoke rule"; return; } ! 634, case 1 if (R == R_1431) { print "CTW smoky robe penalty rule"; return; } ! 635, case 1 if (R == R_1432) { print "smoky blade is better when smoke rule"; return; } ! 636, case 1 if (R == R_1433) { print "CTW smoky blade penalty rule"; return; } ! 637, case 1 if (R == R_1434) { print "dimensional anchor rule"; return; } ! 638, case 1 if (R == R_1461) { print "adamantine blade countdown rule"; return; } ! 639, case 1 if (R == R_1465) { print "protection status rule"; return; } ! 640, case 1 if (R == R_1466) { print "hit protection damage multiplier rule"; return; } ! 641, case 1 if (R == R_1470) { print "decrease player skill bonus timer rule"; return; } ! 642, case 1 if (R == R_1471) { print "skilled status rule"; return; } ! 643, case 1 if (R == R_1472) { print "perception bonus of being skilled rule"; return; } ! 644, case 1 if (R == R_1473) { print "willpower bonus of being skilled rule"; return; } ! 645, case 1 if (R == R_1474) { print "dexterity bonus of being skilled rule"; return; } ! 646, case 1 if (R == R_1477) { print "standard unholy wave rule"; return; } ! 647, case 1 if (R == R_1484) { print "asbestos vest heat resistance rule"; return; } ! 648, case 1 if (R == R_1486) { print "executioner's axe extra tension damage bonus rule"; return; } ! 649, case 1 if (R == R_1487) { print "executioner's axe is better in temple of Nomos rule"; return; } ! 650, case 1 if (R == R_1488) { print "CTW executioner's axe in temple of Nomos rule"; return; } ! 651, case 1 if (R == R_1489) { print "vampiric dagger leeches rule"; return; } ! 652, case 1 if (R == R_1490) { print "boots of the war dance give initiative rule"; return; } ! 653, case 1 if (R == R_1491) { print "war dance can be wandering rule"; return; } ! 654, case 1 if (R == R_1492) { print "boots of the boots of wandering give initiative rule"; return; } ! 655, case 1 if (R == R_1493) { print "boots of wandering weirdness rule"; return; } ! 656, case 1 if (R == R_1494) { print "plate mail damage modifiers rule"; return; } ! 657, case 1 if (R == R_1495) { print "plate mail physical damage reduction rule"; return; } ! 658, case 1 if (R == R_1496) { print "suit of plate mail takes away initiative rule"; return; } ! 659, case 1 if (R == R_1497) { print "plate mail attack modifiers rule"; return; } ! 660, case 1 if (R == R_1498) { print "CTW plate mail rule"; return; } ! 661, case 1 if (R == R_1499) { print "plate mail running rule"; return; } ! 662, case 1 if (R == R_1500) { print "concentrate to compensate for the suit of plate mail rule"; return; } ! 663, case 1 if (R == R_1504) { print "blend into shadows rule"; return; } ! 664, case 1 if (R == R_1506) { print "being a glass cannon rule"; return; } ! 665, case 1 if (R == R_1507) { print "CTW glass cannon bonus rule"; return; } ! 666, case 1 if (R == R_1509) { print "glass cannon shatters when used to parry rule"; return; } ! 667, case 1 if (R == R_1510) { print "robe of the dead mage damage multiplier rule"; return; } ! 668, case 1 if (R == R_1511) { print "robe of the dead mage protects you rule"; return; } ! 669, case 1 if (R == R_1512) { print "CTW robe of the dead mage rule"; return; } ! 670, case 1 if (R == R_1513) { print "alternative lose concentration when hit rule"; return; } ! 671, case 1 if (R == R_1514) { print "robe of the dead mage discourages attacking rule"; return; } ! 672, case 1 if (R == R_1516) { print "rod of master builder attack modifiers rule"; return; } ! 673, case 1 if (R == R_1517) { print "rod of master builder damage multiplier rule"; return; } ! 674, case 1 if (R == R_1519) { print "dragon armour heat resistance rule"; return; } ! 675, case 1 if (R == R_1520) { print "dragon armour damage modifiers rule"; return; } ! 676, case 1 if (R == R_1521) { print "dragon armour damage reduction rule"; return; } ! 677, case 1 if (R == R_1522) { print "concentrate to compensate for the dragon armour rule"; return; } ! 678, case 1 if (R == R_1526) { print "set tome of transmutation rule"; return; } ! 679, case 1 if (R == R_1531) { print "ment ability bonus rule"; return; } ! 680, case 1 if (R == R_1532) { print "ment attack and defence bonus rule"; return; } ! 681, case 1 if (R == R_1533) { print "CTW ment penalty rule"; return; } ! 682, case 1 if (R == R_1534) { print "ment damage bonus rule"; return; } ! 683, case 1 if (R == R_1535) { print "feeling down attack penalty rule"; return; } ! 684, case 1 if (R == R_1536) { print "feeling down ability penalty rule"; return; } ! 685, case 1 if (R == R_1541) { print "ment status rule"; return; } ! 686, case 1 if (R == R_1542) { print "ment cannot be eaten rule"; return; } ! 687, case 1 if (R == R_1544) { print "attack penalty in Entrance Hall rule"; return; } ! 688, case 1 if (R == R_1547) { print "hall of mirrors fragmentation rule"; return; } ! 689, case 1 if (R == R_1549) { print "sometimes attack a mirror image in Hall of Mirrors rule"; return; } ! 690, case 1 if (R == R_1550) { print "concentration bonus in Hall of Mirrors rule"; return; } ! 691, case 1 if (R == R_1551) { print "concentration is more important in the Hall of Mirrors rule"; return; } ! 692, case 1 if (R == R_1555) { print "concentration is often futile in Phantasmagoria rule"; return; } ! 693, case 1 if (R == R_1557) { print "Lake of Lava kills fallers rule"; return; } ! 694, case 1 if (R == R_1560) { print "do not dodge on the Bridge of Doom rule"; return; } ! 695, case 1 if (R == R_1561) { print "better not dodge on bridge of doom rule"; return; } ! 696, case 1 if (R == R_1562) { print "hit may send you off the bridge of doom rule"; return; } ! 697, case 1 if (R == R_1569) { print "decrease the Nomos counter rule"; return; } ! 698, case 1 if (R == R_1570) { print "decrease the Nomos wrath counter rule"; return; } ! 699, case 1 if (R == R_1572) { print "planning notification rule"; return; } ! 700, case 1 if (R == R_1573) { print "Nomos bonus is false rule"; return; } ! 701, case 1 if (R == R_1576) { print "Nomos attack bonus rule"; return; } ! 702, case 1 if (R == R_1577) { print "Nomos damage bonus rule"; return; } ! 703, case 1 if (R == R_1578) { print "alternative do not kill yourself rule"; return; } ! 704, case 1 if (R == R_1579) { print "alternative do not attack friendly people rule"; return; } ! 705, case 1 if (R == R_1580) { print "alternative do not attack neutral people rule"; return; } ! 706, case 1 if (R == R_1584) { print "Aite prayer rule"; return; } ! 707, case 1 if (R == R_1586) { print "decrease the Aite counter rule"; return; } ! 708, case 1 if (R == R_1588) { print "Aite-loved bonus in Temple of Aite rule"; return; } ! 709, case 1 if (R == R_1589) { print "CTW Aite bonus rule"; return; } ! 710, case 1 if (R == R_1599) { print "decrease the Isatzo time-out each turn rule"; return; } ! 711, case 1 if (R == R_1603) { print "fill the sarcophagus rule"; return; } ! 712, case 1 if (R == R_1607) { print "huge forge rule"; return; } ! 713, case 1 if (R == R_1608) { print "initiative is almost completely random in Space-Time Discontinuum rule"; return; } ! 714, case 1 if (R == R_1609) { print "Vast Staircase has higher probability rule"; return; } ! 715, case 1 if (R == R_1616) { print "hit may send you off the vast staircase rule"; return; } ! 716, case 1 if (R == R_1619) { print "open or close pipes in Hall of Vapours rule"; return; } ! 717, case 1 if (R == R_1627) { print "smoke the Hall of Vapours rule"; return; } ! 718, case 1 if (R == R_1633) { print "set scroll analyser count rule"; return; } ! 719, case 1 if (R == R_1634) { print "scrolls in library rule"; return; } ! 720, case 1 if (R == R_1654) { print "potentially add the Eternal Prison rule"; return; } ! 721, case 1 if (R == R_1655) { print "potentially add the Hidden Treasury rule"; return; } ! 722, case 1 if (R == R_1656) { print "potentially add the Cavern of Rust rule"; return; } ! 723, case 1 if (R == R_1657) { print "smoke at the Portal of Smoke rule"; return; } ! 724, case 1 if (R == R_1661) { print "potentially add the Portal of Smoke rule"; return; } ! 725, case 1 if (R == R_1663) { print "add imp to its lair rule"; return; } ! 726, case 1 if (R == R_1664) { print "add extra scenery rule"; return; } ! 727, case 1 if (R == R_1668) { print "extra mood rule"; return; } ! 728, case 1 if (R == R_1669) { print "smoke from the broken pipe rule"; return; } ! 729, case 1 if (R == R_1670) { print "eleportation-beacon-on rule"; return; } ! 730, case 1 if (R == R_1674) { print "teleportation beacon rule"; return; } ! 731, case 1 if (R == R_1675) { print "statue of shards rule"; return; } ! 732, case 1 if (R == R_1677) { print "flickering lamps detection rule"; return; } ! 733, case 1 if (R == R_1678) { print "extra symbols in same room rule"; return; } ! 734, case 1 if (R == R_1679) { print "holy symbols attack bonus rule"; return; } ! 735, case 1 if (R == R_1680) { print "CTW holy symbols rule"; return; } ! 736, case 1 if (R == R_1681) { print "unholy symbols attack bonus rule"; return; } ! 737, case 1 if (R == R_1682) { print "CTW unholy symbols rule"; return; } ! 738, case 1 if (R == R_1684) { print "daggers do not concentrate rule"; return; } ! 739, case 1 if (R == R_1685) { print "scatter the daggers rule"; return; } ! 740, case 1 if (R == R_1686) { print "daggers must wait if scattered rule"; return; } ! 741, case 1 if (R == R_1687) { print "daggers regroup rule"; return; } ! 742, case 1 if (R == R_1695) { print "pierce status skill rule"; return; } ! 743, case 1 if (R == R_1702) { print "blood ape grows in size when hit rule"; return; } ! 744, case 1 if (R == R_1703) { print "blood ape size damage bonus rule"; return; } ! 745, case 1 if (R == R_1704) { print "blood ape size attack bonus rule"; return; } ! 746, case 1 if (R == R_1712) { print "add ape power damage to damage rule"; return; } ! 747, case 1 if (R == R_1713) { print "decrease ape power damage over time rule"; return; } ! 748, case 1 if (R == R_1714) { print "increase ape damage rule"; return; } ! 749, case 1 if (R == R_1715) { print "ape power damage status rule"; return; } ! 750, case 1 if (R == R_1716) { print "ape power status skill rule"; return; } ! 751, case 1 if (R == R_1717) { print "ravenous armadillo takes less damage rule"; return; } ! 752, case 1 if (R == R_1718) { print "armadillo physical damage reduction rule"; return; } ! 753, case 1 if (R == R_1726) { print "ravenous armadillo considers eating rule"; return; } ! 754, case 1 if (R == R_1730) { print "fill the stomach rule"; return; } ! 755, case 1 if (R == R_1733) { print "armadillo eats when the player is not around rule"; return; } ! 756, case 1 if (R == R_1734) { print "armadillo moves when the player is not around rule"; return; } ! 757, case 1 if (R == R_1736) { print "power of the armadillo gives damage resistance rule"; return; } ! 758, case 1 if (R == R_1738) { print "scales gives damage resistance rule"; return; } ! 759, case 1 if (R == R_1739) { print "scaling damage reduction rule"; return; } ! 760, case 1 if (R == R_1744) { print "scales disappear after attacking rule"; return; } ! 761, case 1 if (R == R_1745) { print "scales status rule"; return; } ! 762, case 1 if (R == R_1746) { print "armadillo status skill rule"; return; } ! 763, case 1 if (R == R_1747) { print "concentrate more if the player has scales rule"; return; } ! 764, case 1 if (R == R_1751) { print "stun yourself rule"; return; } ! 765, case 1 if (R == R_1754) { print "less damage when stunning rule"; return; } ! 766, case 1 if (R == R_1756) { print "stunning rule"; return; } ! 767, case 1 if (R == R_1757) { print "stunned status rule"; return; } ! 768, case 1 if (R == R_1759) { print "attack roll stunned bonus rule"; return; } ! 769, case 1 if (R == R_1760) { print "CTW stun penalty rule"; return; } ! 770, case 1 if (R == R_1762) { print "do not concentrate when stunned rule"; return; } ! 771, case 1 if (R == R_1763) { print "stun wears off rule"; return; } ! 772, case 1 if (R == R_1772) { print "Miranda status skill rule"; return; } ! 773, case 1 if (R == R_1774) { print "attack a spinning chain golem rule"; return; } ! 774, case 1 if (R == R_1775) { print "chain golem damage depends on concentration rule"; return; } ! 775, case 1 if (R == R_1776) { print "new concentration damage modifier rule"; return; } ! 776, case 1 if (R == R_1777) { print "chain golem likes to concentrate rule"; return; } ! 777, case 1 if (R == R_1778) { print "chain golem considers disarming rule"; return; } ! 778, case 1 if (R == R_1793) { print "chain golem power status skill rule"; return; } ! 779, case 1 if (R == R_1796) { print "jumping bomb has slightly less initiative rule"; return; } ! 780, case 1 if (R == R_1797) { print "jumping bomb only attacks when highly concentrated rule"; return; } ! 781, case 1 if (R == R_1798) { print "jumping bomb concentration select rule"; return; } ! 782, case 1 if (R == R_1799) { print "jumping bomb dislikes parrying rule"; return; } ! 783, case 1 if (R == R_1800) { print "jumping bomb kamikaze rule"; return; } ! 784, case 1 if (R == R_1801) { print "jumping bomb concentration attack modifier rule"; return; } ! 785, case 1 if (R == R_1802) { print "jumping bomb concentration defence modifier rule"; return; } ! 786, case 1 if (R == R_1803) { print "CTW bomb penalty rule"; return; } ! 787, case 1 if (R == R_1811) { print "explode after death rule"; return; } ! 788, case 1 if (R == R_1812) { print "jumping bomb power status skill rule"; return; } ! 789, case 1 if (R == R_1814) { print "scythe of slaying deals great damage to undead rule"; return; } ! 790, case 1 if (R == R_1815) { print "scythe of oxidation rusts stuff rule"; return; } ! 791, case 1 if (R == R_1816) { print "Reaper carries a random scythe rule"; return; } ! 792, case 1 if (R == R_1817) { print "Reaper starts following rule"; return; } ! 793, case 1 if (R == R_1826) { print "Reaper power status skill rule"; return; } ! 794, case 1 if (R == R_1827) { print "allow reaping faraway things rule"; return; } ! 795, case 1 if (R == R_1830) { print "need the Power of the Reaper rule"; return; } ! 796, case 1 if (R == R_1831) { print "cannot reap the unseen rule"; return; } ! 797, case 1 if (R == R_1832) { print "cannot reap the undead rule"; return; } ! 798, case 1 if (R == R_1833) { print "cannot reap yourself rule"; return; } ! 799, case 1 if (R == R_1834) { print "reaping a dead person rule"; return; } ! 800, case 1 if (R == R_1835) { print "reaping with one health rule"; return; } ! 801, case 1 if (R == R_1839) { print "mindslug considers mindblasting rule"; return; } ! 802, case 1 if (R == R_1840) { print "mindslug dislikes attacking rule"; return; } ! 803, case 1 if (R == R_1841) { print "mindslug doesnt dodge rule"; return; } ! 804, case 1 if (R == R_1843) { print "mindslug prefers low willpower rule"; return; } ! 805, case 1 if (R == R_1851) { print "mindslug defended by the enslaved rule"; return; } ! 806, case 1 if (R == R_1852) { print "CTW mindslug enslaved penalty rule"; return; } ! 807, case 1 if (R == R_1853) { print "enslaved have bad defence rule"; return; } ! 808, case 1 if (R == R_1854) { print "CTW enslaved bonus rule"; return; } ! 809, case 1 if (R == R_1855) { print "free slaves of the mindslug when it is killed rule"; return; } ! 810, case 1 if (R == R_1856) { print "slaves may be freed from mindslug rule"; return; } ! 811, case 1 if (R == R_1877) { print "need the Power of the Mindslug rule"; return; } ! 812, case 1 if (R == R_1878) { print "only dominate people rule"; return; } ! 813, case 1 if (R == R_1879) { print "only dominate enemies rule"; return; } ! 814, case 1 if (R == R_1880) { print "already dominating rule"; return; } ! 815, case 1 if (R == R_1881) { print "cannot dominate the emotionless rule"; return; } ! 816, case 1 if (R == R_1882) { print "dominated rule"; return; } ! 817, case 1 if (R == R_1884) { print "domination attack modifier rule"; return; } ! 818, case 1 if (R == R_1885) { print "CTW domination penalty rule"; return; } ! 819, case 1 if (R == R_1886) { print "domination stops after a hit rule"; return; } ! 820, case 1 if (R == R_1887) { print "domination status rule"; return; } ! 821, case 1 if (R == R_1888) { print "domination status skill rule"; return; } ! 822, case 1 if (R == R_1890) { print "tentacle grapples rule"; return; } ! 823, case 1 if (R == R_1891) { print "tentacle attacks only when not grappling rule"; return; } ! 824, case 1 if (R == R_1892) { print "tentacle prefers the grappled person rule"; return; } ! 825, case 1 if (R == R_1893) { print "cannot go when grappled rule"; return; } ! 826, case 1 if (R == R_1894) { print "cannot wear when grappled rule"; return; } ! 827, case 1 if (R == R_1895) { print "cannot take off when grappled rule"; return; } ! 828, case 1 if (R == R_1896) { print "cannot take when grappled rule"; return; } ! 829, case 1 if (R == R_1897) { print "cannot enter when grappled rule"; return; } ! 830, case 1 if (R == R_1898) { print "cannot exit when grappled rule"; return; } ! 831, case 1 if (R == R_1899) { print "cannot take inventory when grappled rule"; return; } ! 832, case 1 if (R == R_1900) { print "cannot attack when grappled rule"; return; } ! 833, case 1 if (R == R_1901) { print "tentacle lets go when damaged rule"; return; } ! 834, case 1 if (R == R_1902) { print "reset grappling after going rule"; return; } ! 835, case 1 if (R == R_1903) { print "grappled status rule"; return; } ! 836, case 1 if (R == R_1904) { print "sudden grapple reset rule"; return; } ! 837, case 1 if (R == R_1905) { print "being grappled impedes movement rule"; return; } ! 838, case 1 if (R == R_1906) { print "tentacle considers constricting rule"; return; } ! 839, case 1 if (R == R_1909) { print "tentacle shakes when attacked and grappling rule"; return; } ! 840, case 1 if (R == R_1911) { print "tentacle-confused attack modifier rule"; return; } ! 841, case 1 if (R == R_1912) { print "CTW confusion penalty rule"; return; } ! 842, case 1 if (R == R_1913) { print "no longer tentacle-confused after attacking rule"; return; } ! 843, case 1 if (R == R_1914) { print "tentacle-confused status rule"; return; } ! 844, case 1 if (R == R_1919) { print "show the damage dealt by the giant tentacle rule"; return; } ! 845, case 1 if (R == R_1925) { print "tentacle power status skill rule"; return; } ! 846, case 1 if (R == R_1926) { print "place fanatics of Aite rule"; return; } ! 847, case 1 if (R == R_1943) { print "grant fanatics of power boolean rule"; return; } ! 848, case 1 if (R == R_1947) { print "fanatics of aite status skill rule"; return; } ! 849, case 1 if (R == R_1948) { print "aite loves the bearer of her power rule"; return; } ! 850, case 1 if (R == R_1951) { print "do not parry with metal weapons against Bodmall's lightning attack rule"; return; } ! 851, case 1 if (R == R_1952) { print "iron or silver suit acts as a faraday cage rule"; return; } ! 852, case 1 if (R == R_1953) { print "Bodmall considers fogging rule"; return; } ! 853, case 1 if (R == R_1955) { print "Bodmall considers transmuting rule"; return; } ! 854, case 1 if (R == R_1958) { print "Bodmall considers barkskinning rule"; return; } ! 855, case 1 if (R == R_1960) { print "barkskin decreases damage rule"; return; } ! 856, case 1 if (R == R_1964) { print "attack with thorns in the location rule"; return; } ! 857, case 1 if (R == R_1965) { print "thorns hurt the dodger rule"; return; } ! 858, case 1 if (R == R_1966) { print "thorns running rule"; return; } ! 859, case 1 if (R == R_1967) { print "Bodmall considers summoning thorns rule"; return; } ! 860, case 1 if (R == R_1975) { print "Bodmall status skill rule"; return; } ! 861, case 1 if (R == R_1980) { print "dagger of draining aftereffects rule"; return; } ! 862, case 1 if (R == R_1981) { print "Malygris prefers the dagger of draining rule"; return; } ! 863, case 1 if (R == R_1984) { print "consider unghouling rule"; return; } ! 864, case 1 if (R == R_1987) { print "attacking with the demon blade is a bad idea rule"; return; } ! 865, case 1 if (R == R_1990) { print "Nameless Horror in Eternal Prison rule"; return; } ! 866, case 1 if (R == R_1992) { print "wake the Nameless Horror rule"; return; } ! 867, case 1 if (R == R_1994) { print "Nameless Horror stops to kill rule"; return; } ! 868, case 1 if (R == R_1995) { print "Nameless Horror kills all rule"; return; } ! 869, case 1 if (R == R_1996) { print "increase hunger of Nameless Horror rule"; return; } ! 870, case 1 if (R == R_1997) { print "speed up Nameless Horror rule"; return; } ! 871, case 1 if (R == R_1998) { print "Nameless Horror does not concentrate rule"; return; } ! 872, case 1 if (R == R_1999) { print "Nameless Horror does not parry rule"; return; } ! 873, case 1 if (R == R_2000) { print "Nameless Horror does not dodge rule"; return; } ! 874, case 1 if (R == R_2001) { print "Nameless Horror considers waiting rule"; return; } ! 875, case 1 if (R == R_2010) { print "rotting limbs decay rule"; return; } ! 876, case 1 if (R == R_2011) { print "rotting corpse loses limbs rule"; return; } ! 877, case 1 if (R == R_2012) { print "rotting corpse without a head does not concentrate rule"; return; } ! 878, case 1 if (R == R_2013) { print "rotting corpse attack modifier rule"; return; } ! 879, case 1 if (R == R_2014) { print "rotting corpse defense modifier rule"; return; } ! 880, case 1 if (R == R_2015) { print "limbless rotting corpse can't attack rule"; return; } ! 881, case 1 if (R == R_2021) { print "aswang considers shape shifting rule"; return; } ! 882, case 1 if (R == R_2027) { print "aswang as witch considers hexing rule"; return; } ! 883, case 1 if (R == R_2029) { print "decrease initiative when hexed rule"; return; } ! 884, case 1 if (R == R_2030) { print "hexed status rule"; return; } ! 885, case 1 if (R == R_2031) { print "remove hexes when aswang is dead rule"; return; } ! 886, case 1 if (R == R_2032) { print "aswang as dog likes to attack rule"; return; } ! 887, case 1 if (R == R_2033) { print "aswang as bird considers fleeing rule"; return; } ! 888, case 1 if (R == R_2035) { print "aswang in bird-shape regenerates rule"; return; } ! 889, case 1 if (R == R_2036) { print "aswang as bird flies rule"; return; } ! 890, case 1 if (R == R_2041) { print "abyss of the soul pulsates rule"; return; } ! 891, case 1 if (R == R_2042) { print "abyss of the soul does not react rule"; return; } ! 892, case 1 if (R == R_2045) { print "abyss of the soul absorbs all souls rule"; return; } ! 893, case 1 if (R == R_2048) { print "smoke demon appears and disappears rule"; return; } ! 894, case 1 if (R == R_2049) { print "tweak smoke demon rule"; return; } ! 895, case 1 if (R == R_2058) { print "smoke demon denseness multiplier rule"; return; } ! 896, case 1 if (R == R_2060) { print "imp considers imping rule"; return; } ! 897, case 1 if (R == R_2063) { print "imp teleporting rule"; return; } ! 898, case 1 if (R == R_2064) { print "imp not absent AI rule"; return; } ! 899, case 1 if (R == R_2069) { print "smoke on the Elemental Plane of Smoke rule"; return; } ! 900, case 1 if (R == R_2077) { print "set retreat location rule"; return; } ! 901, case 1 if (R == R_2078) { print "cannot retreat when no retreat location rule"; return; } ! 902, case 1 if (R == R_2079) { print "cannot retreat when in the retreat location rule"; return; } ! 903, case 1 if (R == R_2080) { print "cannot retreat when there are no enemies rule"; return; } ! 904, case 1 if (R == R_2081) { print "cannot retreat as reaction rule"; return; } ! 905, case 1 if (R == R_2082) { print "standard carry out retreat rule"; return; } ! 906, case 1 if (R == R_2083) { print "player wins initiative first time in a room rule"; return; } ! 907, case 1 if (R == R_2084) { print "cannot go as a reaction rule"; return; } ! 908, case 1 if (R == R_2085) { print "treat going as retreat when possible rule"; return; } ! 909, case 1 if (R == R_2086) { print "going and retreating in combat rule"; return; } ! 910, case 1 if (R == R_2088) { print "running is risky rule"; return; } ! 911, case 1 if (R == R_2089) { print "running is very risky rule"; return; } ! 912, case 1 if (R == R_2096) { print "blank line is go to rule"; return; } ! 913, case 1 if (R == R_2097) { print "check whether destination reached rule"; return; } ! 914, case 1 if (R == R_2099) { print "status concentration rule"; return; } ! 915, case 1 if (R == R_2100) { print "status tension rule"; return; } ! 916, case 1 if (R == R_2103) { print "set last-seen-location rule"; return; } ! 917, case 1 if (R == R_2104) { print "reset last-seen-location after some teleports rule"; return; } ! 918, case 1 if (R == R_2122) { print "alternative-you-can-also-see rule"; return; } ! 919, case 1 if (R == R_2137) { print "reset streak on restart rule"; return; } ! 920, case 1 if (R == R_2143) { print "introduction rule"; return; } ! 921, case 1 if (R == R_2145) { print "victory rule"; return; } ! 922, case 1 if (R == R_2146) { print "normal victory message rule"; return; } ! 923, case 1 if (R == R_2147) { print "Nameless Horror message rule"; return; } ! 924, case 1 if (R == R_2149) { print "player death rule"; return; } ! 925, case 1 if (R == R_2152) { print "title screen rule"; return; } ! 926, case 1 if (R == R_2154) { print "help request rule"; return; } ! 927, case 1 if (R == R_2162) { print "award Mageslayer achievement rule"; return; } ! 928, case 1 if (R == R_2163) { print "award Deathblow achievement rule"; return; } ! 929, case 1 if (R == R_2164) { print "award I return to serve achievement rule"; return; } ! 930, case 1 if (R == R_2165) { print "set up from the shadows I come rule"; return; } ! 931, case 1 if (R == R_2166) { print "award from the shadows achievement rule"; return; } ! 932, case 1 if (R == R_2167) { print "award Detox achievement rule"; return; } ! 933, case 1 if (R == R_2168) { print "award injury to insult achievement rule"; return; } ! 934, case 1 if (R == R_2171) { print "award Unmoved achievement rule"; return; } ! 935, case 1 if (R == R_2172) { print "award fragile vessel achievement rule"; return; } ! 936, case 1 if (R == LITTLE_USED_DO_NOTHING_R) { print "little-used do nothing rule"; return; } ! 964, case 1 if (R == VIRTUAL_MACHINE_STARTUP_R) { print "virtual machine startup rule"; return; } ! 965, case 1 if (R == INITIALISE_MEMORY_R) { print "initialise memory rule"; return; } ! 966, case 1 if (R == SEED_RANDOM_NUMBER_GENERATOR_R) { print "seed random number generator rule"; return; } ! 967, case 1 if (R == UPDATE_CHRONOLOGICAL_RECORDS_R) { print "update chronological records rule"; return; } ! 968, case 1 if (R == POSITION_PLAYER_IN_MODEL_R) { print "position player in model world rule"; return; } ! 969, case 1 if (R == ADJUST_LIGHT_R) { print "adjust light rule"; return; } ! 970, case 1 if (R == ADVANCE_TIME_R) { print "advance time rule"; return; } ! 971, case 1 if (R == GENERATE_ACTION_R) { print "generate action rule"; return; } ! 972, case 1 if (R == NOTE_OBJECT_ACQUISITIONS_R) { print "note object acquisitions rule"; return; } ! 973, case 1 if (R == PARSE_COMMAND_R) { print "parse command rule"; return; } ! 974, case 1 if (R == TIMED_EVENTS_R) { print "timed events rule"; return; } ! 975, case 1 if (R == RESURRECT_PLAYER_IF_ASKED_R) { print "resurrect player if asked rule"; return; } ! 976, case 1 if (R == ASK_FINAL_QUESTION_R) { print "ask the final question rule"; return; } ! 977, case 1 if (R == DetectSceneChange) { print "scene change machinery rule"; return; } ! 978, case 1 if (R == BASIC_ACCESSIBILITY_R) { print "basic accessibility rule"; return; } ! 981, case 1 if (R == BASIC_VISIBILITY_R) { print "basic visibility rule"; return; } ! 982, case 1 if (R == CARRYING_REQUIREMENTS_R) { print "carrying requirements rule"; return; } ! 983, case 1 if (R == REQUESTED_ACTIONS_REQUIRE_R) { print "requested actions require persuasion rule"; return; } ! 984, case 1 if (R == CARRY_OUT_REQUESTED_ACTIONS_R) { print "carry out requested actions rule"; return; } ! 985, case 1 if (R == DESCEND_TO_SPECIFIC_ACTION_R) { print "descend to specific action-processing rule"; return; } ! 986, case 1 if (R == WORK_OUT_DETAILS_OF_SPECIFIC_R) { print "work out details of specific action rule"; return; } ! 987, case 1 if (R == ACCESS_THROUGH_BARRIERS_R) { print "access through barriers rule"; return; } ! 988, case 1 if (R == CANT_REACH_INSIDE_CLOSED_R) { print "can't reach inside closed containers rule"; return; } ! 989, case 1 if (R == CANT_REACH_INSIDE_ROOMS_R) { print "can't reach inside rooms rule"; return; } ! 990, case 1 if (R == CANT_REACH_OUTSIDE_CLOSED_R) { print "can't reach outside closed containers rule"; return; } ! 991, case 1 if (R == STANDARD_NAME_PRINTING_R) { print "standard name printing rule"; return; } ! 995, case 1 if (R == STANDARD_CONTENTS_LISTING_R) { print "standard contents listing rule"; return; } ! 1008, case 1 if (R == ENABLE_GLULX_ACCEL_R) { print "enable Glulx acceleration rule"; return; } ! 1072, case 1 if (R == PRINT_OBITUARY_HEADLINE_R) { print "print obituary headline rule"; return; } ! 1079, case 1 if (R == PRINT_FINAL_SCORE_R) { print "print final score rule"; return; } ! 1080, case 1 if (R == DISPLAY_FINAL_STATUS_LINE_R) { print "display final status line rule"; return; } ! 1081, case 1 if (R == IMMEDIATELY_RESTART_VM_R) { print "immediately restart the VM rule"; return; } ! 1085, case 1 if (R == IMMEDIATELY_RESTORE_SAVED_R) { print "immediately restore saved game rule"; return; } ! 1086, case 1 if (R == IMMEDIATELY_QUIT_R) { print "immediately quit rule"; return; } ! 1087, case 1 if (R == IMMEDIATELY_UNDO_R) { print "immediately undo rule"; return; } ! 1088, case 1 if (R == READ_FINAL_ANSWER_R) { print "read the final answer rule"; return; } ! 1089, case 1 if (R == QUIT_THE_GAME_R) { print "quit the game rule"; return; } ! 1297, case 1 if (R == SAVE_THE_GAME_R) { print "save the game rule"; return; } ! 1301, case 1 if (R == RESTORE_THE_GAME_R) { print "restore the game rule"; return; } ! 1305, case 1 if (R == RESTART_THE_GAME_R) { print "restart the game rule"; return; } ! 1309, case 1 if (R == VERIFY_THE_STORY_FILE_R) { print "verify the story file rule"; return; } ! 1313, case 1 if (R == SWITCH_TRANSCRIPT_ON_R) { print "switch the story transcript on rule"; return; } ! 1317, case 1 if (R == SWITCH_TRANSCRIPT_OFF_R) { print "switch the story transcript off rule"; return; } ! 1321, case 1 if (R == ANNOUNCE_STORY_FILE_VERSION_R) { print "announce the story file version rule"; return; } ! 1325, case 1 if (R == ANNOUNCE_SCORE_R) { print "announce the score rule"; return; } ! 1329, case 1 if (R == PREFER_ABBREVIATED_R) { print "prefer abbreviated room descriptions rule"; return; } ! 1333, case 1 if (R == REP_PREFER_ABBREVIATED_R) { print "standard report preferring abbreviated room descriptions rule"; return; } ! 1334, case 1 if (R == PREFER_UNABBREVIATED_R) { print "prefer unabbreviated room descriptions rule"; return; } ! 1338, case 1 if (R == REP_PREFER_UNABBREVIATED_R) { print "standard report preferring unabbreviated room descriptions rule"; return; } ! 1339, case 1 if (R == PREFER_SOMETIMES_ABBREVIATED_R) { print "prefer sometimes abbreviated room descriptions rule"; return; } ! 1343, case 1 if (R == REP_PREFER_SOMETIMES_ABBR_R) { print "standard report preferring sometimes abbreviated room descriptions rule"; return; } ! 1344, case 1 if (R == SWITCH_SCORE_NOTIFY_ON_R) { print "switch score notification on rule"; return; } ! 1348, case 1 if (R == REP_SWITCH_NOTIFY_ON_R) { print "standard report switching score notification on rule"; return; } ! 1349, case 1 if (R == SWITCH_SCORE_NOTIFY_OFF_R) { print "switch score notification off rule"; return; } ! 1353, case 1 if (R == REP_SWITCH_NOTIFY_OFF_R) { print "standard report switching score notification off rule"; return; } ! 1354, case 1 if (R == ANNOUNCE_PRONOUN_MEANINGS_R) { print "announce the pronoun meanings rule"; return; } ! 1358, case 1 if (R == R_14) { print "A first turn sequence rule"; return; } ! 1668, case 2 if (R == R_15) { print "A last turn sequence rule"; return; } ! 1669, case 2 if (R == R_30) { print "last specific action-processing rule"; return; } ! 1670, case 2 if (R == R_159) { print "Setting action variables for exiting"; return; } ! 1671, case 2 if (R == R_774) { print "Report requesting epistemic status of"; return; } ! 1672, case 2 if (R == R_964) { print "Does the player mean readying a natural weapon"; return; } ! 1673, case 2 if (R == R_991) { print "Does the player mean readying a readied weapon"; return; } ! 1674, case 2 if (R == R_998) { print "Does the player mean attacking a dead person"; return; } ! 1675, case 2 if (R == R_999) { print "Does the player mean attacking a person opposed by the player"; return; } ! 1676, case 2 if (R == R_1064) { print "Check switching the numbers off"; return; } ! 1677, case 2 if (R == R_1074) { print "When play begins"; return; } ! 1678, case 2 if (R == R_1085) { print "Last placement possible rule"; return; } ! 1679, case 2 if (R == R_1107) { print "Last monster placement possible rule"; return; } ! 1680, case 2 if (R == R_1149) { print "Carry out digging"; return; } ! 1681, case 2 if (R == R_1154) { print "Check collapsing"; return; } ! 1682, case 2 if (R == R_1155) { print "Carry out collapsing"; return; } ! 1683, case 2 if (R == R_1177) { print "Carry out an actor healing"; return; } ! 1684, case 2 if (R == R_1200) { print "Before printing the name of a thing ( called item )"; return; } ! 1685, case 2 if (R == R_1201) { print "First after printing the name of a thing ( called item )"; return; } ! 1686, case 2 if (R == R_1210) { print "Before printing the name of hot not flaming thing ( called item )"; return; } ! 1687, case 2 if (R == R_1211) { print "Last carry out examining a hot thing"; return; } ! 1688, case 2 if (R == R_1212) { print "First attack modifier rule"; return; } ! 1689, case 2 if (R == R_1213) { print "Last attack modifier rule"; return; } ! 1690, case 2 if (R == R_1214) { print "First damage modifier rule"; return; } ! 1691, case 2 if (R == R_1215) { print "Last damage modifier rule"; return; } ! 1692, case 2 if (R == R_1217) { print "Before printing the name of a flaming thing ( called item )"; return; } ! 1693, case 2 if (R == R_1225) { print "When play begins"; return; } ! 1694, case 2 if (R == R_1230) { print "Before printing the name of a rusted thing"; return; } ! 1695, case 2 if (R == R_1231) { print "First attack modifier rule"; return; } ! 1696, case 2 if (R == R_1232) { print "Last attack modifier rule"; return; } ! 1697, case 2 if (R == R_1233) { print "First damage modifier rule"; return; } ! 1698, case 2 if (R == R_1234) { print "Last damage modifier rule"; return; } ! 1699, case 2 if (R == R_1239) { print "Instead of doing anything with rust spores"; return; } ! 1700, case 2 if (R == R_1240) { print "Instead of examining rust spores when the location is rust-spored"; return; } ! 1701, case 2 if (R == R_1241) { print "Instead of taking rust spores when the location is rust-spored"; return; } ! 1702, case 2 if (R == R_1249) { print "Last report opening a rust-releasing container ( called the item )"; return; } ! 1703, case 2 if (R == R_1284) { print "Check turning bat"; return; } ! 1704, case 2 if (R == R_1285) { print "Carry out turning bat"; return; } ! 1705, case 2 if (R == R_1296) { print "Check turning vampire"; return; } ! 1706, case 2 if (R == R_1297) { print "Carry out turning vampire"; return; } ! 1707, case 2 if (R == R_1308) { print "Carry out attacking"; return; } ! 1708, case 2 if (R == R_1309) { print "Carry out concentrating"; return; } ! 1709, case 2 if (R == R_1310) { print "Carry out reading a scroll"; return; } ! 1710, case 2 if (R == R_1311) { print "Carry out dropping"; return; } ! 1711, case 2 if (R == R_1312) { print "Carry out taking"; return; } ! 1712, case 2 if (R == R_1313) { print "Carry out singing"; return; } ! 1713, case 2 if (R == R_1320) { print "Last when play begins"; return; } ! 1714, case 2 if (R == R_1321) { print "Instead of doing anything with clouds of smoke when the smoke timer of the location is less than 1"; return; } ! 1715, case 2 if (R == R_1322) { print "Instead of touching clouds of smoke"; return; } ! 1716, case 2 if (R == R_1323) { print "Instead of taking clouds of smoke"; return; } ! 1717, case 2 if (R == R_1324) { print "Instead of examining clouds of smoke when the smoke timer of the location is greater than 0"; return; } ! 1718, case 2 if (R == R_1338) { print "Before ethereal-forbidden"; return; } ! 1719, case 2 if (R == R_1339) { print "Before ethereal-forbidden-second"; return; } ! 1720, case 2 if (R == R_1345) { print "Before going when the player is ethereal"; return; } ! 1721, case 2 if (R == R_1351) { print "Does the player mean inhaling an essence"; return; } ! 1722, case 2 if (R == R_1352) { print "Check inhaling"; return; } ! 1723, case 2 if (R == R_1353) { print "First carry out inhaling"; return; } ! 1724, case 2 if (R == R_1354) { print "Last carry out inhaling"; return; } ! 1725, case 2 if (R == R_1355) { print "Instead of opening an essence"; return; } ! 1726, case 2 if (R == R_1356) { print "Instead of drinking an essence"; return; } ! 1727, case 2 if (R == R_1357) { print "Does the player mean wearing clothing"; return; } ! 1728, case 2 if (R == R_1358) { print "Last check wearing a necklace"; return; } ! 1729, case 2 if (R == R_1359) { print "Last check wearing a hat"; return; } ! 1730, case 2 if (R == R_1360) { print "Last check wearing a shirt"; return; } ! 1731, case 2 if (R == R_1361) { print "Last check wearing a cloak"; return; } ! 1732, case 2 if (R == R_1362) { print "Last check wearing shoes"; return; } ! 1733, case 2 if (R == R_1363) { print "Last check wearing a trousers"; return; } ! 1734, case 2 if (R == R_1364) { print "Last check wearing a belt"; return; } ! 1735, case 2 if (R == R_1365) { print "Last check wearing gauntlets"; return; } ! 1736, case 2 if (R == R_1366) { print "Last check wearing a mask"; return; } ! 1737, case 2 if (R == R_1367) { print "Last check wearing a suit"; return; } ! 1738, case 2 if (R == R_1369) { print "Instead of throwing a grenade at something"; return; } ! 1739, case 2 if (R == R_1370) { print "Does the player mean throwing a grenade"; return; } ! 1740, case 2 if (R == R_1371) { print "Check throwing"; return; } ! 1741, case 2 if (R == R_1372) { print "Carry out throwing"; return; } ! 1742, case 2 if (R == R_1373) { print "Does the player mean applying a salve to something"; return; } ! 1743, case 2 if (R == R_1374) { print "Check putting a salve on something"; return; } ! 1744, case 2 if (R == R_1376) { print "Carry out applying something to something"; return; } ! 1745, case 2 if (R == R_1377) { print "Does the player mean spraying a sprayable"; return; } ! 1746, case 2 if (R == R_1378) { print "Check spraying"; return; } ! 1747, case 2 if (R == R_1379) { print "Does the player mean reading a scroll"; return; } ! 1748, case 2 if (R == R_1382) { print "Carry out reading"; return; } ! 1749, case 2 if (R == R_1383) { print "After cloning a new object from a thing"; return; } ! 1750, case 2 if (R == R_1387) { print "Last check reading a scroll"; return; } ! 1751, case 2 if (R == R_1394) { print "Report wearing"; return; } ! 1752, case 2 if (R == R_1395) { print "Check taking off something"; return; } ! 1753, case 2 if (R == R_1396) { print "After wearing a cursed not curse-identified thing"; return; } ! 1754, case 2 if (R == R_1397) { print "Before printing the name of a cursed curse-identified thing"; return; } ! 1755, case 2 if (R == R_1398) { print "A treasure placement rule"; return; } ! 1756, case 2 if (R == R_1399) { print "After readying something cursed"; return; } ! 1757, case 2 if (R == R_1404) { print "A treasure placement rule"; return; } ! 1758, case 2 if (R == R_1405) { print "Carry out inhaling the essence of caution"; return; } ! 1759, case 2 if (R == R_1408) { print "Carry out inhaling the essence of rage"; return; } ! 1760, case 2 if (R == R_1411) { print "Carry out inhaling the essence of patience"; return; } ! 1761, case 2 if (R == R_1412) { print "Carry out waiting"; return; } ! 1762, case 2 if (R == R_1413) { print "First report waiting"; return; } ! 1763, case 2 if (R == R_1423) { print "Instead of throwing a flash grenade"; return; } ! 1764, case 2 if (R == R_1424) { print "Instead of throwing a rust grenade"; return; } ! 1765, case 2 if (R == R_1425) { print "Instead of throwing a smoke grenade"; return; } ! 1766, case 2 if (R == R_1426) { print "Instead of throwing a fragmentation grenade"; return; } ! 1767, case 2 if (R == R_1427) { print "Instead of throwing the Blessed Grenade"; return; } ! 1768, case 2 if (R == R_1435) { print "Instead of applying unguentum argenti to an iron weapon"; return; } ! 1769, case 2 if (R == R_1436) { print "Instead of applying unguentum argenti to an alive iron person"; return; } ! 1770, case 2 if (R == R_1437) { print "Instead of applying unguentum argenti to an iron thing"; return; } ! 1771, case 2 if (R == R_1438) { print "Carry out reading a scroll"; return; } ! 1772, case 2 if (R == R_1439) { print "A treasure placement rule"; return; } ! 1773, case 2 if (R == R_1440) { print "A treasure placement rule"; return; } ! 1774, case 2 if (R == R_1441) { print "A treasure placement rule"; return; } ! 1775, case 2 if (R == R_1442) { print "Carry out reading a scroll"; return; } ! 1776, case 2 if (R == R_1443) { print "A treasure placement rule"; return; } ! 1777, case 2 if (R == R_1444) { print "Carry out reading a scroll"; return; } ! 1778, case 2 if (R == R_1445) { print "A treasure placement rule"; return; } ! 1779, case 2 if (R == R_1446) { print "A treasure placement rule"; return; } ! 1780, case 2 if (R == R_1447) { print "Carry out reading a scroll"; return; } ! 1781, case 2 if (R == R_1448) { print "A treasure placement rule"; return; } ! 1782, case 2 if (R == R_1449) { print "A treasure placement rule"; return; } ! 1783, case 2 if (R == R_1450) { print "A treasure placement rule"; return; } ! 1784, case 2 if (R == R_1451) { print "Carry out reading a scroll"; return; } ! 1785, case 2 if (R == R_1452) { print "A treasure placement rule"; return; } ! 1786, case 2 if (R == R_1453) { print "A treasure placement rule"; return; } ! 1787, case 2 if (R == R_1454) { print "A treasure placement rule"; return; } ! 1788, case 2 if (R == R_1455) { print "Carry out reading a scroll"; return; } ! 1789, case 2 if (R == R_1456) { print "A treasure placement rule"; return; } ! 1790, case 2 if (R == R_1457) { print "Carry out reading a scroll"; return; } ! 1791, case 2 if (R == R_1458) { print "A treasure placement rule"; return; } ! 1792, case 2 if (R == R_1459) { print "Carry out reading a scroll"; return; } ! 1793, case 2 if (R == R_1462) { print "A treasure placement rule"; return; } ! 1794, case 2 if (R == R_1463) { print "A treasure placement rule"; return; } ! 1795, case 2 if (R == R_1464) { print "Carry out reading a scroll"; return; } ! 1796, case 2 if (R == R_1467) { print "A treasure placement rule"; return; } ! 1797, case 2 if (R == R_1468) { print "Carry out reading a scroll"; return; } ! 1798, case 2 if (R == R_1469) { print "Carry out reading a scroll"; return; } ! 1799, case 2 if (R == R_1475) { print "A treasure placement rule"; return; } ! 1800, case 2 if (R == R_1476) { print "A treasure placement rule"; return; } ! 1801, case 2 if (R == R_1478) { print "Carry out reading a scroll"; return; } ! 1802, case 2 if (R == R_1479) { print "A treasure placement rule"; return; } ! 1803, case 2 if (R == R_1480) { print "A treasure placement rule"; return; } ! 1804, case 2 if (R == R_1481) { print "A treasure placement rule"; return; } ! 1805, case 2 if (R == R_1482) { print "A treasure placement rule"; return; } ! 1806, case 2 if (R == R_1483) { print "A treasure placement rule"; return; } ! 1807, case 2 if (R == R_1485) { print "Carry out spraying fungicide contraption"; return; } ! 1808, case 2 if (R == R_1501) { print "Carry out inhaling the essence of greed"; return; } ! 1809, case 2 if (R == R_1502) { print "First absorbing a power"; return; } ! 1810, case 2 if (R == R_1503) { print "Last absorbing a power ( called the granted power )"; return; } ! 1811, case 2 if (R == R_1505) { print "After taking off the cloak of shadows when the player is hidden"; return; } ! 1812, case 2 if (R == R_1508) { print "After readying the glass cannon"; return; } ! 1813, case 2 if (R == R_1515) { print "Carry out inhaling the essence of addiction"; return; } ! 1814, case 2 if (R == R_1518) { print "Instead of readying the rod of the master builder"; return; } ! 1815, case 2 if (R == R_1523) { print "Every turn when the main actor wears the dragon armour"; return; } ! 1816, case 2 if (R == R_1524) { print "Instead of eating Drakul's lifeblood"; return; } ! 1817, case 2 if (R == R_1525) { print "Instead of drinking Drakul's lifeblood"; return; } ! 1818, case 2 if (R == R_1527) { print "Instead of reading the tome of transmutation"; return; } ! 1819, case 2 if (R == R_1529) { print "Every turn when the main actor is the player"; return; } ! 1820, case 2 if (R == R_1530) { print "Every turn when the main actor is the player"; return; } ! 1821, case 2 if (R == R_1537) { print "Check snorting"; return; } ! 1822, case 2 if (R == R_1538) { print "Check snorting a package of ment when hate is present"; return; } ! 1823, case 2 if (R == R_1539) { print "Carry out snorting a package of ment"; return; } ! 1824, case 2 if (R == R_1543) { print "Check taking the skull-sized rubies"; return; } ! 1825, case 2 if (R == R_1545) { print "Before attacking the mirrors"; return; } ! 1826, case 2 if (R == R_1546) { print "Before attacking the reflections"; return; } ! 1827, case 2 if (R == R_1548) { print "After printing the name of something while looking when in Hall of Mirrors"; return; } ! 1828, case 2 if (R == R_1552) { print "Instead of attacking the radiant images"; return; } ! 1829, case 2 if (R == R_1554) { print "Every turn when in phantasmagoria"; return; } ! 1830, case 2 if (R == R_1556) { print "A placement possible rule"; return; } ! 1831, case 2 if (R == R_1558) { print "A placement possible rule"; return; } ! 1832, case 2 if (R == R_1559) { print "An additional placement rule"; return; } ! 1833, case 2 if (R == R_1563) { print "Carry out entering the seething lake of lava"; return; } ! 1834, case 2 if (R == R_1564) { print "Carry out direction-jumping down in Bridge of Doom"; return; } ! 1835, case 2 if (R == R_1565) { print "Instead of going down in Bridge of Doom"; return; } ! 1836, case 2 if (R == R_1566) { print "First carry out inserting something into the seething lake of lava"; return; } ! 1837, case 2 if (R == R_1567) { print "Instead of attacking the statue of Nomos"; return; } ! 1838, case 2 if (R == R_1568) { print "Instead of climbing the statue of Nomos"; return; } ! 1839, case 2 if (R == R_1571) { print "Instead of praying in Temple of Nomos"; return; } ! 1840, case 2 if (R == R_1574) { print "Before doing anything except attacking when Nomos bonus is true"; return; } ! 1841, case 2 if (R == R_1575) { print "Before attacking when Nomos counter is greater than 0"; return; } ! 1842, case 2 if (R == R_1581) { print "Instead of attacking the statue of Aite"; return; } ! 1843, case 2 if (R == R_1582) { print "Instead of touching the statue of Aite"; return; } ! 1844, case 2 if (R == R_1583) { print "Instead of climbing the statue of Aite"; return; } ! 1845, case 2 if (R == R_1590) { print "Instead of taking the pile of fragments"; return; } ! 1846, case 2 if (R == R_1591) { print "Instead of attacking the statue of Sul"; return; } ! 1847, case 2 if (R == R_1592) { print "Instead of touching the statue of Sul"; return; } ! 1848, case 2 if (R == R_1593) { print "Instead of climbing the statue of Sul"; return; } ! 1849, case 2 if (R == R_1594) { print "When play begins"; return; } ! 1850, case 2 if (R == R_1595) { print "Instead of praying in Temple of Sul"; return; } ! 1851, case 2 if (R == R_1596) { print "Instead of attacking the statue of Isatzo"; return; } ! 1852, case 2 if (R == R_1597) { print "Instead of touching the statue of Isatzo"; return; } ! 1853, case 2 if (R == R_1598) { print "Instead of climbing the statue of Isatzo"; return; } ! 1854, case 2 if (R == R_1600) { print "Instead of praying in the Temple of Isatzo"; return; } ! 1855, case 2 if (R == R_1601) { print "Instead of taking the ruined tombs"; return; } ! 1856, case 2 if (R == R_1602) { print "Before reading the symbols of death"; return; } ! 1857, case 2 if (R == R_1604) { print "Report opening the sarcophagus"; return; } ! 1858, case 2 if (R == R_1605) { print "Instead of entering the sarcophagus"; return; } ! 1859, case 2 if (R == R_1606) { print "Carry out entering the huge forge"; return; } ! 1860, case 2 if (R == R_1610) { print "A placement possible rule"; return; } ! 1861, case 2 if (R == R_1611) { print "An additional placement rule"; return; } ! 1862, case 2 if (R == R_1613) { print "Check direction-jumping down in Vast Staircase"; return; } ! 1863, case 2 if (R == R_1614) { print "Check direction-jumping down in Vast Staircase"; return; } ! 1864, case 2 if (R == R_1615) { print "Carry out direction-jumping down in Vast Staircase"; return; } ! 1865, case 2 if (R == R_1617) { print "Instead of climbing the staircase"; return; } ! 1866, case 2 if (R == R_1618) { print "Last check inserting something into the curious machine"; return; } ! 1867, case 2 if (R == R_1620) { print "Instead of opening the pipes"; return; } ! 1868, case 2 if (R == R_1621) { print "Instead of closing the pipes"; return; } ! 1869, case 2 if (R == R_1622) { print "Instead of turning the big wheel"; return; } ! 1870, case 2 if (R == R_1623) { print "Instead of pushing the wheel"; return; } ! 1871, case 2 if (R == R_1624) { print "Instead of pulling the wheel"; return; } ! 1872, case 2 if (R == R_1625) { print "Instead of switching on the pipes"; return; } ! 1873, case 2 if (R == R_1626) { print "Instead of switching off the pipes"; return; } ! 1874, case 2 if (R == R_1628) { print "Instead of entering the huge magical portal"; return; } ! 1875, case 2 if (R == R_1629) { print "Instead of entering the huge empty portal"; return; } ! 1876, case 2 if (R == R_1630) { print "Instead of taking the hundreds of books"; return; } ! 1877, case 2 if (R == R_1631) { print "Instead of reading the hundreds of books"; return; } ! 1878, case 2 if (R == R_1632) { print "Instead of burning the hundreds of books"; return; } ! 1879, case 2 if (R == R_1635) { print "Last check inserting something into the scroll analyser"; return; } ! 1880, case 2 if (R == R_1636) { print "A placement possible rule"; return; } ! 1881, case 2 if (R == R_1637) { print "An additional placement rule"; return; } ! 1882, case 2 if (R == R_1638) { print "An additional placement rule"; return; } ! 1883, case 2 if (R == R_1639) { print "Instead of examining the fascinating drawing"; return; } ! 1884, case 2 if (R == R_1640) { print "After deciding the scope of the player while in Drawing Room"; return; } ! 1885, case 2 if (R == R_1641) { print "After deciding the scope of the player while adjusted scope for the drawing room is true"; return; } ! 1886, case 2 if (R == R_1642) { print "Before running the parser"; return; } ! 1887, case 2 if (R == R_1643) { print "After running the parser"; return; } ! 1888, case 2 if (R == R_1644) { print "Before doing anything except examining or reaping in Drawing Room"; return; } ! 1889, case 2 if (R == R_1645) { print "Persuasion rule for asking people to try doing something when the player is in Drawing Room"; return; } ! 1890, case 2 if (R == R_1646) { print "Instead of attacking or cutting or touching the fascinating drawing"; return; } ! 1891, case 2 if (R == R_1647) { print "Instead of smelling in the Quartering Room"; return; } ! 1892, case 2 if (R == R_1648) { print "Instead of taking the large pile of body parts"; return; } ! 1893, case 2 if (R == R_1649) { print "Instead of searching the large pile of body parts"; return; } ! 1894, case 2 if (R == R_1651) { print "Instead of smelling putrefying arm"; return; } ! 1895, case 2 if (R == R_1658) { print "Instead of entering the portal to the elemental plane of smoke"; return; } ! 1896, case 2 if (R == R_1659) { print "Does the player mean entering the portal to the elemental plane of smoke"; return; } ! 1897, case 2 if (R == R_1660) { print "Instead of going inside in Portal of Smoke"; return; } ! 1898, case 2 if (R == R_1662) { print "Instead of smelling the lair of the imp"; return; } ! 1899, case 2 if (R == R_1671) { print "Instead of turning or pushing or pulling the teleportation beacon"; return; } ! 1900, case 2 if (R == R_1672) { print "Instead of switching on the teleportation beacon"; return; } ! 1901, case 2 if (R == R_1673) { print "Instead of switching off the teleportation beacon"; return; } ! 1902, case 2 if (R == R_1676) { print "Every turn when the location of the statue of shards is the location of the player"; return; } ! 1903, case 2 if (R == R_1683) { print "When play begins"; return; } ! 1904, case 2 if (R == R_1688) { print "Report an actor hitting the dead swarm of daggers"; return; } ! 1905, case 2 if (R == R_1689) { print "Report the swarm of daggers hitting a dead pc"; return; } ! 1906, case 2 if (R == R_1690) { print "Report the swarm of daggers attacking"; return; } ! 1907, case 2 if (R == R_1691) { print "Report the swarm of daggers parrying"; return; } ! 1908, case 2 if (R == R_1692) { print "Report the swarm of daggers dodging"; return; } ! 1909, case 2 if (R == R_1693) { print "Absorbing power of the daggers"; return; } ! 1910, case 2 if (R == R_1694) { print "Repelling power of the daggers"; return; } ! 1911, case 2 if (R == R_1696) { print "Does the player mean piercing the player"; return; } ! 1912, case 2 if (R == R_1697) { print "Does the player mean piercing an alive person"; return; } ! 1913, case 2 if (R == R_1698) { print "Check piercing"; return; } ! 1914, case 2 if (R == R_1699) { print "Check piercing"; return; } ! 1915, case 2 if (R == R_1700) { print "Carry out piercing"; return; } ! 1916, case 2 if (R == R_1701) { print "When play begins"; return; } ! 1917, case 2 if (R == R_1705) { print "Report an actor hitting the dead blood ape"; return; } ! 1918, case 2 if (R == R_1706) { print "Report the blood ape hitting a dead pc"; return; } ! 1919, case 2 if (R == R_1707) { print "Report the blood ape attacking"; return; } ! 1920, case 2 if (R == R_1708) { print "Report the blood ape parrying"; return; } ! 1921, case 2 if (R == R_1709) { print "Report the blood ape dodging"; return; } ! 1922, case 2 if (R == R_1710) { print "Absorbing power of the ape"; return; } ! 1923, case 2 if (R == R_1711) { print "Repelling power of the ape"; return; } ! 1924, case 2 if (R == R_1719) { print "When play begins"; return; } ! 1925, case 2 if (R == R_1720) { print "Report an actor hitting the dead ravenous armadillo"; return; } ! 1926, case 2 if (R == R_1721) { print "Report the ravenous armadillo hitting a dead pc"; return; } ! 1927, case 2 if (R == R_1722) { print "Report the ravenous armadillo attacking"; return; } ! 1928, case 2 if (R == R_1723) { print "Report the ravenous armadillo parrying"; return; } ! 1929, case 2 if (R == R_1724) { print "Report the ravenous armadillo dodging"; return; } ! 1930, case 2 if (R == R_1725) { print "Report the ravenous armadillo concentrating"; return; } ! 1931, case 2 if (R == R_1729) { print "Carry out the ravenous armadillo armadillo-eating"; return; } ! 1932, case 2 if (R == R_1731) { print "Every turn when at least one thing is in the armadillo stomach"; return; } ! 1933, case 2 if (R == R_1735) { print "Absorbing power of the armadillo"; return; } ! 1934, case 2 if (R == R_1737) { print "Repelling power of the armadillo"; return; } ! 1935, case 2 if (R == R_1740) { print "Check scaling"; return; } ! 1936, case 2 if (R == R_1741) { print "Check scaling"; return; } ! 1937, case 2 if (R == R_1742) { print "Check scaling"; return; } ! 1938, case 2 if (R == R_1743) { print "Carry out scaling"; return; } ! 1939, case 2 if (R == R_1748) { print "Does the player mean stunning an alive person"; return; } ! 1940, case 2 if (R == R_1749) { print "Does the player mean stunning the player"; return; } ! 1941, case 2 if (R == R_1750) { print "First check stunning"; return; } ! 1942, case 2 if (R == R_1752) { print "Check stunning"; return; } ! 1943, case 2 if (R == R_1753) { print "Carry out an actor stunning"; return; } ! 1944, case 2 if (R == R_1755) { print "Check Miranda attacking"; return; } ! 1945, case 2 if (R == R_1761) { print "Check concentrating when the player is stunned"; return; } ! 1946, case 2 if (R == R_1764) { print "Report an actor hitting the dead Miranda"; return; } ! 1947, case 2 if (R == R_1765) { print "Report Miranda hitting a dead pc"; return; } ! 1948, case 2 if (R == R_1766) { print "Report Miranda attacking"; return; } ! 1949, case 2 if (R == R_1767) { print "Report Miranda parrying"; return; } ! 1950, case 2 if (R == R_1768) { print "Report Miranda dodging"; return; } ! 1951, case 2 if (R == R_1769) { print "Report Miranda concentrating"; return; } ! 1952, case 2 if (R == R_1770) { print "Absorbing power of Miranda"; return; } ! 1953, case 2 if (R == R_1771) { print "Repelling power of Miranda"; return; } ! 1954, case 2 if (R == R_1773) { print "When play begins"; return; } ! 1955, case 2 if (R == R_1779) { print "Carry out a person golem-disarming"; return; } ! 1956, case 2 if (R == R_1780) { print "Report an actor hitting the dead chain golem"; return; } ! 1957, case 2 if (R == R_1781) { print "Report the chain golem hitting a dead pc"; return; } ! 1958, case 2 if (R == R_1782) { print "Report the chain golem attacking"; return; } ! 1959, case 2 if (R == R_1783) { print "Report the chain golem parrying"; return; } ! 1960, case 2 if (R == R_1784) { print "Report the chain golem dodging"; return; } ! 1961, case 2 if (R == R_1785) { print "Report the chain golem concentrating"; return; } ! 1962, case 2 if (R == R_1786) { print "Lose concentration prose rule for the chain golem"; return; } ! 1963, case 2 if (R == R_1787) { print "Absorbing power of the chains"; return; } ! 1964, case 2 if (R == R_1788) { print "Repelling power of the chains"; return; } ! 1965, case 2 if (R == R_1789) { print "Check lashing"; return; } ! 1966, case 2 if (R == R_1790) { print "Check lashing"; return; } ! 1967, case 2 if (R == R_1791) { print "Carry out lashing"; return; } ! 1968, case 2 if (R == R_1792) { print "Report lashing"; return; } ! 1969, case 2 if (R == R_1794) { print "When play begins"; return; } ! 1970, case 2 if (R == R_1795) { print "When play begins"; return; } ! 1971, case 2 if (R == R_1804) { print "Report an actor hitting the dead jumping bomb"; return; } ! 1972, case 2 if (R == R_1805) { print "Report the bomb attacking"; return; } ! 1973, case 2 if (R == R_1806) { print "Report the bomb dodging"; return; } ! 1974, case 2 if (R == R_1807) { print "Report the bomb concentrating"; return; } ! 1975, case 2 if (R == R_1808) { print "Lose concentration prose rule for the jumping bomb"; return; } ! 1976, case 2 if (R == R_1809) { print "Absorbing power of the bomb"; return; } ! 1977, case 2 if (R == R_1810) { print "Repelling power of the bomb"; return; } ! 1978, case 2 if (R == R_1813) { print "When play begins"; return; } ! 1979, case 2 if (R == R_1818) { print "When play begins"; return; } ! 1980, case 2 if (R == R_1819) { print "Report an actor hitting the dead Reaper"; return; } ! 1981, case 2 if (R == R_1820) { print "Report the Reaper hitting a dead pc"; return; } ! 1982, case 2 if (R == R_1821) { print "Report the reaper attacking"; return; } ! 1983, case 2 if (R == R_1822) { print "Report the Reaper dodging"; return; } ! 1984, case 2 if (R == R_1823) { print "Report the Reaper concentrating"; return; } ! 1985, case 2 if (R == R_1824) { print "Absorbing power of the Reaper"; return; } ! 1986, case 2 if (R == R_1825) { print "Repelling power of the Reaper"; return; } ! 1987, case 2 if (R == R_1828) { print "Does the player mean reaping an alive person"; return; } ! 1988, case 2 if (R == R_1829) { print "Does the player mean reaping a seen person"; return; } ! 1989, case 2 if (R == R_1836) { print "Carry out reaping"; return; } ! 1990, case 2 if (R == R_1837) { print "When play begins"; return; } ! 1991, case 2 if (R == R_1838) { print "When play begins"; return; } ! 1992, case 2 if (R == R_1842) { print "Carry out the mindslug mindblasting"; return; } ! 1993, case 2 if (R == R_1844) { print "Report an actor hitting the dead mindslug"; return; } ! 1994, case 2 if (R == R_1845) { print "Report the mindslug hitting a dead pc"; return; } ! 1995, case 2 if (R == R_1846) { print "Report the mindslug attacking"; return; } ! 1996, case 2 if (R == R_1847) { print "Report the mindslug dodging"; return; } ! 1997, case 2 if (R == R_1848) { print "When play begins"; return; } ! 1998, case 2 if (R == R_1849) { print "When play begins"; return; } ! 1999, case 2 if (R == R_1850) { print "When play begins"; return; } ! 2000, case 2 if (R == R_1857) { print "Report an actor hitting the dead Fafhrd"; return; } ! 2001, case 2 if (R == R_1859) { print "Report Fafhrd hitting a dead pc"; return; } ! 2002, case 2 if (R == R_1860) { print "Report Fafhrd attacking"; return; } ! 2003, case 2 if (R == R_1861) { print "Report Fafhrd dodging"; return; } ! 2004, case 2 if (R == R_1862) { print "Report Fafhrd parrying"; return; } ! 2005, case 2 if (R == R_1863) { print "Report an actor hitting the dead Mouser"; return; } ! 2006, case 2 if (R == R_1865) { print "Report Mouser hitting a dead pc"; return; } ! 2007, case 2 if (R == R_1866) { print "Report Mouser attacking"; return; } ! 2008, case 2 if (R == R_1867) { print "Report Mouser dodging"; return; } ! 2009, case 2 if (R == R_1868) { print "Report Mouser parrying"; return; } ! 2010, case 2 if (R == R_1869) { print "Last report talking to Fafhrd when Fafhrd is friendly"; return; } ! 2011, case 2 if (R == R_1870) { print "Last report talking to Mouser when Mouser is friendly"; return; } ! 2012, case 2 if (R == R_1871) { print "Absorbing power of the mindslug"; return; } ! 2013, case 2 if (R == R_1872) { print "Repelling power of the mindslug"; return; } ! 2014, case 2 if (R == R_1875) { print "Does the player mean dominating an alive person"; return; } ! 2015, case 2 if (R == R_1876) { print "Does the player mean dominating the player"; return; } ! 2016, case 2 if (R == R_1883) { print "Carry out dominating"; return; } ! 2017, case 2 if (R == R_1889) { print "When play begins"; return; } ! 2018, case 2 if (R == R_1908) { print "Carry out the giant tentacle tentacle-constricting"; return; } ! 2019, case 2 if (R == R_1910) { print "Carry out the giant tentacle tentacle-shaking"; return; } ! 2020, case 2 if (R == R_1915) { print "Report an actor hitting the dead giant tentacle"; return; } ! 2021, case 2 if (R == R_1916) { print "Report the giant tentacle hitting a dead pc"; return; } ! 2022, case 2 if (R == R_1917) { print "Report the giant tentacle attacking"; return; } ! 2023, case 2 if (R == R_1918) { print "Report the giant tentacle dodging"; return; } ! 2024, case 2 if (R == R_1920) { print "Absorbing power of the tentacle"; return; } ! 2025, case 2 if (R == R_1921) { print "Repelling power of the tentacle"; return; } ! 2026, case 2 if (R == R_1922) { print "Check confusing"; return; } ! 2027, case 2 if (R == R_1923) { print "Check confusing"; return; } ! 2028, case 2 if (R == R_1924) { print "Carry out confusing"; return; } ! 2029, case 2 if (R == R_1927) { print "When play begins"; return; } ! 2030, case 2 if (R == R_1928) { print "Report an actor hitting the dead healer of Aite"; return; } ! 2031, case 2 if (R == R_1929) { print "Report the healer of Aite hitting a dead pc"; return; } ! 2032, case 2 if (R == R_1930) { print "Report the healer of Aite attacking"; return; } ! 2033, case 2 if (R == R_1931) { print "Report the healer of Aite dodging"; return; } ! 2034, case 2 if (R == R_1932) { print "When play begins"; return; } ! 2035, case 2 if (R == R_1933) { print "Report an actor hitting the dead tormentor of Aite"; return; } ! 2036, case 2 if (R == R_1934) { print "Report the tormentor of Aite hitting a dead pc"; return; } ! 2037, case 2 if (R == R_1935) { print "Report the tormentor of Aite attacking"; return; } ! 2038, case 2 if (R == R_1936) { print "Report the tormentor of Aite dodging"; return; } ! 2039, case 2 if (R == R_1937) { print "When play begins"; return; } ! 2040, case 2 if (R == R_1938) { print "Report an actor hitting the dead defender of Aite"; return; } ! 2041, case 2 if (R == R_1939) { print "Report the defender of Aite hitting a dead pc"; return; } ! 2042, case 2 if (R == R_1940) { print "Report the defender of Aite attacking"; return; } ! 2043, case 2 if (R == R_1941) { print "Report the defender of Aite parrying"; return; } ! 2044, case 2 if (R == R_1942) { print "Report the defender of Aite dodging"; return; } ! 2045, case 2 if (R == R_1945) { print "Absorbing power of the Fanatics of Aite"; return; } ! 2046, case 2 if (R == R_1946) { print "Repelling power of the Fanatics of Aite"; return; } ! 2047, case 2 if (R == R_1949) { print "First check praying"; return; } ! 2048, case 2 if (R == R_1950) { print "When play begins"; return; } ! 2049, case 2 if (R == R_1954) { print "Carry out Bodmall Bodmall-fogging"; return; } ! 2050, case 2 if (R == R_1956) { print "Carry out Bodmall Bodmall-transmuting"; return; } ! 2051, case 2 if (R == R_1959) { print "Carry out Bodmall Bodmall-barkskinning"; return; } ! 2052, case 2 if (R == R_1961) { print "Instead of climbing the thorny bushes"; return; } ! 2053, case 2 if (R == R_1962) { print "Instead of entering the thorny bushes"; return; } ! 2054, case 2 if (R == R_1963) { print "Instead of taking the thorny bushes"; return; } ! 2055, case 2 if (R == R_1968) { print "Carry out Bodmall Bodmall-summoning"; return; } ! 2056, case 2 if (R == R_1969) { print "Report an actor hitting the dead Bodmall"; return; } ! 2057, case 2 if (R == R_1970) { print "Report Bodmall hitting a dead pc"; return; } ! 2058, case 2 if (R == R_1971) { print "Report Bodmall attacking"; return; } ! 2059, case 2 if (R == R_1972) { print "Report Bodmall dodging"; return; } ! 2060, case 2 if (R == R_1973) { print "Absorbing power of Bodmall"; return; } ! 2061, case 2 if (R == R_1974) { print "Repelling power of Bodmall"; return; } ! 2062, case 2 if (R == R_1976) { print "Check summoning thorns"; return; } ! 2063, case 2 if (R == R_1977) { print "Check summoning thorns"; return; } ! 2064, case 2 if (R == R_1978) { print "Carry out summoning thorns"; return; } ! 2065, case 2 if (R == R_1979) { print "When play begins"; return; } ! 2066, case 2 if (R == R_1982) { print "Last carry out Malygris teleporting"; return; } ! 2067, case 2 if (R == R_1983) { print "Every turn when Malygris-summon-countdown is not 0"; return; } ! 2068, case 2 if (R == R_1985) { print "Carry out Malygris unghouling"; return; } ! 2069, case 2 if (R == R_1986) { print "When play begins"; return; } ! 2070, case 2 if (R == R_1988) { print "Report an actor hitting the dead demonic assassin"; return; } ! 2071, case 2 if (R == R_1989) { print "Report the demonic assassin hitting a dead pc"; return; } ! 2072, case 2 if (R == R_1991) { print "When play begins"; return; } ! 2073, case 2 if (R == R_2002) { print "Instead of the Nameless Horror waiting"; return; } ! 2074, case 2 if (R == R_2003) { print "When play begins"; return; } ! 2075, case 2 if (R == R_2004) { print "Instead of eating a rotting limb"; return; } ! 2076, case 2 if (R == R_2005) { print "Instead of taking a rotting limb"; return; } ! 2077, case 2 if (R == R_2009) { print "Instead of smelling when the rotting corpse is in the location"; return; } ! 2078, case 2 if (R == R_2016) { print "Report an actor hitting the dead rotting corpse"; return; } ! 2079, case 2 if (R == R_2017) { print "Report the corpse hitting a dead pc"; return; } ! 2080, case 2 if (R == R_2018) { print "Report the corpse attacking"; return; } ! 2081, case 2 if (R == R_2019) { print "Report the corpse dodging"; return; } ! 2082, case 2 if (R == R_2020) { print "When play begins"; return; } ! 2083, case 2 if (R == R_2022) { print "Carry out the aswang aswang-shifting"; return; } ! 2084, case 2 if (R == R_2028) { print "Carry out the aswang aswang-hexing"; return; } ! 2085, case 2 if (R == R_2034) { print "Carry out the aswang aswang-fleeing"; return; } ! 2086, case 2 if (R == R_2037) { print "Report an actor hitting the dead aswang"; return; } ! 2087, case 2 if (R == R_2038) { print "Report the aswang hitting a dead pc"; return; } ! 2088, case 2 if (R == R_2039) { print "Report the aswang attacking"; return; } ! 2089, case 2 if (R == R_2040) { print "Report the aswang dodging"; return; } ! 2090, case 2 if (R == R_2043) { print "Check the abyss of the soul waiting"; return; } ! 2091, case 2 if (R == R_2044) { print "Carry out the abyss of the soul pulsating"; return; } ! 2092, case 2 if (R == R_2046) { print "Report an actor hitting the dead abyss of the soul"; return; } ! 2093, case 2 if (R == R_2047) { print "When play begins"; return; } ! 2094, case 2 if (R == R_2052) { print "Report an actor hitting the dead smoke demon"; return; } ! 2095, case 2 if (R == R_2053) { print "Report the smoke demon hitting a dead pc"; return; } ! 2096, case 2 if (R == R_2054) { print "Report the smoke demon attacking"; return; } ! 2097, case 2 if (R == R_2055) { print "Report the smoke demon parrying"; return; } ! 2098, case 2 if (R == R_2056) { print "Report the smoke demon dodging"; return; } ! 2099, case 2 if (R == R_2057) { print "Report the smoke demon concentrating"; return; } ! 2100, case 2 if (R == R_2059) { print "When play begins"; return; } ! 2101, case 2 if (R == R_2061) { print "Carry out the imp imping"; return; } ! 2102, case 2 if (R == R_2062) { print "Carry out the imp imp-grabbing"; return; } ! 2103, case 2 if (R == R_2065) { print "Report an actor hitting the dead imp"; return; } ! 2104, case 2 if (R == R_2066) { print "Report the imp hitting a dead pc"; return; } ! 2105, case 2 if (R == R_2067) { print "Report the imp attacking"; return; } ! 2106, case 2 if (R == R_2068) { print "Report the imp dodging"; return; } ! 2107, case 2 if (R == R_2070) { print "Instead of digging in Elemental Plane of Smoke"; return; } ! 2108, case 2 if (R == R_2071) { print "Instead of going in Elemental Plane of Smoke"; return; } ! 2109, case 2 if (R == R_2072) { print "Does the player mean entering the portal to Kerkerkruip"; return; } ! 2110, case 2 if (R == R_2073) { print "Instead of going outside in Elemental Plane of Smoke"; return; } ! 2111, case 2 if (R == R_2074) { print "Instead of exiting in Elemental Plane of Smoke"; return; } ! 2112, case 2 if (R == R_2075) { print "Instead of entering the portal to Kerkerkruip"; return; } ! 2113, case 2 if (R == R_2076) { print "Last carry out the ravenous armadillo armadillo-eating"; return; } ! 2114, case 2 if (R == R_2087) { print "Check looking when the player is dead"; return; } ! 2115, case 2 if (R == R_2090) { print "Check going to"; return; } ! 2116, case 2 if (R == R_2094) { print "Carry out going to"; return; } ! 2117, case 2 if (R == R_2095) { print "Instead of shorter going to"; return; } ! 2118, case 2 if (R == R_2098) { print "Carry out asking status"; return; } ! 2119, case 2 if (R == R_2101) { print "Last carry out examining a person"; return; } ! 2120, case 2 if (R == R_2102) { print "Carry out remembering"; return; } ! 2121, case 2 if (R == R_2106) { print "Carry out sensing"; return; } ! 2122, case 2 if (R == R_2108) { print "Carry out trophylisting"; return; } ! 2123, case 2 if (R == R_2109) { print "Carry out showing commands"; return; } ! 2124, case 2 if (R == R_2110) { print "Carry out praying"; return; } ! 2125, case 2 if (R == R_2111) { print "Carry out direction-jumping"; return; } ! 2126, case 2 if (R == R_2112) { print "Check equipping"; return; } ! 2127, case 2 if (R == R_2113) { print "Carry out equipping a weapon"; return; } ! 2128, case 2 if (R == R_2114) { print "Carry out equipping clothing"; return; } ! 2129, case 2 if (R == R_2115) { print "When play begins"; return; } ! 2130, case 2 if (R == R_2116) { print "Instead of singing"; return; } ! 2131, case 2 if (R == R_2117) { print "Instead of answering that"; return; } ! 2132, case 2 if (R == R_2118) { print "Instead of telling about"; return; } ! 2133, case 2 if (R == R_2119) { print "Instead of asking about"; return; } ! 2134, case 2 if (R == R_2120) { print "Instead of asking something for"; return; } ! 2135, case 2 if (R == R_2121) { print "Report talking to"; return; } ! 2136, case 2 if (R == R_2123) { print "Rule for constructing the status line"; return; } ! 2137, case 2 if (R == R_2125) { print "Carry out taking inventory"; return; } ! 2138, case 2 if (R == R_2126) { print "Report looking"; return; } ! 2139, case 2 if (R == R_2128) { print "Carry out plunking"; return; } ! 2140, case 2 if (R == R_2129) { print "Carry out plonking"; return; } ! 2141, case 2 if (R == R_2130) { print "Carry out ramboing"; return; } ! 2142, case 2 if (R == R_2131) { print "Carry out meatboying"; return; } ! 2143, case 2 if (R == R_2132) { print "Carry out reducing"; return; } ! 2144, case 2 if (R == R_2133) { print "Carry out testreadying"; return; } ! 2145, case 2 if (R == R_2134) { print "First when play begins"; return; } ! 2146, case 2 if (R == R_2150) { print "After printing the player's obituary"; return; } ! 2147, case 2 if (R == R_2151) { print "When play begins"; return; } ! 2148, case 2 if (R == R_2155) { print "Carry out asking for help"; return; } ! 2149, case 2 if (R == R_2169) { print "Carry out dodging"; return; } ! 2150, case 2 if (R == R_2170) { print "Carry out parrying"; return; } ! 2151, case 2 if (R == R_2173) { print "Carry out achievemenuing"; return; } ! 2152, case 2 if (R == R_8) { print "start in the correct scenes rule"; return; } ! 2153, case 1 if (R == POSITION_PLAYER_IN_MODEL_R) { print "position player in model world rule"; return; } ! 2154, case 1 if (R == UPDATE_CHRONOLOGICAL_RECORDS_R) { print "update chronological records rule"; return; } ! 2155, case 1 if (R == SEED_RANDOM_NUMBER_GENERATOR_R) { print "seed random number generator rule"; return; } ! 2156, case 1 if (R == VIRTUAL_MACHINE_STARTUP_R) { print "virtual machine startup rule"; return; } ! 2157, case 1 if (R == INITIALISE_MEMORY_R) { print "initialise memory rule"; return; } ! 2158, case 1 if (R == R_9) { print "when play begins stage rule"; return; } ! 2159, case 1 if (R == R_10) { print "fix baseline scoring rule"; return; } ! 2160, case 1 if (R == R_11) { print "display banner rule"; return; } ! 2161, case 1 if (R == R_12) { print "initial room description rule"; return; } ! 2162, case 1 if (R == GENERATE_ACTION_R) { print "generate action rule"; return; } ! 2163, case 1 if (R == PARSE_COMMAND_R) { print "parse command rule"; return; } ! 2164, case 1 if (R == TIMED_EVENTS_R) { print "timed events rule"; return; } ! 2165, case 1 if (R == ADVANCE_TIME_R) { print "advance time rule"; return; } ! 2166, case 1 if (R == UPDATE_CHRONOLOGICAL_RECORDS_R) { print "update chronological records rule"; return; } ! 2167, case 1 if (R == ADJUST_LIGHT_R) { print "adjust light rule"; return; } ! 2168, case 1 if (R == NOTE_OBJECT_ACQUISITIONS_R) { print "note object acquisitions rule"; return; } ! 2169, case 1 if (R == R_16) { print "notify score changes rule"; return; } ! 2170, case 1 if (R == R_17) { print "when play ends stage rule"; return; } ! 2171, case 1 if (R == RESURRECT_PLAYER_IF_ASKED_R) { print "resurrect player if asked rule"; return; } ! 2172, case 1 if (R == R_18) { print "print player's obituary rule"; return; } ! 2173, case 1 if (R == ASK_FINAL_QUESTION_R) { print "ask the final question rule"; return; } ! 2174, case 1 if (R == DetectSceneChange) { print "scene change machinery rule"; return; } ! 2175, case 1 if (R == R_21) { print "before stage rule"; return; } ! 2176, case 1 if (R == R_19) { print "set pronouns from items from multiple object lists rule"; return; } ! 2177, case 1 if (R == R_20) { print "announce items from multiple object lists rule"; return; } ! 2178, case 1 if (R == BASIC_VISIBILITY_R) { print "basic visibility rule"; return; } ! 2179, case 1 if (R == BASIC_ACCESSIBILITY_R) { print "basic accessibility rule"; return; } ! 2180, case 1 if (R == CARRYING_REQUIREMENTS_R) { print "carrying requirements rule"; return; } ! 2181, case 1 if (R == R_22) { print "instead stage rule"; return; } ! 2182, case 1 if (R == REQUESTED_ACTIONS_REQUIRE_R) { print "requested actions require persuasion rule"; return; } ! 2183, case 1 if (R == CARRY_OUT_REQUESTED_ACTIONS_R) { print "carry out requested actions rule"; return; } ! 2184, case 1 if (R == DESCEND_TO_SPECIFIC_ACTION_R) { print "descend to specific action-processing rule"; return; } ! 2185, case 1 if (R == R_23) { print "end action-processing in success rule"; return; } ! 2186, case 1 if (R == WORK_OUT_DETAILS_OF_SPECIFIC_R) { print "work out details of specific action rule"; return; } ! 2187, case 1 if (R == ACCESS_THROUGH_BARRIERS_R) { print "access through barriers rule"; return; } ! 2188, case 1 if (R == CANT_REACH_INSIDE_ROOMS_R) { print "can't reach inside rooms rule"; return; } ! 2189, case 1 if (R == CANT_REACH_INSIDE_CLOSED_R) { print "can't reach inside closed containers rule"; return; } ! 2190, case 1 if (R == CANT_REACH_OUTSIDE_CLOSED_R) { print "can't reach outside closed containers rule"; return; } ! 2191, case 1 if (R == R_35) { print "can't act in the dark rule"; return; } ! 2192, case 1 if (R == STANDARD_NAME_PRINTING_R) { print "standard name printing rule"; return; } ! 2193, case 1 if (R == R_59) { print "standard printing the plural name rule"; return; } ! 2194, case 1 if (R == R_60) { print "standard printing a number of something rule"; return; } ! 2195, case 1 if (R == STANDARD_CONTENTS_LISTING_R) { print "standard contents listing rule"; return; } ! 2196, case 1 if (R == R_61) { print "look around once light available rule"; return; } ! 2197, case 1 if (R == ENABLE_GLULX_ACCEL_R) { print "enable Glulx acceleration rule"; return; } ! 2198, case 1 if (R == PRINT_OBITUARY_HEADLINE_R) { print "print obituary headline rule"; return; } ! 2199, case 1 if (R == PRINT_FINAL_SCORE_R) { print "print final score rule"; return; } ! 2200, case 1 if (R == DISPLAY_FINAL_STATUS_LINE_R) { print "display final status line rule"; return; } ! 2201, case 1 if (R == R_69) { print "print the final question rule"; return; } ! 2202, case 1 if (R == R_68) { print "print the final prompt rule"; return; } ! 2203, case 1 if (R == READ_FINAL_ANSWER_R) { print "read the final answer rule"; return; } ! 2204, case 1 if (R == R_70) { print "standard respond to final question rule"; return; } ! 2205, case 1 if (R == R_91) { print "can't take component parts rule"; return; } ! 2206, case 1 if (R == R_148) { print "find what to enter rule"; return; } ! 2207, case 1 if (R == QUIT_THE_GAME_R) { print "quit the game rule"; return; } ! 2208, case 1 if (R == SAVE_THE_GAME_R) { print "save the game rule"; return; } ! 2209, case 1 if (R == RESTORE_THE_GAME_R) { print "restore the game rule"; return; } ! 2210, case 1 if (R == RESTART_THE_GAME_R) { print "restart the game rule"; return; } ! 2211, case 1 if (R == VERIFY_THE_STORY_FILE_R) { print "verify the story file rule"; return; } ! 2212, case 1 if (R == SWITCH_TRANSCRIPT_ON_R) { print "switch the story transcript on rule"; return; } ! 2213, case 1 if (R == SWITCH_TRANSCRIPT_OFF_R) { print "switch the story transcript off rule"; return; } ! 2214, case 1 if (R == ANNOUNCE_STORY_FILE_VERSION_R) { print "announce the story file version rule"; return; } ! 2215, case 1 if (R == ANNOUNCE_SCORE_R) { print "announce the score rule"; return; } ! 2216, case 1 if (R == PREFER_ABBREVIATED_R) { print "prefer abbreviated room descriptions rule"; return; } ! 2217, case 1 if (R == REP_PREFER_ABBREVIATED_R) { print "standard report preferring abbreviated room descriptions rule"; return; } ! 2218, case 1 if (R == PREFER_UNABBREVIATED_R) { print "prefer unabbreviated room descriptions rule"; return; } ! 2219, case 1 if (R == REP_PREFER_UNABBREVIATED_R) { print "standard report preferring unabbreviated room descriptions rule"; return; } ! 2220, case 1 if (R == PREFER_SOMETIMES_ABBREVIATED_R) { print "prefer sometimes abbreviated room descriptions rule"; return; } ! 2221, case 1 if (R == REP_PREFER_SOMETIMES_ABBR_R) { print "standard report preferring sometimes abbreviated room descriptions rule"; return; } ! 2222, case 1 if (R == SWITCH_SCORE_NOTIFY_ON_R) { print "switch score notification on rule"; return; } ! 2223, case 1 if (R == REP_SWITCH_NOTIFY_ON_R) { print "standard report switching score notification on rule"; return; } ! 2224, case 1 if (R == SWITCH_SCORE_NOTIFY_OFF_R) { print "switch score notification off rule"; return; } ! 2225, case 1 if (R == REP_SWITCH_NOTIFY_OFF_R) { print "standard report switching score notification off rule"; return; } ! 2226, case 1 if (R == ANNOUNCE_PRONOUN_MEANINGS_R) { print "announce the pronoun meanings rule"; return; } ! 2227, case 1 if (R == R_770) { print "mark items as seen on opening a container rule"; return; } ! 2228, case 1 if (R == R_837) { print "abide by the combat round rules rule"; return; } ! 2229, case 1 if (R == R_838) { print "inactive players don't increment the turn count rule"; return; } ! 2230, case 1 if (R == PARSE_COMMAND_R) { print "parse command rule"; return; } ! 2231, case 1 if (R == GENERATE_ACTION_R) { print "generate action rule"; return; } ! 2232, case 1 if (R == R_945) { print "update ambiguous pronouns for actions rule"; return; } ! 2233, case 1 if (R == R_1140) { print "alternative attack roll rule"; return; } ! 2234, case 1 if (R == R_1513) { print "alternative lose concentration when hit rule"; return; } ! 2235, case 1 if (R == R_1578) { print "alternative do not kill yourself rule"; return; } ! 2236, case 1 if (R == R_1579) { print "alternative do not attack friendly people rule"; return; } ! 2237, case 1 if (R == R_1580) { print "alternative do not attack neutral people rule"; return; } ! 2238, case 1 if (R == R_1776) { print "new concentration damage modifier rule"; return; } ! 2239, case 1 if (R == R_1827) { print "allow reaping faraway things rule"; return; } ! 2240, case 1 if (R == R_983) { print "standard show the attack damage dealt rule"; return; } ! 2241, case 1 print "(nameless rule at address ", R, ")"; } #ifnot; if ((R>=0) && (R 0) { ExchangeFields(i, j); f = true; break; } } ]; [ InsertionSortAlgorithm from to i j; if (to > from+1) { for (i = from+1: i < to: i++) { for (j = i: j > from: j--) { if (CompareFields(j, j-1) < 0) ExchangeFields(j, j-1); else break; } } } ]; [ InPlaceMergeSortAlgorithm from to middle; if (to - from < 12) { if (to - from < 2) return; InsertionSortAlgorithm(from, to); return; } middle = (from + to)/2; InPlaceMergeSortAlgorithm(from, middle); InPlaceMergeSortAlgorithm(middle, to); IPMS_Merge(from, middle, to, middle-from, to - middle); ]; [ IPMS_Lower from to val len half mid; len = to - from; while (len > 0) { half = len/2; mid = from + half; if (CompareFields(mid, val) < 0) { from = mid + 1; len = len - half -1; } else len = half; } return from; ]; [ IPMS_Upper from to val len half mid; len = to - from; while (len > 0) { half = len/2; mid = from + half; if (CompareFields(val, mid) < 0) len = half; else { from = mid + 1; len = len - half -1; } } return from; ]; [ IPMS_Reverse from to; while (from < to) { ExchangeFields(from++, to--); } ]; [ IPMS_Rotate from mid to n val shift p1 p2; if ((from==mid) || (mid==to)) return; IPMS_Reverse(from, mid-1); IPMS_Reverse(mid, to-1); IPMS_Reverse(from, to-1); ]; [ IPMS_Merge from pivot to len1 len2 first_cut second_cut len11 len22 new_mid; if ((len1 == 0) || (len2 == 0)) return; if (len1+len2 == 2) { if (CompareFields(pivot, from) < 0) ExchangeFields(pivot, from); return; } if (len1 > len2) { len11 = len1/2; first_cut = from + len11; second_cut = IPMS_Lower(pivot, to, first_cut); len22 = second_cut - pivot; } else { len22 = len2/2; second_cut = pivot + len22; first_cut = IPMS_Upper(from, pivot, second_cut); len11 = first_cut - from; } IPMS_Rotate(first_cut, pivot, second_cut); new_mid = first_cut + len22; IPMS_Merge(from, first_cut, new_mid, len11, len22); IPMS_Merge(new_mid, second_cut, to, len1 - len11, len2 - len22); ]; Constant TB_COLUMN_SIGNED $4000; Constant TB_COLUMN_TOPIC $2000; Constant TB_COLUMN_DONTSORTME $1000; Constant TB_COLUMN_NOBLANKBITS $0800; Constant TB_COLUMN_CANEXCHANGE $0400; Constant TB_COLUMN_ALLOCATED $0200; Constant TB_COLUMN_NUMBER $01ff; ! Mask to remove upper bit flags Constant COL_HSIZE 2; ! Column header size: two words (ID/flags, blank bits) [ TableFindCol tab col f i no_cols n; no_cols = tab-->0; for (i=1: i<=no_cols: i++) if (col == ((tab-->i)-->1) & TB_COLUMN_NUMBER) return i; if (f) { RunTimeProblem(RTP_TABLE_NOCOL, tab); return 0; } return 0; ]; [ TableRows tab first_col; first_col = tab-->1; if (first_col == 0) return 0; return (first_col-->0) - COL_HSIZE; ]; Constant TABLE_NOVALUE = IMPROBABLE_VALUE; Array CheckTableEntryIsBlank_LU -> $$00000001 $$00000010 $$00000100 $$00001000 $$00010000 $$00100000 $$01000000 $$10000000; Array CheckTableEntryIsNonBlank_LU -> $$11111110 $$11111101 $$11111011 $$11110111 $$11101111 $$11011111 $$10111111 $$01111111; [ CheckTableEntryIsBlank tab col row i at oldv flags; if (col >= 100) col = TableFindCol(tab, col); if (col == 0) rtrue; if ((tab-->col)-->(row+COL_HSIZE) ~= TABLE_NOVALUE) { print "*** CTEIB on nonblank value ", tab, " ", col, " ", row, " ***^"; } if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) rtrue; row--; at = DT_FindBlankBits(tab, col) + (row/8); if ((at->0) & (CheckTableEntryIsBlank_LU->(row%8))) rtrue; rfalse; ]; [ ForceTableEntryBlank tab col row i at oldv flags; if (col >= 100) col = TableFindCol(tab, col); if (col == 0) rtrue; flags = (tab-->col)-->1; oldv = (tab-->col)-->(row+COL_HSIZE); if ((flags & TB_COLUMN_ALLOCATED) && (oldv ~= 0 or TABLE_NOVALUE)) BlkFree(oldv); (tab-->col)-->(row+COL_HSIZE) = TABLE_NOVALUE; if (flags & TB_COLUMN_NOBLANKBITS) return; row--; at = DT_FindBlankBits(tab, col) + (row/8); (at->0) = (at->0) | (CheckTableEntryIsBlank_LU->(row%8)); ]; [ ForceTableEntryNonBlank tab col row i at oldv flags tc kov j; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rtrue; if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) return; flags = (tab-->col)-->1; oldv = (tab-->col)-->(row+COL_HSIZE); if ((flags & TB_COLUMN_ALLOCATED) && (oldv == 0 or TABLE_NOVALUE)) { kov = UNKNOWN_TY; tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = TC_KOV(tc); if (kov ~= UNKNOWN_TY) { if (KindBaseArity(kov) > 0) i = KindAtomic(kov); else i = 0; (tab-->col)-->(row+COL_HSIZE) = BlkValueCreate(kov, 0, i); } } row--; at = DT_FindBlankBits(tab, col) + (row/8); (at->0) = (at->0) & (CheckTableEntryIsNonBlank_LU->(row%8)); ]; [ TableSwapBlankBits tab row1 row2 col at1 at2 bit1 bit2; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rtrue; if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) return; row1--; at1 = DT_FindBlankBits(tab, col) + (row1/8); row2--; at2 = DT_FindBlankBits(tab, col) + (row2/8); bit1 = ((at1->0) & (CheckTableEntryIsBlank_LU->(row1%8))); bit2 = ((at2->0) & (CheckTableEntryIsBlank_LU->(row2%8))); if (bit1) bit1 = true; if (bit2) bit2 = true; if (bit1 == bit2) return; if (bit1) { (at1->0) = (at1->0) & (CheckTableEntryIsNonBlank_LU->(row1%8)); (at2->0) = (at2->0) | (CheckTableEntryIsBlank_LU->(row2%8)); } else { (at1->0) = (at1->0) | (CheckTableEntryIsBlank_LU->(row1%8)); (at2->0) = (at2->0) & (CheckTableEntryIsNonBlank_LU->(row2%8)); } ]; [ TableMoveBlankBitsDown tab row1 row2 col at atp1 bit rx bba; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rtrue; if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) return; row1--; row2--; ! Read blank bit for row1: bba = DT_FindBlankBits(tab, col); at = bba + (row1/8); bit = ((at->0) & (CheckTableEntryIsBlank_LU->(row1%8))); if (bit) bit = true; ! Loop through, setting each blank bit to the next: for (rx=row1:rx0) & (CheckTableEntryIsBlank_LU->((rx+1)%8))) { (at->0) = (at->0) | (CheckTableEntryIsBlank_LU->(rx%8)); } else { (at->0) = (at->0) & (CheckTableEntryIsNonBlank_LU->(rx%8)); } } ! Write bit to blank bit for row2: at = bba + (row2/8); if (bit) { (at->0) = (at->0) | (CheckTableEntryIsBlank_LU->(row2%8)); } else { (at->0) = (at->0) & (CheckTableEntryIsNonBlank_LU->(row2%8)); } ]; [ TableRowCorr tab col lookup_value lookup_col i j f; if (col >= 100) col=TableFindCol(tab, col, true); lookup_col = tab-->col; j = lookup_col-->0 - COL_HSIZE; f=0; if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) f=1; for (i=1:i<=j:i++) { if ((lookup_value == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; if (f) { if (BlkValueCompare(lookup_col-->(i+COL_HSIZE), lookup_value) == 0) return i; } else { if (lookup_col-->(i+COL_HSIZE) == lookup_value) return i; } } return RunTimeProblem(RTP_TABLE_NOCORR, tab); ]; [ ExistsTableRowCorr tab col entry i k v f kov; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rfalse; f=0; if (((tab-->col)-->1) & TB_COLUMN_TOPIC) f=1; else if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) f=2; k = TableRows(tab); for (i=1:i<=k:i++) { v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; switch (f) { 1: if ((v)(entry/100, entry%100) ~= GPR_FAIL) return i; 2: if (BlkValueCompare(v, entry) == 0) return i; default: if (v == entry) return i; } } ! print "Giving up^"; return 0; ]; [ TableLookUpCorr tab col1 col2 lookup_value write_flag write_value cola1 cola2 i j v f; if (col1 >= 100) col1=TableFindCol(tab, col1, true); if (col2 >= 100) col2=TableFindCol(tab, col2, true); cola1 = tab-->col1; cola2 = tab-->col2; j = cola2-->0; f=0; if (((tab-->col2)-->1) & TB_COLUMN_ALLOCATED) f=1; if (((tab-->col2)-->1) & TB_COLUMN_TOPIC) f=2; for (i=1+COL_HSIZE:i<=j:i++) { v = cola2-->i; if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col2,i-COL_HSIZE))) continue; if (f == 1) { if (BlkValueCompare(v, lookup_value) ~= 0) continue; } else if (f == 2) { if ((v)(lookup_value/100, lookup_value%100) == GPR_FAIL) continue; } else { if (v ~= lookup_value) continue; } if (write_flag) { ForceTableEntryNonBlank(tab,col1,i-COL_HSIZE); switch (write_flag) { 2: cola1-->i = cola1-->i + write_value; 3: cola1-->i = cola1-->i - write_value; default: cola1-->i = write_value; } rfalse; } v = cola1-->i; if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col1,i-COL_HSIZE))) continue; return v; } return RunTimeProblem(RTP_TABLE_NOCORR, tab); ]; [ ExistsTableLookUpCorr tab col1 col2 lookup_value cola1 cola2 i j f; if (col1 >= 100) col1=TableFindCol(tab, col1, false); if (col2 >= 100) col2=TableFindCol(tab, col2, false); if (col1*col2 == 0) rfalse; cola1 = tab-->col1; cola2 = tab-->col2; j = cola2-->0; f=0; if (((tab-->col2)-->1) & TB_COLUMN_ALLOCATED) f=1; if (((tab-->col2)-->1) & TB_COLUMN_TOPIC) f=2; for (i=1+COL_HSIZE:i<=j:i++) { if (f == 1) { if (BlkValueCompare(cola2-->i, lookup_value) ~= 0) continue; } else if (f == 2) { if ((cola2-->i)(lookup_value/100, lookup_value%100) == GPR_FAIL) continue; } else { if (cola2-->i ~= lookup_value) continue; } if ((cola1-->i == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col1,i-COL_HSIZE))) continue; rtrue; } rfalse; ]; [ TableLookUpEntry tab col index write_flag write_value v; if (col >= 100) col=TableFindCol(tab, col, true); if ((index < 1) || (index > TableRows(tab))) return RunTimeProblem(RTP_TABLE_NOROW, tab, index); if (write_flag) { switch(write_flag) { 1: ForceTableEntryNonBlank(tab,col,index); (tab-->col)-->(index+COL_HSIZE) = write_value; 2: ForceTableEntryNonBlank(tab,col,index); (tab-->col)-->(index+COL_HSIZE) = ((tab-->col)-->(index+COL_HSIZE)) + write_value; 3: ForceTableEntryNonBlank(tab,col,index); (tab-->col)-->(index+COL_HSIZE) = ((tab-->col)-->(index+COL_HSIZE)) - write_value; 4: ForceTableEntryBlank(tab,col,index); 5: ForceTableEntryNonBlank(tab,col,index); return ((tab-->col)-->(index+COL_HSIZE)); } rfalse; } v = ((tab-->col)-->(index+COL_HSIZE)); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,index))) return RunTimeProblem(RTP_TABLE_NOENTRY, tab, col, index); return v; ]; [ ExistsTableLookUpEntry tab col index v; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rfalse; if ((index<1) || (index > TableRows(tab))) rfalse; v = ((tab-->col)-->(index+COL_HSIZE)); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,index))) rfalse; rtrue; ]; [ TableRowIsBlank tab j k; for (k=1:k<=tab-->0:k++) { if (((tab-->k)-->(j+COL_HSIZE)) ~= TABLE_NOVALUE) rfalse; if (CheckTableEntryIsBlank(tab, k, j) == false) rfalse; } rtrue; ]; [ TableBlankOutRow tab row k; if (tab==0) return RunTimeProblem(RTP_TABLE_NOTABLE, tab); for (k=1:k<=tab-->0:k++) ForceTableEntryBlank(tab, k, row); ]; [ TableBlankOutColumn tab col n k; if (tab==0) return RunTimeProblem(RTP_TABLE_NOTABLE, tab); n = TableRows(tab); for (k=1:k<=n:k++) ForceTableEntryBlank(tab, col, k); ]; [ TableBlankOutAll tab n k; if (tab==0) return RunTimeProblem(RTP_TABLE_NOTABLE, tab); n = TableRows(tab); for (k=1:k<=n:k++) TableBlankOutRow(tab, k); ]; [ TableBlankRows tab i j c; i = TableRows(tab); !print i, " rows^"; for (j=1:j<=i:j++) if (TableRowIsBlank(tab, j)) c++; !print c, " blank^"; return c; ]; [ TableFilledRows tab; return TableRows(tab) - TableBlankRows(tab); ]; [ TableBlankRow tab i j; i = TableRows(tab); for (j=1:j<=i:j++) if (TableRowIsBlank(tab, j)) return j; RunTimeProblem(RTP_TABLE_NOMOREBLANKS, tab); return i; ]; [ TableRandomRow tab i j k; i = TableRows(tab); j = TableFilledRows(tab); if (j==0) return RunTimeProblem(RTP_TABLE_NOROWS, tab); if (j>1) j = random(j); for (k=1:k<=i:k++) { if (TableRowIsBlank(tab, k) == false) j--; if (j==0) return k; } ]; [ TableSwapRows tab i j k l v1 v2; if (i==j) return; l = tab-->0; for (k=1:k<=l:k++) { v1 = (tab-->k)-->(i+COL_HSIZE); v2 = (tab-->k)-->(j+COL_HSIZE); (tab-->k)-->(i+COL_HSIZE) = v2; (tab-->k)-->(j+COL_HSIZE) = v1; if ((v1 == TABLE_NOVALUE) || (v2 == TABLE_NOVALUE)) TableSwapBlankBits(tab, i, j, k); } ]; [ TableCompareRows tab col row1 row2 dir val1 val2 bl1 bl2 f; if (col >= 100) col=TableFindCol(tab, col, false); val1 = (tab-->col)-->(row1+COL_HSIZE); val2 = (tab-->col)-->(row2+COL_HSIZE); if (val1 == TABLE_NOVALUE) bl1 = CheckTableEntryIsBlank(tab,col,row1); if (val2 == TABLE_NOVALUE) bl2 = CheckTableEntryIsBlank(tab,col,row2); if ((val1 == val2) && (bl1 == bl2)) { if (val1 ~= TABLE_NOVALUE) return 0; if (bl1 == false) return 0; ! The two entries are both blank: if (TableRowIsBlank(tab, row1)) { if (TableRowIsBlank(tab, row2)) return 0; return -1*dir; } if (TableRowIsBlank(tab, row2)) return dir; return 0; } if (bl1) return dir; if (bl2) return -1*dir; f = ((tab-->col)-->1); if (f & TB_COLUMN_ALLOCATED) { if (BlkValueCompare(val2, val1) < 0) return 1; return -1; } else if (f & TB_COLUMN_SIGNED) { if (val1 > val2) return 1; return -1; } else { if (UnsignedCompare(val1, val2) > 0) return 1; return -1; } ]; [ TableMoveRowDown tab r1 r2 rx k l m v f; if (r1==r2) return; l = tab-->0; for (k=1:k<=l:k++) { f = false; m = (tab-->k)-->(r1+COL_HSIZE); if (m == TABLE_NOVALUE) f = true; for (rx=r1:rxk)-->(rx+COL_HSIZE+1); (tab-->k)-->(rx+COL_HSIZE) = v; if (v == TABLE_NOVALUE) f = true; } (tab-->k)-->(r2+COL_HSIZE) = m; if (f) TableMoveBlankBitsDown(tab, r1, r2, k); } ]; [ TableShuffle tab i to; TableMoveBlanksToBack(tab, 1, TableRows(tab)); to = TableFilledRows(tab); for (i=2:i<=to:i++) TableSwapRows(tab, i, random(i)); ]; [ TableNextRow tab col row dir i k val v dv min_dv min_at signed_arithmetic f; if (col >= 100) col=TableFindCol(tab, col, false); f = ((tab-->col)-->1); if (f & TB_COLUMN_ALLOCATED) RunTimeProblem(RTP_TABLE_CANTRUNTHROUGH, tab); signed_arithmetic = f & TB_COLUMN_SIGNED; #Iftrue (WORDSIZE == 2); if (row == 0) { if (signed_arithmetic) { if (dir == 1) val = $8000; else val = $7fff; } else { if (dir == 1) val = 0; else val = $ffff; } } else val = (tab-->col)-->(row+COL_HSIZE); if (signed_arithmetic) min_dv = $7fff; else min_dv = $ffff; #ifnot; ! WORDSIZE == 4 if (row == 0) { if (signed_arithmetic) { if (dir == 1) val = $80000000; else val = $7fffffff; } else { if (dir == 1) val = 0; else val = $ffffffff; } } else val = (tab-->col)-->(row+COL_HSIZE); if (signed_arithmetic) min_dv = $7fffffff; else min_dv = $ffffffff; #endif; k = TableRows(tab); if (dir == 1) { for (i=1:i<=k:i++) { v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; dv = dir*v; if (signed_arithmetic) f = (((dv > dir*val) || ((v == val) && (i>row))) && (dv < min_dv)); else f = (((UnsignedCompare(dv, dir*val) > 0) || ((v == val) && (i>row))) && (UnsignedCompare(dv, min_dv) < 0)); if (f) { min_dv = dv; min_at = i; } } } else { for (i=k:i>=1:i--) { v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; dv = dir*v; if (signed_arithmetic) f = (((dv > dir*val) || ((v == val) && (i 0) || ((v == val) && (i0) && (lnbl>0) && (fbl < lnbl)) { TableMoveRowDown(tab, fbl, lnbl); ! Move first blank just past last nonblank TableMoveBlanksToBack(tab, fbl, lnbl-1); } return torow-blc; ! Final non-blank row ]; [ TableSort tab col dir test_flag algorithm i j k f; for (i=1:i<=tab-->0:i++) { j = tab-->i; ! Address of column table if ((j-->1) & TB_COLUMN_DONTSORTME) return RunTimeProblem(RTP_TABLE_CANTSORT, tab); } if (col >= 100) col=TableFindCol(tab, col, false); k = TableRows(tab); k = TableMoveBlanksToBack(tab, 1, k); if (test_flag) { print "After moving blanks to back:^"; TableColumnDebug(tab, col); } SetSortDomain(TableSwapRows, TableCompareRows); SortArray(tab, col, dir, k, test_flag, algorithm); if (test_flag) { print "Final state:^"; TableColumnDebug(tab, col); } ]; [ PrintTableName T; switch(T) { TheEmptyTable: print "(the empty table)"; return; T0_final_question_options: print "Table of Final Question Options"; return; T1_locale_priorities: print "Table of Locale Priorities"; return; T2_sample_options: print "Table of Sample Options"; return; T3_menu_commands: print "Table of Menu Commands"; return; T4_shallow_menu_status: print "Table of Shallow Menu Status"; return; T5_deep_menu_status: print "Table of Deep Menu Status"; return; T6_sample_hints: print "Table of Sample Hints"; return; T8_ordinary_status: print "Table of Ordinary Status"; return; T9_delayed_actions: print "Table of Delayed Actions"; return; T10_ai_target_options: print "Table of AI Target Options"; return; T11_ai_action_options: print "Table of AI Action Options"; return; T12_ai_weapon_options: print "Table of AI Weapon Options"; return; T13_suitable_rooms: print "Table of Suitable Rooms"; return; T14_monster_rooms: print "Table of Monster Rooms"; return; T15_suitable_monsters: print "Table of Suitable Monsters"; return; T16_materials: print "Table of Materials"; return; T17_scroll_effects: print "Table of Scroll Effects"; return; T18_magic_scrolls: print "Table of Magic Scrolls"; return; T19_tome_possibilities: print "Table of Tome Possibilities"; return; T20_fancy_status: print "Table of Fancy Status"; return; T21_victories: print "Table of Victories"; return; T22_kerkerkruip_help: print "Table of Kerkerkruip Help"; return; T23_new_player_help: print "Table of New Player Help"; return; T24_advanced_help: print "Table of Advanced Help"; return; T25_achievements: print "Table of Achievements"; return; T26_held_achievements: print "Table of Held Achievements"; return; T27_achievement_menu: print "Table of Achievement Menu"; return; default: if (DT_IsFullyDynamic(T)) print "** Dynamically created table **"; else print "** No such table **"; } ]; [ TablePrint tab i j k row col v tc kov; for (i=1:i<=tab-->0:i++) { j = tab-->i; ! Address of column table if (((j-->1) & TB_COLUMN_CANEXCHANGE) == 0) rtrue; } k = TableRows(tab); k = TableMoveBlanksToBack(tab, 1, k); print "! ", (PrintTableName) tab, " (", k, ")^"; for (row=1:row<=k:row++) { for (col=1:col<=tab-->0:col++) { tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = KindAtomic(TC_KOV(tc)); if (kov == UNKNOWN_TY) kov = NUMBER_TY; v = (tab-->col)-->(row+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,row))) print "-- "; else { if (BlkValueWriteToFile(v, kov) == false) print v; print " "; } } print "^"; } rfalse; ]; #ifdef TARGET_GLULX; [ TableRead tab auxf row maxrow col ch v sgn dg j tc kov; for (col=1:col<=tab-->0:col++) { j = tab-->col; ! Address of column table if (((j-->1) & TB_COLUMN_CANEXCHANGE) == 0) return RunTimeProblem(RTP_TABLE_CANTSAVE, tab); } maxrow = TableRows(tab); !print maxrow, " rows available.^"; for (row=1: row<=maxrow: row++) { TableBlankOutRow(tab, row); } for (row=1: row<=maxrow: row++) { !print "Reading row ", row, "^"; ch = FileIO_GetC(auxf); if (ch == '!') { while (ch ~= -1 or 10 or 13) ch = FileIO_GetC(auxf); while (ch == 10 or 13) ch = FileIO_GetC(auxf); } for (col=1: col<=tab-->0: col++) { if (ch == -1) { row++; jump NoMore; } if (ch == 10 or 13) break; tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = KindAtomic(TC_KOV(tc)); if (kov == UNKNOWN_TY) kov = NUMBER_TY; !print "tc = ", tc, " kov = ", kov, "^"; sgn = 1; if (ch == '-') { ch = FileIO_GetC(auxf); if (ch == -1) jump NotTable; if (ch == '-') { ch = FileIO_GetC(auxf); jump EntryDone; } sgn = -1; } if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) ForceTableEntryNonBlank(tab, col, row); !print "A"; v = BlkValueReadFromFile(0, 0, -1, kov); if (v) { if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) v = BlkValueReadFromFile(TableLookUpEntry(tab, col, row), auxf, ch, kov); else v = BlkValueReadFromFile(0, auxf, ch, kov); ch = 32; } else { dg = ch - '0'; if ((dg < 0) || (dg > 9)) jump NotTable; v = dg; for (::) { ch = FileIO_GetC(auxf); dg = ch - '0'; if ((dg < 0) || (dg > 9)) break; v = 10*v + dg; } v = v*sgn; } !print "v=", v, " "; if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED == 0) TableLookUpEntry(tab, col, row, true, v); .EntryDone; !print "First nd is ", ch, "^"; while (ch == 9 or 32) ch = FileIO_GetC(auxf); } while (ch ~= -1 or 10 or 13) { if ((ch ~= '-') && (((ch-'0')<0) || ((ch-'0')>9))) jump NotTable; if (ch ~= 9 or 32) jump WontFit; ch = FileIO_GetC(auxf); } } .NoMore; while (ch == 9 or 32 or 10 or 13) ch = FileIO_GetC(auxf); if (ch == -1) return; .WontFit; return RunTimeProblem(RTP_TABLE_WONTFIT, tab); .NotTable; return RunTimeProblem(RTP_TABLE_BADFILE, tab); ]; #ENDIF; ! TARGET_GLULX [ PrintRank i j v; #ifdef RANKING_TABLE; L__M(##Score, 3); j = TableRows(RANKING_TABLE); for (i=j:i>=1:i--) if (score >= TableLookUpEntry(RANKING_TABLE, 1, i)) { v = TableLookUpEntry(RANKING_TABLE, 2, i); if (v ofclass String) print (string) v; else v(); "."; } #endif; "."; ]; [ TableColumnDebug tab col k i v; if (col >= 100) col=TableFindCol(tab, col, false); k = TableRows(tab); print "Table col ", col, ": "; for (i=1:i<=k:i++) { v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) print "BLANK "; else print v, " "; } print "*^"; ]; [ HolderOf o; if (InitialSituation-->DONE_INIS == false) return thedark; if (o && (o.component_parent)) return o.component_parent; if (o && (parent(o))) return parent(o); return nothing; ]; [ ParentOf o; if (o) o = parent(o); return o; ]; [ CoreOf o; while (o && (o provides component_parent) && (o.component_parent)) o = o.component_parent; return o; ]; [ CoreOfParentOfCoreOf o; while (o && (o provides component_parent) && (o.component_parent)) o = o.component_parent; if (o) o = parent(o); while (o && (o provides component_parent) && (o.component_parent)) o = o.component_parent; return o; ]; [ LocationOf o; if (~~(O ofclass K1_room or K2_thing)) return nothing; if (O ofclass K4_door) return FrontSideOfDoor(O); if (O ofclass K7_backdrop) return nothing; while (o) { if (o ofclass K1_room) return o; o = CoreOfParentOfCoreOf(o); } return nothing; ]; [ CommonAncestor o1 o2 i j; o1 = CoreOf(o1); o2 = CoreOf(o2); for (i=o1: i: i = CoreOfParentOfCoreOf(i)) for (j=o2: j: j = CoreOfParentOfCoreOf(j)) if (j == i) return j; return nothing; ]; [ IndirectlyContains o1 o2; if ((o1 == nothing) || (o2 == nothing)) rfalse; if ((o1 ofclass K1_room) && (o2 ofclass K4_door)) { if (o1 == FrontSideOfDoor(o2)) rtrue; if (o1 == BackSideOfDoor(o2)) rtrue; rfalse; } if (o2 ofclass K7_backdrop) rfalse; for (o2 = HolderOf(o2) : o2 && o2 ~= thedark : o2 = HolderOf(o2)) if (o2 == o1) rtrue; rfalse; ]; [ WhetherIn obj; if (obj has enterable) { if (IndirectlyContains(obj, player)) rtrue; rfalse; } if (obj ofclass K9_region) return TestRegionalContainment(real_location, obj); if (obj ofclass K1_room) { if (obj == real_location) rtrue; rfalse; } RunTimeProblem(RTP_NOTINAROOM, obj); rfalse; ]; [ ContainerOf A p; if (A ofclass K1_room) return A.map_region; p = parent(A); if (p == nothing) return nothing; if (p ofclass K5_container) return p; if (p ofclass K1_room) return p; if (p ofclass K9_region) return p; return nothing; ]; [ TestContainmentRange obj e f; if (obj ofclass K9_region) { objectloop (f ofclass K1_room && f.map_region == obj) if (f > e) return f; return nothing; } if (obj ofclass K5_container or K1_room) { if (e == nothing) return child(obj); return sibling(e); } return nothing; ]; [ SupporterOf obj p; p = parent(obj); if (p == nothing) return nothing; if (p ofclass K6_supporter) return p; return nothing; ]; [ CarrierOf obj p; p = parent(obj); if (p && (p ofclass K8_person) && (obj hasnt worn)) return p; return nothing; ]; [ WearerOf obj p; p = parent(obj); if (p && (p ofclass K8_person) && (obj has worn)) return p; return nothing; ]; [ OwnerOf obj p; p = parent(obj); if (p && (p ofclass K8_person)) return p; return nothing; ]; [ MakePart P Of First; if (parent(P)) remove P; give P ~worn; if (Of == nothing) { DetachPart(P); return; } if (P.component_parent) DetachPart(P); P.component_parent = Of; First = Of.component_child; Of.component_child = P; P.component_sibling = First; ]; [ DetachPart P From Daddy O; Daddy = P.component_parent; P.component_parent = nothing; if (Daddy == nothing) { P.component_sibling = nothing; return; } if (Daddy.component_child == P) { Daddy.component_child = P.component_sibling; P.component_sibling = nothing; return; } for (O = Daddy.component_child: O: O = O.component_sibling) if (O.component_sibling == P) { O.component_sibling = P.component_sibling; P.component_sibling = nothing; return; } ]; [ MoveObject F T opt going_mode was; if (F == nothing) return RunTimeProblem(RTP_CANTMOVENOTHING); if (F ofclass K7_backdrop) { if (T ofclass K9_region) { give F ~absent; F.found_in = T.regional_found_in; if (TestRegionalContainment(LocationOf(player), T)) move F to LocationOf(player); else remove F; return; } return RunTimeProblem(RTP_BACKDROP, F, T); } if (~~(F ofclass K2_thing)) return RunTimeProblem(RTP_NOTTHING, F, T); if (T ofclass K9_region) return RunTimeProblem(RTP_NOTBACKDROP, F, T); if (F has worn) { give F ~worn; if (F in T) return; } DetachPart(F); if (going_mode == false) { if (F == player) { PlayerTo(T, opt); return; } if ((IndirectlyContains(F, player)) && (LocationOf(player) ~= LocationOf(T))) { was = parent(player); move player to real_location; move F to T; PlayerTo(was, true); return; } } move F to T; ]; [ RemoveFromPlay F; if (F == nothing) return RunTimeProblem(RTP_CANTREMOVENOTHING); if (F == player) return RunTimeProblem(RTP_CANTREMOVEPLAYER); if (F ofclass K4_door) return RunTimeProblem(RTP_CANTREMOVEDOORS); give F ~worn; DetachPart(F); if (F ofclass K7_backdrop) give F absent; remove F; ]; [ OnStage O set x; if (O ofclass K1_room) rfalse; if (set < 0) { while (metaclass(O) == Object) { if (O ofclass K1_room) rtrue; if (O ofclass K9_region) rfalse; if (O ofclass K4_door) rtrue; if (O ofclass K7_backdrop) { if (O has absent) rfalse; rtrue; } x = O.component_parent; if (x) { O = x; continue; } x = parent(O); if (x) { O = x; continue; } rfalse; } } x = OnStage(O, -1); if ((x) && (set == false)) RemoveFromPlay(O); if ((x == false) && (set)) MoveObject(O, real_location); rfalse; ]; [ PlayerTo newplace flag; @push actor; actor = player; move player to newplace; location = LocationOf(newplace); real_location = location; MoveFloatingObjects(); SilentlyConsiderLight(); DivideParagraphPoint(); if (flag == 0) ; if (flag == 1) give location visited; if (flag == 2) AbbreviatedRoomDescription(); @pull actor; ]; [ MoveDuringGoing F T; MoveObject(F, T, 0, true); if (actor == player) { location = LocationOf(player); real_location = location; } ]; [ FoundEverywhere; rtrue; ]; [ ChangePlayer obj flag i; if (~~(obj ofclass K8_person)) return RunTimeProblem(RTP_CANTCHANGE, obj); if (~~(OnStage(obj, -1))) return RunTimeProblem(RTP_CANTCHANGEOFFSTAGE, obj); if (obj == player) return; give player ~concealed; if (player has remove_proper) give player ~proper; if (player == selfobj) { player.saved_short_name = player.short_name; player.short_name = FORMER__TX; } player = obj; if (player == selfobj) { player.short_name = player.saved_short_name; } if (player hasnt proper) give player remove_proper; ! when changing out again give player concealed proper; location = LocationOf(player); real_location = location; MoveFloatingObjects(); SilentlyConsiderLight(); ]; [ MoveFloatingObjects i k l m address flag; if (real_location == nothing) return; objectloop (i) { address = i.&found_in; if (address ~= 0 && i hasnt absent) { if (ZRegion(address-->0) == 2) { m = address-->0; .TestPropositionally; if (m.call(real_location) ~= 0) move i to real_location; else remove i; } else { k = i.#found_in; for (l=0 : ll; if (ZRegion(m) == 2) jump TestPropositionally; if (m == real_location || m in real_location) { if (i notin real_location) move i to real_location; flag = true; } } if (flag == false) { if (parent(i)) remove i; } } } } ]; [ MoveBackdrop bd D x address; if (~~(bd ofclass K7_backdrop)) return RunTimeProblem(RTP_BACKDROPONLY, bd); if (bd.#found_in > WORDSIZE) { address = bd.&found_in; address-->0 = D; } else bd.found_in = D; give bd ~absent; MoveFloatingObjects(); ]; [ WearObject X P opt; if (X == false) rfalse; if (X notin P) MoveObject(X, P, opt); give X worn; ]; [ MapConnection from_room dir in_direction through_door; if ((from_room ofclass K1_room) && (dir ofclass K3_direction)) { in_direction = Map_Storage--> ((from_room.IK1_Count)*No_Directions + dir.IK3_Count); if (in_direction ofclass K1_room) return in_direction; if (in_direction ofclass K4_door) { @push location; location = from_room; through_door = in_direction.door_to(); @pull location; if (through_door ofclass K1_room) return through_door; } } return nothing; ]; [ DoorFrom obj dir rv; rv = RoomOrDoorFrom(obj, dir); if (rv ofclass K4_door) return rv; return nothing; ]; [ RoomOrDoorFrom obj dir use_doors in_direction sl through_door; if ((obj ofclass K1_room) && (dir ofclass K3_direction)) { in_direction = Map_Storage--> ((obj.IK1_Count)*No_Directions + dir.IK3_Count); if (in_direction ofclass K1_room or K4_door) return in_direction; } return nothing; ]; [ AssertMapConnection r1 dir r2 in_direction; SignalMapChange(); in_direction = Map_Storage--> ((r1.IK1_Count)*No_Directions + dir.IK3_Count); if ((in_direction == 0) || (in_direction ofclass K1_room)) { Map_Storage-->((r1.IK1_Count)*No_Directions + dir.IK3_Count) = r2; return; } if (in_direction ofclass K4_door) { RunTimeProblem(RTP_EXITDOOR, r1, dir); return; } RunTimeProblem(RTP_NOEXIT, r1, dir); ]; [ AssertMapUnconnection r1 dir r2 in_direction; SignalMapChange(); in_direction = Map_Storage--> ((r1.IK1_Count)*No_Directions + dir.IK3_Count); if (r1 ofclass K4_door) { RunTimeProblem(RTP_EXITDOOR, r1, dir); return; } if (in_direction == r2) Map_Storage-->((r1.IK1_Count)*No_Directions + dir.IK3_Count) = 0; return; ]; [ TestAdjacency R1 R2 i row; row = (R1.IK1_Count)*No_Directions; for (i=0: irow == R2) rtrue; rfalse; ]; [ TestRegionalContainment obj region o; if ((obj == nothing) || (region == nothing)) rfalse; if (~~(obj ofclass K1_room)) obj = LocationOf(obj); if (obj == nothing) rfalse; o = obj.map_region; while (o) { if (o == region) rtrue; o = parent(o); } rfalse; ]; [ FrontSideOfDoor D; if (~~(D ofclass K4_door)) rfalse; if (D provides found_in) return (D.&found_in)-->0; ! Two-sided return parent(D); ! One-sided ]; [ BackSideOfDoor D; if (~~(D ofclass K4_door)) rfalse; if (D provides found_in) return (D.&found_in)-->1; ! Two-sided return nothing; ! One-sided ]; [ OtherSideOfDoor D from_room rv; if (D ofclass K4_door) { @push location; location = LocationOf(from_room); rv = D.door_to(); @pull location; } return rv; ]; [ DirectionDoorLeadsIn D from_room rv dir; if (D ofclass K4_door) { @push location; location = LocationOf(from_room); rv = D.door_dir(); @pull location; } return rv; ]; [ TestVisibility A B; if (~~OffersLight(parent(CoreOf(A)))) rfalse; if (suppress_scope_loops) rtrue; return TestScope(B, A); ]; [ TestTouchability A B; if (TestScope(B,A) == false) rfalse; if (ObjectIsUntouchable(B, 1, 0, A)) rfalse; rtrue; ]; [ TestConcealment A B; if (A ofclass K2_thing && B ofclass K2_thing) { particular_possession = B; if (CarryOutActivity(DECIDING_CONCEALED_POSSESS_ACT, A)) rtrue; } rfalse; ]; [ Mistake_Token_318; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 418; return GPR_PREPOSITION; ]; [ Cond_Token_163 ; if (((((~~Adj_33_t1_v9(self)))))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_164 ; if (((((Adj_33_t1_v9(self)))))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_191 ; if ((((GProperty(OBJECT_TY, self,p50_heat_strength) > 0)))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_192 ; if ((((GProperty(OBJECT_TY, self,p50_heat_strength) > 2)))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_193 ; if ((((GProperty(OBJECT_TY, self,p50_heat_strength) > 5)))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_195 ; if (((((Adj_205_t1_v9(self)))))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Mistake_Token_317; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 417; return GPR_PREPOSITION; ]; [ Mistake_Token_415; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 515; return GPR_PREPOSITION; ]; [ DECIMAL_TOKEN wnc wna r n wa wl sign base digit digit_count original_wn group_wn; wnc = wn; original_wn = wn; group_wn = wn; wn = wnc; r = ParseTokenStopped(ELEMENTARY_TT, NUMBER_TOKEN); if ((r == GPR_NUMBER) && (parsed_number ~= 10000)) return r; wn = wnc; wa = WordAddress(wn); wl = WordLength(wn); sign = 1; base = 10; digit_count = 0; if (wa->0 ~= '-' or '$' or '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9') return GPR_FAIL; if (wa->0 == '-') { sign = -1; wl--; wa++; } if (wl == 0) return GPR_FAIL; n = 0; while (wl > 0) { if (wa->0 >= 'a') digit = wa->0 - 'a' + 10; else digit = wa->0 - '0'; digit_count++; switch (base) { 2: if (digit_count == 17) return GPR_FAIL; 10: #Iftrue (WORDSIZE == 2); if (digit_count == 6) return GPR_FAIL; if (digit_count == 5) { if (n > 3276) return GPR_FAIL; if (n == 3276) { if (sign == 1 && digit > 7) return GPR_FAIL; if (sign == -1 && digit > 8) return GPR_FAIL; } } #Ifnot; ! i.e., if (WORDSIZE == 4) if (digit_count == 11) return GPR_FAIL; if (digit_count == 10) { if (n > 214748364) return GPR_FAIL; if (n == 214748364) { if (sign == 1 && digit > 7) return GPR_FAIL; if (sign == -1 && digit > 8) return GPR_FAIL; } } #Endif; 16: if (digit_count == 5) return GPR_FAIL; } if (digit >= 0 && digit < base) n = base*n + digit; else return GPR_FAIL; wl--; wa++; } parsed_number = n*sign; wn++; return GPR_NUMBER; ]; [ TRUTH_STATE_TOKEN original_wn wd; original_wn = wn; wn = original_wn; wd = NextWordStopped(); if (wd == 'true') { parsed_number = 1; return GPR_NUMBER; } if (wd == 'false') { parsed_number = 0; return GPR_NUMBER; } wn = original_wn; return GPR_FAIL; ]; [ RoundOffTime t1 t2; return ((t1+t2/2)/t2)*t2; ]; [ SquareRoot num op res one; op = num; if (num < 0) { RunTimeProblem(RTP_NEGATIVEROOT); return 1; } ! "one" starts at the highest power of four <= the argument. for (one = WORD_NEXTTOHIGHBIT: one > op: one = one/4) ; while (one ~= 0) { !print "Round: op = ", op, " res = ", res, ", res**2 = ", res*res, " one = ", one, "^"; if (op >= res + one) { op = op - res - one; res = res + one*2; } res = res/2; one = one/4; } !print "Res is ", res, "^"; return res; ]; [ CubeRoot num x y n; if (num < 0) x = -SquareRoot(-num); else x = SquareRoot(num); for (n=0: (y ~= x) && (n++ < 100): y = x, x = (2*x + num/x/x)/3) ; return x; ]; [ PrintTimeOfDay t h aop; if (t<0) { print ""; return; } if (t >= TWELVE_HOURS) { aop = "pm"; t = t - TWELVE_HOURS; } else aop = "am"; h = t/ONE_HOUR; if (h==0) h=12; print h, ":"; if (t%ONE_HOUR < 10) print "0"; print t%ONE_HOUR, " ", (string) aop; ]; [ PrintTimeOfDayEnglish t h m dir aop; h = (t/ONE_HOUR) % 12; m = t%ONE_HOUR; if (h==0) h=12; if (m==0) { print (number) h, " o'clock"; return; } dir = "past"; if (m > HALF_HOUR) { m = ONE_HOUR-m; h = (h+1)%12; if (h==0) h=12; dir = "to"; } switch(m) { QUARTER_HOUR: print "quarter"; HALF_HOUR: print "half"; default: print (number) m; if (m%5 ~= 0) { if (m == 1) print " minute"; else print " minutes"; } } print " ", (string) dir, " ", (number) h; ]; [ TIME_TOKEN first_word second_word at length flag illegal_char offhour hr mn i original_wn; original_wn = wn; wn = original_wn; first_word = NextWordStopped(); switch (first_word) { 'midnight': parsed_number = 0; return GPR_NUMBER; 'midday', 'noon': parsed_number = TWELVE_HOURS; return GPR_NUMBER; } ! Next try the format 12:02 at = WordAddress(wn-1); length = WordLength(wn-1); for (i=0: ii) { ':': if (flag == false && i>0 && i 5 || illegal_char) flag = false; if (flag) { for (i=0: at->i~=':': i++, hr=hr*10) hr = hr + at->i - '0'; hr = hr/10; for (i++: ii - '0'; mn = mn/10; second_word = NextWordStopped(); parsed_number = HoursMinsWordToTime(hr, mn, second_word); if (parsed_number == -1) return GPR_FAIL; if (second_word ~= 'pm' or 'am') wn--; return GPR_NUMBER; } ! Lastly the wordy format offhour = -1; if (first_word == 'half') offhour = HALF_HOUR; if (first_word == 'quarter') offhour = QUARTER_HOUR; if (offhour < 0) offhour = TryNumber(wn-1); if (offhour < 0 || offhour >= ONE_HOUR) return GPR_FAIL; second_word = NextWordStopped(); switch (second_word) { ! "six o'clock", "six" 'o^clock', 'am', 'pm', -1: hr = offhour; if (hr > 12) return GPR_FAIL; ! "quarter to six", "twenty past midnight" 'to', 'past': mn = offhour; hr = TryNumber(wn); if (hr <= 0) { switch (NextWordStopped()) { 'noon', 'midday': hr = 12; 'midnight': hr = 0; default: return GPR_FAIL; } } if (hr >= 13) return GPR_FAIL; if (second_word == 'to') { mn = ONE_HOUR-mn; hr--; if (hr<0) hr=23; } wn++; second_word = NextWordStopped(); ! "six thirty" default: hr = offhour; mn = TryNumber(--wn); if (mn < 0 || mn >= ONE_HOUR) return GPR_FAIL; wn++; second_word = NextWordStopped(); } parsed_number = HoursMinsWordToTime(hr, mn, second_word); if (parsed_number < 0) return GPR_FAIL; if (second_word ~= 'pm' or 'am' or 'o^clock') wn--; return GPR_NUMBER; ]; [ HoursMinsWordToTime hour minute word x; if (hour >= 24) return -1; if (minute >= ONE_HOUR) return -1; x = hour*ONE_HOUR + minute; if (hour >= 13) return x; x = x % TWELVE_HOURS; if (word == 'pm') x = x + TWELVE_HOURS; if (word ~= 'am' or 'pm' && hour == 12) x = x + TWELVE_HOURS; return x; ]; [ RELATIVE_TIME_TOKEN first_word second_word offhour mult mn original_wn; original_wn = wn; wn = original_wn; first_word = NextWordStopped(); wn--; if (first_word == 'an' or 'a//') mn=1; else mn=TryNumber(wn); if (mn == -1000) { first_word = NextWordStopped(); if (first_word == 'half') offhour = HALF_HOUR; if (first_word == 'quarter') offhour = QUARTER_HOUR; if (offhour > 0) { second_word = NextWordStopped(); if (second_word == 'of') second_word = NextWordStopped(); if (second_word == 'an') second_word = NextWordStopped(); if (second_word == 'hour') { parsed_number = offhour; return GPR_NUMBER; } } return GPR_FAIL; } wn++; first_word = NextWordStopped(); switch (first_word) { 'minutes', 'minute': mult = 1; 'hours', 'hour': mult = 60; default: return GPR_FAIL; } parsed_number = mn*mult; if (mult == 60) { mn=TryNumber(wn); if (mn ~= -1000) { wn++; first_word = NextWordStopped(); if (first_word == 'minutes' or 'minute') parsed_number = parsed_number + mn; else wn = wn - 2; } } return GPR_NUMBER; ]; [ DuringSceneMatching prop sc; for (sc=0: scsc == 1) && (prop(sc+1))) rtrue; rfalse; ]; [ SceneUtility sc task; if (sc <= 0) return 0; if (task == 1 or 2) { if (scene_endings-->(sc-1) == 0) return RunTimeProblem(RTP_SCENEHASNTSTARTED, sc); } else { if (scene_endings-->(sc-1) <= 1) return RunTimeProblem(RTP_SCENEHASNTENDED, sc); } switch (task) { 1: return (the_time - scene_started-->(sc-1))%(TWENTY_FOUR_HOURS); 2: return scene_started-->(sc-1); 3: return (the_time - scene_ended-->(sc-1))%(TWENTY_FOUR_HOURS); 4: return scene_ended-->(sc-1); } ]; [ Kind_GPR_10 original_wn group_wn v wpos mid_word matched_number cur_word cur_len cur_addr sgn tot f w rv x; original_wn = wn; return GPR_FAIL; ]; [ Kind_GPR_50 original_wn group_wn v wpos mid_word matched_number cur_word cur_len cur_addr sgn tot f w rv x; original_wn = wn; if (NextWordStopped() ~= 'wooden') jump Fail_1; parsed_number = I170_wood; return GPR_NUMBER; .Fail_1; wn = original_wn; if (NextWordStopped() ~= 'radiant') jump Fail_2; parsed_number = I176_radiance; return GPR_NUMBER; .Fail_2; wn = original_wn; if (NextWordStopped() ~= 'adamantine') jump Fail_3; parsed_number = I177_adamant; return GPR_NUMBER; .Fail_3; wn = original_wn; if (NextWordStopped() ~= 'vapourous') jump Fail_4; parsed_number = I178_vapour; return GPR_NUMBER; .Fail_4; wn = original_wn; if (NextWordStopped() ~= 'vapor') jump Fail_5; parsed_number = I178_vapour; return GPR_NUMBER; .Fail_5; wn = original_wn; if (NextWordStopped() ~= 'vaporous') jump Fail_6; parsed_number = I178_vapour; return GPR_NUMBER; .Fail_6; wn = original_wn; wn = original_wn; wn = original_wn;if (NextWordStopped() ~= 'dragon') jump Failed_1; if (NextWordStopped() ~= 'skin') jump Failed_1; parsed_number = I175_dragon_skin; return GPR_NUMBER; .Failed_1; wn = original_wn;if (NextWordStopped() ~= 'other-material') jump Failed_2; parsed_number = I165_other_material; return GPR_NUMBER; .Failed_2; wn = original_wn;if (NextWordStopped() ~= 'iron') jump Failed_3; parsed_number = I166_iron; return GPR_NUMBER; .Failed_3; wn = original_wn;if (NextWordStopped() ~= 'silver') jump Failed_4; parsed_number = I167_silver; return GPR_NUMBER; .Failed_4; wn = original_wn;if (NextWordStopped() ~= 'paper') jump Failed_5; parsed_number = I168_paper; return GPR_NUMBER; .Failed_5; wn = original_wn;if (NextWordStopped() ~= 'cloth') jump Failed_6; parsed_number = I169_cloth; return GPR_NUMBER; .Failed_6; wn = original_wn;if (NextWordStopped() ~= 'wood') jump Failed_7; parsed_number = I170_wood; return GPR_NUMBER; .Failed_7; wn = original_wn;if (NextWordStopped() ~= 'leather') jump Failed_8; parsed_number = I171_leather; return GPR_NUMBER; .Failed_8; wn = original_wn;if (NextWordStopped() ~= 'flesh') jump Failed_9; parsed_number = I172_flesh; return GPR_NUMBER; .Failed_9; wn = original_wn;if (NextWordStopped() ~= 'glass') jump Failed_10; parsed_number = I173_glass; return GPR_NUMBER; .Failed_10; wn = original_wn;if (NextWordStopped() ~= 'stone') jump Failed_11; parsed_number = I174_stone; return GPR_NUMBER; .Failed_11; wn = original_wn;if (NextWordStopped() ~= 'radiance') jump Failed_12; parsed_number = I176_radiance; return GPR_NUMBER; .Failed_12; wn = original_wn;if (NextWordStopped() ~= 'adamant') jump Failed_13; parsed_number = I177_adamant; return GPR_NUMBER; .Failed_13; wn = original_wn;if (NextWordStopped() ~= 'vapour') jump Failed_14; parsed_number = I178_vapour; return GPR_NUMBER; .Failed_14; return GPR_FAIL; ]; [ Kind_GPR_55 original_wn group_wn v wpos mid_word matched_number cur_word cur_len cur_addr sgn tot f w rv x; original_wn = wn; if (NextWordStopped() ~= 'mort') jump Fail_1; parsed_number = I227_mort_eilysh_parse; return GPR_NUMBER; .Fail_1; wn = original_wn; if (NextWordStopped() ~= 'eilysh') jump Fail_2; parsed_number = I227_mort_eilysh_parse; return GPR_NUMBER; .Fail_2; wn = original_wn; if (NextWordStopped() ~= 'naar') jump Fail_3; parsed_number = I228_naar_od_erae_parse; return GPR_NUMBER; .Fail_3; wn = original_wn; if (NextWordStopped() ~= 'od') jump Fail_4; parsed_number = I228_naar_od_erae_parse; return GPR_NUMBER; .Fail_4; wn = original_wn; if (NextWordStopped() ~= 'erae') jump Fail_5; parsed_number = I228_naar_od_erae_parse; return GPR_NUMBER; .Fail_5; wn = original_wn; if (NextWordStopped() ~= 'dolp') jump Fail_6; parsed_number = I229_dolp_zeez_parse; return GPR_NUMBER; .Fail_6; wn = original_wn; if (NextWordStopped() ~= 'zeez') jump Fail_7; parsed_number = I229_dolp_zeez_parse; return GPR_NUMBER; .Fail_7; wn = original_wn; if (NextWordStopped() ~= 'chetnak') jump Fail_8; parsed_number = I230_chetnak_parse; return GPR_NUMBER; .Fail_8; wn = original_wn; if (NextWordStopped() ~= 'cistrob') jump Fail_9; parsed_number = I231_cistrob_jirsgev_parse; return GPR_NUMBER; .Fail_9; wn = original_wn; if (NextWordStopped() ~= 'jirsgev') jump Fail_10; parsed_number = I231_cistrob_jirsgev_parse; return GPR_NUMBER; .Fail_10; wn = original_wn; if (NextWordStopped() ~= 'twan') jump Fail_11; parsed_number = I232_twan_metier_parse; return GPR_NUMBER; .Fail_11; wn = original_wn; if (NextWordStopped() ~= 'metier') jump Fail_12; parsed_number = I232_twan_metier_parse; return GPR_NUMBER; .Fail_12; wn = original_wn; if (NextWordStopped() ~= 'hermei') jump Fail_13; parsed_number = I233_hermei_le_schim_parse; return GPR_NUMBER; .Fail_13; wn = original_wn; if (NextWordStopped() ~= 'le') jump Fail_14; parsed_number = I233_hermei_le_schim_parse; return GPR_NUMBER; .Fail_14; wn = original_wn; if (NextWordStopped() ~= 'schim') jump Fail_15; parsed_number = I233_hermei_le_schim_parse; return GPR_NUMBER; .Fail_15; wn = original_wn; if (NextWordStopped() ~= 'lonsifira') jump Fail_16; parsed_number = I234_lonsifira_parse; return GPR_NUMBER; .Fail_16; wn = original_wn; if (NextWordStopped() ~= 'kripmeteel') jump Fail_17; parsed_number = I235_kripmeteel_parse; return GPR_NUMBER; .Fail_17; wn = original_wn; if (NextWordStopped() ~= 'souspenot') jump Fail_18; parsed_number = I236_souspenot_parse; return GPR_NUMBER; .Fail_18; wn = original_wn; if (NextWordStopped() ~= 'shalm') jump Fail_19; parsed_number = I237_shalm_sawesas_parse; return GPR_NUMBER; .Fail_19; wn = original_wn; if (NextWordStopped() ~= 'sawesas') jump Fail_20; parsed_number = I237_shalm_sawesas_parse; return GPR_NUMBER; .Fail_20; wn = original_wn; if (NextWordStopped() ~= 'zyxyz') jump Fail_21; parsed_number = I238_zyxyz_parse; return GPR_NUMBER; .Fail_21; wn = original_wn; wn = original_wn; wn = original_wn;if (NextWordStopped() ~= 'none-parse') jump Failed_15; parsed_number = I226_none_parse; return GPR_NUMBER; .Failed_15; wn = original_wn;if (NextWordStopped() ~= 'mort-eilysh-parse') jump Failed_16; parsed_number = I227_mort_eilysh_parse; return GPR_NUMBER; .Failed_16; wn = original_wn;if (NextWordStopped() ~= 'naar-od-erae-parse') jump Failed_17; parsed_number = I228_naar_od_erae_parse; return GPR_NUMBER; .Failed_17; wn = original_wn;if (NextWordStopped() ~= 'dolp-zeez-parse') jump Failed_18; parsed_number = I229_dolp_zeez_parse; return GPR_NUMBER; .Failed_18; wn = original_wn;if (NextWordStopped() ~= 'chetnak-parse') jump Failed_19; parsed_number = I230_chetnak_parse; return GPR_NUMBER; .Failed_19; wn = original_wn;if (NextWordStopped() ~= 'cistrob-jirsgev-parse') jump Failed_20; parsed_number = I231_cistrob_jirsgev_parse; return GPR_NUMBER; .Failed_20; wn = original_wn;if (NextWordStopped() ~= 'twan-metier-parse') jump Failed_21; parsed_number = I232_twan_metier_parse; return GPR_NUMBER; .Failed_21; wn = original_wn;if (NextWordStopped() ~= 'hermei-le-schim-parse') jump Failed_22; parsed_number = I233_hermei_le_schim_parse; return GPR_NUMBER; .Failed_22; wn = original_wn;if (NextWordStopped() ~= 'lonsifira-parse') jump Failed_23; parsed_number = I234_lonsifira_parse; return GPR_NUMBER; .Failed_23; wn = original_wn;if (NextWordStopped() ~= 'kripmeteel-parse') jump Failed_24; parsed_number = I235_kripmeteel_parse; return GPR_NUMBER; .Failed_24; wn = original_wn;if (NextWordStopped() ~= 'souspenot-parse') jump Failed_25; parsed_number = I236_souspenot_parse; return GPR_NUMBER; .Failed_25; wn = original_wn;if (NextWordStopped() ~= 'shalm-sawesas-parse') jump Failed_26; parsed_number = I237_shalm_sawesas_parse; return GPR_NUMBER; .Failed_26; wn = original_wn;if (NextWordStopped() ~= 'zyxyz-parse') jump Failed_27; parsed_number = I238_zyxyz_parse; return GPR_NUMBER; .Failed_27; return GPR_FAIL; ]; [ Noun_Filter_0 x; x=noun; return ((noun ofclass K3_direction)); ]; [ Scope_Filter_1 obj o2; switch (scope_stage) { 1: rfalse; 2: obj=noun; objectloop(noun ofclass Object && (((noun ofclass K1_room) && ((Adj_56_t1_v9(noun)))))) { o2 = noun; noun = obj; suppress_scope_loops = true; PlaceInScope(o2, true); suppress_scope_loops = false; noun = o2; } noun=obj; 3: nextbest_etype = NOTINCONTEXT_PE; return -1; } ]; [ Scope_Filter_2 obj o2; switch (scope_stage) { 1: rfalse; 2: obj=noun; objectloop(noun ofclass Object && (((noun ofclass K1_room) && ((Adj_56_t1_v9(noun)))))) { o2 = noun; noun = obj; suppress_scope_loops = true; PlaceInScope(o2, true); suppress_scope_loops = false; noun = o2; } noun=obj; 3: nextbest_etype = NOTINCONTEXT_PE; return -1; } ]; [ Noun_Filter_3 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_4 x; x=noun; return ((noun ofclass K52_symbol_extra)); ]; [ Noun_Filter_5 x; x=noun; return ((noun ofclass K3_direction)); ]; [ Noun_Filter_6 x; x=noun; return ((noun ofclass K3_direction)); ]; [ Noun_Filter_7 x; x=noun; return ((noun ofclass K2_thing) && ((Adj_87_t1_v9(noun)))); ]; [ Noun_Filter_8 x; x=noun; return ((noun ofclass K8_person)); ]; [ Noun_Filter_9 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_10 x; x=noun; return ((noun ofclass K3_direction)); ]; [ Scope_Filter_11 obj o2; switch (scope_stage) { 1: rfalse; 2: obj=noun; objectloop(noun ofclass Object && (((noun ofclass K2_thing)))) { o2 = noun; noun = obj; suppress_scope_loops = true; PlaceInScope(o2, true); suppress_scope_loops = false; noun = o2; } noun=obj; 3: nextbest_etype = NOTINCONTEXT_PE; return -1; } ]; [ Noun_Filter_12 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_13 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_14 x; x=noun; return ((noun ofclass K17_weapon)); ]; [ Noun_Filter_15 x; x=noun; return ((noun ofclass K50_package_of_ment)); ]; [ Noun_Filter_16 x; x=noun; return ((noun ofclass K24_clothing)); ]; [ Noun_Filter_17 x; x=noun; return ((noun ofclass K38_scroll)); ]; [ Noun_Filter_18 x; x=noun; return ((noun ofclass K35_grenade)); ]; [ Noun_Filter_19 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_20 x; x=noun; return ((noun ofclass K3_direction)); ]; [ Noun_Filter_21 x; x=noun; return ((noun ofclass K3_direction)); ]; [ Noun_Filter_22 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_23 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_24 x; x=noun; return ((noun ofclass K2_thing)); ]; [ Noun_Filter_25 x; x=noun; return ((noun ofclass K8_person)); ]; [ Scope_Filter_26 obj o2; switch (scope_stage) { 1: rfalse; 2: obj=noun; objectloop(noun ofclass Object && (((noun ofclass K8_person)))) { o2 = noun; noun = obj; suppress_scope_loops = true; PlaceInScope(o2, true); suppress_scope_loops = false; noun = o2; } noun=obj; 3: nextbest_etype = NOTINCONTEXT_PE; return -1; } ]; [ Scope_Filter_27 obj o2; switch (scope_stage) { 1: rfalse; 2: obj=noun; objectloop(noun ofclass Object && (((noun ofclass K1_room) && ((Adj_56_t1_v9(noun)))))) { o2 = noun; noun = obj; suppress_scope_loops = true; PlaceInScope(o2, true); suppress_scope_loops = false; noun = o2; } noun=obj; 3: nextbest_etype = NOTINCONTEXT_PE; return -1; } ]; [ Noun_Filter_28 x; x=noun; return ((noun ofclass K8_person)); ]; [ Noun_Filter_29 x; x=noun; return ((noun ofclass K8_person)); ]; #IFDEF DEBUG; [ XAbstractSub; if (XTestMove(noun, second)) return; move noun to second; "[Abstracted.]"; ]; [ XTestMove obj dest; if ((obj <= InformLibrary) || (obj == LibraryMessages)) "[Can't move ", (name) obj, ": it's a system object.]"; if (obj.component_parent) "[Can't move ", (name) obj, ": it's part of ", (the) obj.component_parent, ".]"; while (dest) { if (dest == obj) "[Can't move ", (name) obj, ": it would contain itself.]"; dest = CoreOfParentOfCoreOf(dest); } rfalse; ]; [ ActionsOnSub; trace_actions = 1; say__p = 1; "Actions listing on."; ]; [ ActionsOffSub; trace_actions = 0; say__p = 1; "Actions listing off."; ]; [ GonearSub; PlayerTo(LocationOf(noun)); ]; [ XPurloinSub; if (XTestMove(noun, player)) return; move noun to player; give noun moved ~concealed; say__p = 1; "[Purloined.]"; ]; [ PredictableSub; VM_Seed_RNG(-100); say__p = 1; "[Random number generator now predictable.]"; ]; [ ShowRelationsSub; IterateRelations(ShowOneRelation); ]; [ ShowOneRelation rel; if ((rel-->RR_PERMISSIONS) & (RELS_SHOW)) { (rel-->RR_HANDLER)(rel, RELS_SHOW); } ]; [ RulesOnSub; debug_rules = 1; say__p = 1; "Rules tracing now switched on. Type ~rules off~ to switch it off again, or ~rules all~ to include even rules which do not apply."; ]; [ RulesAllSub; debug_rules = 2; say__p = 1; "Rules tracing now switched to ~all~. Type ~rules off~ to switch it off again."; ]; [ RulesOffSub; debug_rules = 0; say__p = 1; "Rules tracing now switched off. Type ~rules~ to switch it on again."; ]; [ ScenesOnSub; debug_scenes = 1; ShowSceneStatus(); say__p = 1; "(Scene monitoring now switched on. Type ~scenes off~ to switch it off again.)"; ]; [ ScenesOffSub; debug_scenes = 0; say__p = 1; "(Scene monitoring now switched off. Type ~scenes~ to switch it on again.)"; ]; Global x_scope_count; [ ScopeSub; x_scope_count = 0; LoopOverScope(Print_ScL, noun); if (x_scope_count == 0) "Nothing is in scope."; ]; [ Print_ScL obj; print_ret ++x_scope_count, ": ", (a) obj, " (", obj, ")"; ]; [ ShowHeapSub; DebugHeap(); ]; [ ShowMeSub t_0 na; t_0 = noun; if (noun == nothing) noun = real_location; if (ShowMeRecursively(noun, 0, (noun == real_location))) { if (noun == real_location) print "* denotes things which are not in scope^"; } if (t_0 ofclass K2_thing) { print "location:"; ShowRLocation(noun, true); print "^"; } if (t_0) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(pluralname)) && (t_0 has pluralname)) { if (na++ > 0) print ", "; print "plural-named"; } if ((AllowInShowme(pluralname)) && (t_0 hasnt pluralname)) { if (na++ > 0) print ", "; print "singular-named"; } if ((AllowInShowme(proper)) && (t_0 has proper)) { if (na++ > 0) print ", "; print "proper-named"; } if ((AllowInShowme(proper)) && (t_0 hasnt proper)) { if (na++ > 0) print ", "; print "improper-named"; } } if (t_0 ofclass K1_room) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(light)) && (t_0 has light)) { if (na++ > 0) print ", "; print "lighted"; } if ((AllowInShowme(light)) && (t_0 hasnt light)) { if (na++ > 0) print ", "; print "dark"; } if ((AllowInShowme(visited)) && (t_0 has visited)) { if (na++ > 0) print ", "; print "visited"; } if ((AllowInShowme(visited)) && (t_0 hasnt visited)) { if (na++ > 0) print ", "; print "unvisited"; } if ((AllowInShowme(p124_placed)) && (t_0 has p124_placed)) { if (na++ > 0) print ", "; print "placed"; } if ((AllowInShowme(p124_placed)) && (t_0 hasnt p124_placed)) { if (na++ > 0) print ", "; print "not placed"; } if ((AllowInShowme(p127_connectable)) && (t_0 has p127_connectable)) { if (na++ > 0) print ", "; print "connectable"; } if ((AllowInShowme(p127_connectable)) && (t_0 hasnt p127_connectable)) { if (na++ > 0) print ", "; print "not connectable"; } if ((AllowInShowme(p129_connection_inviting)) && (t_0 has p129_connection_inviting)) { if (na++ > 0) print ", "; print "connection-inviting"; } if ((AllowInShowme(p129_connection_inviting)) && (t_0 hasnt p129_connection_inviting)) { if (na++ > 0) print ", "; print "not connection-inviting"; } if ((AllowInShowme(p131_placeable)) && (t_0 has p131_placeable)) { if (na++ > 0) print ", "; print "placeable"; } if ((AllowInShowme(p131_placeable)) && (t_0 hasnt p131_placeable)) { if (na++ > 0) print ", "; print "not placeable"; } if ((AllowInShowme(p133_habitable)) && (t_0 .p133_habitable == true)) { if (na++ > 0) print ", "; print "habitable"; } if ((AllowInShowme(p133_habitable)) && (t_0 .p133_habitable == false)) { if (na++ > 0) print ", "; print "not habitable"; } if ((AllowInShowme(p135_treasurable)) && (t_0 .p135_treasurable == true)) { if (na++ > 0) print ", "; print "treasurable"; } if ((AllowInShowme(p135_treasurable)) && (t_0 .p135_treasurable == false)) { if (na++ > 0) print ", "; print "not treasurable"; } if ((AllowInShowme(p137_extra_accepting)) && (t_0 .p137_extra_accepting == true)) { if (na++ > 0) print ", "; print "extra-accepting"; } if ((AllowInShowme(p137_extra_accepting)) && (t_0 .p137_extra_accepting == false)) { if (na++ > 0) print ", "; print "not extra-accepting"; } if ((AllowInShowme(p139_nogo)) && (t_0 .p139_nogo == true)) { if (na++ > 0) print ", "; print "nogo"; } if ((AllowInShowme(p139_nogo)) && (t_0 .p139_nogo == false)) { if (na++ > 0) print ", "; print "notnogo"; } if ((AllowInShowme(p143_consecrated)) && (t_0 .p143_consecrated == true)) { if (na++ > 0) print ", "; print "consecrated"; } if ((AllowInShowme(p143_consecrated)) && (t_0 .p143_consecrated == false)) { if (na++ > 0) print ", "; print "not consecrated"; } if ((AllowInShowme(p166_teleportable)) && (t_0 .p166_teleportable == true)) { if (na++ > 0) print ", "; print "teleportable"; } if ((AllowInShowme(p166_teleportable)) && (t_0 .p166_teleportable == false)) { if (na++ > 0) print ", "; print "not teleportable"; } if ((AllowInShowme(p191_rust_spored)) && (t_0 .p191_rust_spored == true)) { if (na++ > 0) print ", "; print "rust-spored"; } if ((AllowInShowme(p191_rust_spored)) && (t_0 .p191_rust_spored == false)) { if (na++ > 0) print ", "; print "not rust-spored"; } if ((AllowInShowme(p193_rust_spored_candidate)) && (t_0 .p193_rust_spored_candidate == true)) { if (na++ > 0) print ", "; print "rust-spored-candidate"; } if ((AllowInShowme(p193_rust_spored_candidate)) && (t_0 .p193_rust_spored_candidate == false)) { if (na++ > 0) print ", "; print "not rust-spored-candidate"; } if ((AllowInShowme(p245_smoke_demoned)) && (t_0 .p245_smoke_demoned == true)) { if (na++ > 0) print ", "; print "smoke-demoned"; } if ((AllowInShowme(p245_smoke_demoned)) && (t_0 .p245_smoke_demoned == false)) { if (na++ > 0) print ", "; print "not smoke-demoned"; } if ((AllowInShowme(p249_initiative_conferring)) && (t_0 .p249_initiative_conferring == true)) { if (na++ > 0) print ", "; print "initiative-conferring"; } if ((AllowInShowme(p249_initiative_conferring)) && (t_0 .p249_initiative_conferring == false)) { if (na++ > 0) print ", "; print "not initiative-conferring"; } } if (t_0 ofclass K2_thing) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(light)) && (t_0 has light)) { if (na++ > 0) print ", "; print "lit"; } if ((AllowInShowme(light)) && (t_0 hasnt light)) { if (na++ > 0) print ", "; print "unlit"; } if ((AllowInShowme(edible)) && (t_0 has edible)) { if (na++ > 0) print ", "; print "edible"; } if ((AllowInShowme(edible)) && (t_0 hasnt edible)) { if (na++ > 0) print ", "; print "inedible"; } if ((AllowInShowme(static)) && (t_0 has static)) { if (na++ > 0) print ", "; print "fixed in place"; } if ((AllowInShowme(static)) && (t_0 hasnt static)) { if (na++ > 0) print ", "; print "portable"; } if ((AllowInShowme(scenery)) && (t_0 has scenery)) { if (na++ > 0) print ", "; print "scenery"; } if ((AllowInShowme(clothing)) && (t_0 has clothing)) { if (na++ > 0) print ", "; print "wearable"; } if ((AllowInShowme(pushable)) && (t_0 has pushable)) { if (na++ > 0) print ", "; print "pushable between rooms"; } if ((AllowInShowme(moved)) && (t_0 has moved)) { if (na++ > 0) print ", "; print "handled"; } if ((AllowInShowme(concealed)) && (t_0 hasnt concealed)) { if (na++ > 0) print ", "; print "described"; } if ((AllowInShowme(concealed)) && (t_0 has concealed)) { if (na++ > 0) print ", "; print "undescribed"; } if ((AllowInShowme(workflag)) && (t_0 has workflag)) { if (na++ > 0) print ", "; print "marked for listing"; } if ((AllowInShowme(workflag)) && (t_0 hasnt workflag)) { if (na++ > 0) print ", "; print "unmarked for listing"; } if ((AllowInShowme(mentioned)) && (t_0 has mentioned)) { if (na++ > 0) print ", "; print "mentioned"; } if ((AllowInShowme(mentioned)) && (t_0 hasnt mentioned)) { if (na++ > 0) print ", "; print "unmentioned"; } if ((AllowInShowme(neuter)) && (t_0 has neuter)) { if (na++ > 0) print ", "; print "neuter"; } if ((AllowInShowme(p106_seen)) && (t_0 has p106_seen)) { if (na++ > 0) print ", "; print "seen"; } if ((AllowInShowme(p106_seen)) && (t_0 hasnt p106_seen)) { if (na++ > 0) print ", "; print "unseen"; } if ((AllowInShowme(p108_familiar)) && (t_0 has p108_familiar)) { if (na++ > 0) print ", "; print "familiar"; } if ((AllowInShowme(p108_familiar)) && (t_0 hasnt p108_familiar)) { if (na++ > 0) print ", "; print "unfamiliar"; } if ((AllowInShowme(p114_ambiguously_plural)) && (t_0 has p114_ambiguously_plural)) { if (na++ > 0) print ", "; print "ambiguously plural"; } if ((AllowInShowme(p114_ambiguously_plural)) && (t_0 hasnt p114_ambiguously_plural)) { if (na++ > 0) print ", "; print "ordinarily enumerated"; } if ((AllowInShowme(p145_digging_tool)) && (t_0 .p145_digging_tool == true)) { if (na++ > 0) print ", "; print "digging tool"; } if ((AllowInShowme(p145_digging_tool)) && (t_0 .p145_digging_tool == false)) { if (na++ > 0) print ", "; print "not a digging tool"; } if ((AllowInShowme(p147_collapsing_tool)) && (t_0 .p147_collapsing_tool == true)) { if (na++ > 0) print ", "; print "collapsing tool"; } if ((AllowInShowme(p147_collapsing_tool)) && (t_0 .p147_collapsing_tool == false)) { if (na++ > 0) print ", "; print "not a collapsing tool"; } if ((AllowInShowme(p185_flaming)) && (t_0 .p185_flaming == true)) { if (na++ > 0) print ", "; print "flaming"; } if ((AllowInShowme(p185_flaming)) && (t_0 .p185_flaming == false)) { if (na++ > 0) print ", "; print "not flaming"; } if ((AllowInShowme(p187_cooler)) && (t_0 .p187_cooler == true)) { if (na++ > 0) print ", "; print "cooler"; } if ((AllowInShowme(p187_cooler)) && (t_0 .p187_cooler == false)) { if (na++ > 0) print ", "; print "not cooler"; } if ((AllowInShowme(p189_rusted)) && (t_0 .p189_rusted == true)) { if (na++ > 0) print ", "; print "rusted"; } if ((AllowInShowme(p189_rusted)) && (t_0 .p189_rusted == false)) { if (na++ > 0) print ", "; print "not rusted"; } if ((AllowInShowme(p215_actual)) && (t_0 .p215_actual == true)) { if (na++ > 0) print ", "; print "actual"; } if ((AllowInShowme(p215_actual)) && (t_0 .p215_actual == false)) { if (na++ > 0) print ", "; print "prototypical"; } if ((AllowInShowme(p220_corruptible)) && (t_0 .p220_corruptible == true)) { if (na++ > 0) print ", "; print "corruptible"; } if ((AllowInShowme(p220_corruptible)) && (t_0 .p220_corruptible == false)) { if (na++ > 0) print ", "; print "incorruptible"; } if ((AllowInShowme(p222_cursed)) && (t_0 .p222_cursed == true)) { if (na++ > 0) print ", "; print "cursed"; } if ((AllowInShowme(p222_cursed)) && (t_0 .p222_cursed == false)) { if (na++ > 0) print ", "; print "not cursed"; } if ((AllowInShowme(p224_curse_identified)) && (t_0 .p224_curse_identified == true)) { if (na++ > 0) print ", "; print "curse-identified"; } if ((AllowInShowme(p224_curse_identified)) && (t_0 .p224_curse_identified == false)) { if (na++ > 0) print ", "; print "not curse-identified"; } } if (t_0 ofclass K3_direction) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(workflag)) && (t_0 has workflag)) { if (na++ > 0) print ", "; print "marked for listing"; } if ((AllowInShowme(workflag)) && (t_0 hasnt workflag)) { if (na++ > 0) print ", "; print "unmarked for listing"; } if ((AllowInShowme(p122_cardinal)) && (t_0 has p122_cardinal)) { if (na++ > 0) print ", "; print "cardinal"; } if ((AllowInShowme(p122_cardinal)) && (t_0 hasnt p122_cardinal)) { if (na++ > 0) print ", "; print "not cardinal"; } } if (t_0 ofclass K4_door) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(open)) && (t_0 has open)) { if (na++ > 0) print ", "; print "open"; } if ((AllowInShowme(open)) && (t_0 hasnt open)) { if (na++ > 0) print ", "; print "closed"; } if ((AllowInShowme(openable)) && (t_0 has openable)) { if (na++ > 0) print ", "; print "openable"; } if ((AllowInShowme(openable)) && (t_0 hasnt openable)) { if (na++ > 0) print ", "; print "unopenable"; } if ((AllowInShowme(lockable)) && (t_0 has lockable)) { if (na++ > 0) print ", "; print "lockable"; } if ((AllowInShowme(locked)) && (t_0 has locked)) { if (na++ > 0) print ", "; print "locked"; } if ((AllowInShowme(locked)) && (t_0 hasnt locked)) { if (na++ > 0) print ", "; print "unlocked"; } } if (t_0 ofclass K5_container) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(enterable)) && (t_0 has enterable)) { if (na++ > 0) print ", "; print "enterable"; } if ((AllowInShowme(transparent)) && (t_0 hasnt transparent)) { if (na++ > 0) print ", "; print "opaque"; } if ((AllowInShowme(transparent)) && (t_0 has transparent)) { if (na++ > 0) print ", "; print "transparent"; } if ((AllowInShowme(open)) && (t_0 has open)) { if (na++ > 0) print ", "; print "open"; } if ((AllowInShowme(open)) && (t_0 hasnt open)) { if (na++ > 0) print ", "; print "closed"; } if ((AllowInShowme(openable)) && (t_0 has openable)) { if (na++ > 0) print ", "; print "openable"; } if ((AllowInShowme(openable)) && (t_0 hasnt openable)) { if (na++ > 0) print ", "; print "unopenable"; } if ((AllowInShowme(lockable)) && (t_0 has lockable)) { if (na++ > 0) print ", "; print "lockable"; } if ((AllowInShowme(locked)) && (t_0 has locked)) { if (na++ > 0) print ", "; print "locked"; } if ((AllowInShowme(locked)) && (t_0 hasnt locked)) { if (na++ > 0) print ", "; print "unlocked"; } if ((AllowInShowme(p195_rust_releasing)) && (t_0 .p195_rust_releasing == true)) { if (na++ > 0) print ", "; print "rust-releasing"; } if ((AllowInShowme(p195_rust_releasing)) && (t_0 .p195_rust_releasing == false)) { if (na++ > 0) print ", "; print "not rust-releasing"; } } if (t_0 ofclass K6_supporter) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(enterable)) && (t_0 has enterable)) { if (na++ > 0) print ", "; print "enterable"; } } if (t_0 ofclass K8_person) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(female)) && (t_0 has female)) { if (na++ > 0) print ", "; print "female"; } if ((AllowInShowme(female)) && (t_0 hasnt female)) { if (na++ > 0) print ", "; print "male"; } if ((AllowInShowme(p118_at_parry)) && (t_0 has p118_at_parry)) { if (na++ > 0) print ", "; print "at parry"; } if ((AllowInShowme(p118_at_parry)) && (t_0 hasnt p118_at_parry)) { if (na++ > 0) print ", "; print "not at parry"; } if ((AllowInShowme(p120_at_dodge)) && (t_0 has p120_at_dodge)) { if (na++ > 0) print ", "; print "at dodge"; } if ((AllowInShowme(p120_at_dodge)) && (t_0 hasnt p120_at_dodge)) { if (na++ > 0) print ", "; print "not at dodge"; } if ((AllowInShowme(p149_emotionless)) && (t_0 .p149_emotionless == true)) { if (na++ > 0) print ", "; print "emotionless"; } if ((AllowInShowme(p149_emotionless)) && (t_0 .p149_emotionless == false)) { if (na++ > 0) print ", "; print "not emotionless"; } if ((AllowInShowme(p151_non_attacker)) && (t_0 .p151_non_attacker == true)) { if (na++ > 0) print ", "; print "non-attacker"; } if ((AllowInShowme(p152_weapon_user)) && (t_0 .p152_weapon_user == true)) { if (na++ > 0) print ", "; print "weapon user"; } if ((AllowInShowme(p152_weapon_user)) && (t_0 .p152_weapon_user == false)) { if (na++ > 0) print ", "; print "not weapon user"; } if ((AllowInShowme(p158_flyer)) && (t_0 .p158_flyer == true)) { if (na++ > 0) print ", "; print "flyer"; } if ((AllowInShowme(p158_flyer)) && (t_0 .p158_flyer == false)) { if (na++ > 0) print ", "; print "not flyer"; } if ((AllowInShowme(p160_blinded)) && (t_0 .p160_blinded == true)) { if (na++ > 0) print ", "; print "blinded"; } if ((AllowInShowme(p160_blinded)) && (t_0 .p160_blinded == false)) { if (na++ > 0) print ", "; print "not blinded"; } if ((AllowInShowme(p162_eyeless)) && (t_0 .p162_eyeless == true)) { if (na++ > 0) print ", "; print "eyeless"; } if ((AllowInShowme(p162_eyeless)) && (t_0 .p162_eyeless == false)) { if (na++ > 0) print ", "; print "not eyeless"; } if ((AllowInShowme(p164_spontaneous_teleporter)) && (t_0 .p164_spontaneous_teleporter == true)) { if (na++ > 0) print ", "; print "spontaneous teleporter"; } if ((AllowInShowme(p164_spontaneous_teleporter)) && (t_0 .p164_spontaneous_teleporter == false)) { if (na++ > 0) print ", "; print "not spontaneous teleporter"; } if ((AllowInShowme(p168_teleport_impossible_awa)) && (t_0 .p168_teleport_impossible_awa == true)) { if (na++ > 0) print ", "; print "teleport impossible aware"; } if ((AllowInShowme(p168_teleport_impossible_awa)) && (t_0 .p168_teleport_impossible_awa == false)) { if (na++ > 0) print ", "; print "not teleport impossible aware"; } if ((AllowInShowme(p170_follower)) && (t_0 .p170_follower == true)) { if (na++ > 0) print ", "; print "follower"; } if ((AllowInShowme(p170_follower)) && (t_0 .p170_follower == false)) { if (na++ > 0) print ", "; print "not follower"; } if ((AllowInShowme(p181_risky)) && (t_0 .p181_risky == true)) { if (na++ > 0) print ", "; print "risky"; } if ((AllowInShowme(p181_risky)) && (t_0 .p181_risky == false)) { if (na++ > 0) print ", "; print "not risky"; } if ((AllowInShowme(p183_aite_loved)) && (t_0 .p183_aite_loved == true)) { if (na++ > 0) print ", "; print "Aite-loved"; } if ((AllowInShowme(p183_aite_loved)) && (t_0 .p183_aite_loved == false)) { if (na++ > 0) print ", "; print "not Aite-loved"; } if ((AllowInShowme(p197_death_blessed)) && (t_0 .p197_death_blessed == true)) { if (na++ > 0) print ", "; print "death-blessed"; } if ((AllowInShowme(p197_death_blessed)) && (t_0 .p197_death_blessed == false)) { if (na++ > 0) print ", "; print "not death-blessed"; } if ((AllowInShowme(p199_death_cursed)) && (t_0 .p199_death_cursed == true)) { if (na++ > 0) print ", "; print "death-cursed"; } if ((AllowInShowme(p199_death_cursed)) && (t_0 .p199_death_cursed == false)) { if (na++ > 0) print ", "; print "not death-cursed"; } if ((AllowInShowme(p202_hidden)) && (t_0 .p202_hidden == true)) { if (na++ > 0) print ", "; print "hidden"; } if ((AllowInShowme(p202_hidden)) && (t_0 .p202_hidden == false)) { if (na++ > 0) print ", "; print "not hidden"; } if ((AllowInShowme(p204_on_the_lookout)) && (t_0 .p204_on_the_lookout == true)) { if (na++ > 0) print ", "; print "on-the-lookout"; } if ((AllowInShowme(p204_on_the_lookout)) && (t_0 .p204_on_the_lookout == false)) { if (na++ > 0) print ", "; print "not on-the-lookout"; } if ((AllowInShowme(p206_unnaturally_aware)) && (t_0 .p206_unnaturally_aware == true)) { if (na++ > 0) print ", "; print "unnaturally aware"; } if ((AllowInShowme(p206_unnaturally_aware)) && (t_0 .p206_unnaturally_aware == false)) { if (na++ > 0) print ", "; print "not unnaturally aware"; } if ((AllowInShowme(p208_unnaturally_aware_follo)) && (t_0 .p208_unnaturally_aware_follo == true)) { if (na++ > 0) print ", "; print "unnaturally aware follower"; } if ((AllowInShowme(p208_unnaturally_aware_follo)) && (t_0 .p208_unnaturally_aware_follo == false)) { if (na++ > 0) print ", "; print "not unnaturally aware follower"; } if ((AllowInShowme(p210_smoke_attuned)) && (t_0 .p210_smoke_attuned == true)) { if (na++ > 0) print ", "; print "smoke attuned"; } if ((AllowInShowme(p210_smoke_attuned)) && (t_0 .p210_smoke_attuned == false)) { if (na++ > 0) print ", "; print "not smoke attuned"; } if ((AllowInShowme(p212_ethereal)) && (t_0 .p212_ethereal == true)) { if (na++ > 0) print ", "; print "ethereal"; } if ((AllowInShowme(p212_ethereal)) && (t_0 .p212_ethereal == false)) { if (na++ > 0) print ", "; print "not ethereal"; } if ((AllowInShowme(p226_cautious)) && (t_0 .p226_cautious == true)) { if (na++ > 0) print ", "; print "cautious"; } if ((AllowInShowme(p226_cautious)) && (t_0 .p226_cautious == false)) { if (na++ > 0) print ", "; print "not cautious"; } if ((AllowInShowme(p228_enraged)) && (t_0 .p228_enraged == true)) { if (na++ > 0) print ", "; print "enraged"; } if ((AllowInShowme(p228_enraged)) && (t_0 .p228_enraged == false)) { if (na++ > 0) print ", "; print "not enraged"; } if ((AllowInShowme(p230_patient)) && (t_0 .p230_patient == true)) { if (na++ > 0) print ", "; print "patient"; } if ((AllowInShowme(p230_patient)) && (t_0 .p230_patient == false)) { if (na++ > 0) print ", "; print "not patient"; } if ((AllowInShowme(p232_greedy)) && (t_0 .p232_greedy == true)) { if (na++ > 0) print ", "; print "greedy"; } if ((AllowInShowme(p232_greedy)) && (t_0 .p232_greedy == false)) { if (na++ > 0) print ", "; print "not greedy"; } if ((AllowInShowme(p234_at_stun)) && (t_0 .p234_at_stun == true)) { if (na++ > 0) print ", "; print "at-stun"; } if ((AllowInShowme(p234_at_stun)) && (t_0 .p234_at_stun == false)) { if (na++ > 0) print ", "; print "not at-stun"; } if ((AllowInShowme(p236_sometime_stunned)) && (t_0 .p236_sometime_stunned == true)) { if (na++ > 0) print ", "; print "sometime-stunned"; } if ((AllowInShowme(p239_tentacle_confused)) && (t_0 .p239_tentacle_confused == true)) { if (na++ > 0) print ", "; print "tentacle-confused"; } if ((AllowInShowme(p240_barkskinned)) && (t_0 .p240_barkskinned == true)) { if (na++ > 0) print ", "; print "barkskinned"; } if ((AllowInShowme(p240_barkskinned)) && (t_0 .p240_barkskinned == false)) { if (na++ > 0) print ", "; print "not barkskinned"; } if ((AllowInShowme(p243_hexed)) && (t_0 .p243_hexed == true)) { if (na++ > 0) print ", "; print "hexed"; } if ((AllowInShowme(p243_hexed)) && (t_0 .p243_hexed == false)) { if (na++ > 0) print ", "; print "not hexed"; } if ((AllowInShowme(p247_retreater)) && (t_0 .p247_retreater == true)) { if (na++ > 0) print ", "; print "retreater"; } if ((AllowInShowme(p247_retreater)) && (t_0 .p247_retreater == false)) { if (na++ > 0) print ", "; print "not retreater"; } if ((AllowInShowme(p251_runner)) && (t_0 .p251_runner == true)) { if (na++ > 0) print ", "; print "runner"; } if ((AllowInShowme(p251_runner)) && (t_0 .p251_runner == false)) { if (na++ > 0) print ", "; print "not runner"; } } if (t_0 ofclass K13_device) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(on)) && (t_0 has on)) { if (na++ > 0) print ", "; print "switched on"; } if ((AllowInShowme(on)) && (t_0 hasnt on)) { if (na++ > 0) print ", "; print "switched off"; } } if (t_0 ofclass K17_weapon) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(p116_readied)) && (t_0 has p116_readied)) { if (na++ > 0) print ", "; print "readied"; } if ((AllowInShowme(p116_readied)) && (t_0 hasnt p116_readied)) { if (na++ > 0) print ", "; print "not readied"; } if ((AllowInShowme(p172_ranged)) && (t_0 .p172_ranged == true)) { if (na++ > 0) print ", "; print "ranged"; } if ((AllowInShowme(p172_ranged)) && (t_0 .p172_ranged == false)) { if (na++ > 0) print ", "; print "not ranged"; } if ((AllowInShowme(p174_armour_stoppable)) && (t_0 .p174_armour_stoppable == true)) { if (na++ > 0) print ", "; print "armour-stoppable"; } if ((AllowInShowme(p174_armour_stoppable)) && (t_0 .p174_armour_stoppable == false)) { if (na++ > 0) print ", "; print "not armour-stoppable"; } } if (t_0 ofclass K21_power) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(p155_granted)) && (t_0 .p155_granted == true)) { if (na++ > 0) print ", "; print "granted"; } if ((AllowInShowme(p155_granted)) && (t_0 .p155_granted == false)) { if (na++ > 0) print ", "; print "not granted"; } } if (t_0) {if (na > 0) { na = 0; print "^"; } print "printed name: "; if (GProperty(OBJECT_TY, t_0, short_name) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, short_name), "~", "^"; print "printed plural name: "; if (GProperty(OBJECT_TY, t_0, plural) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, plural), "~", "^"; print "indefinite article: "; if (GProperty(OBJECT_TY, t_0, article) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, article), "~", "^"; print "difficulty level: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p27_difficulty_level), "^"; } if (t_0 ofclass K1_room) {if (na > 0) { na = 0; print "^"; } print "description: "; if (GProperty(OBJECT_TY, t_0, description) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, description), "~", "^"; if (GProperty(OBJECT_TY, t_0, map_region)) { print "map region: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, map_region), "^"; } print "x-coordinate: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p28_x_coordinate), "^"; print "y-coordinate: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p29_y_coordinate), "^"; print "z-coordinate: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p30_z_coordinate), "^"; print "smoke timer: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p54_smoke_timer), "^"; print "vertical placement: "; print (T65) GProperty(OBJECT_TY, t_0, p141_vertical_placement), "^"; print "mood: "; print (T66) GProperty(OBJECT_TY, t_0, p142_mood), "^"; } if (t_0 ofclass K2_thing) {if (na > 0) { na = 0; print "^"; } print "description: "; if (GProperty(OBJECT_TY, t_0, description) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, description), "~", "^"; print "initial appearance: "; if (GProperty(OBJECT_TY, t_0, initial) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, initial), "~", "^"; if (GProperty(OBJECT_TY, t_0, with_key)) { print "matching key: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, with_key), "^"; } print "disambiguation id: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p13_disambiguation_id), "^"; print "original material: "; print (T70) GProperty(OBJECT_TY, t_0, p49_original_material), "^"; print "heat strength: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p50_heat_strength), "^"; print "internal heat: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p52_internal_heat), "^"; print "personal corrosion resistance: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p53_personal_corrosion_resis), "^"; if (GProperty(OBJECT_TY, t_0, p58_hidden_identity)) { print "hidden identity: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, p58_hidden_identity), "^"; } print "mood: "; print (T66) GProperty(OBJECT_TY, t_0, p142_mood), "^"; print "material: "; print (T70) GProperty(OBJECT_TY, t_0, p180_material), "^"; print "valuation: "; print (T73) GProperty(OBJECT_TY, t_0, p214_valuation), "^"; } if (t_0 ofclass K3_direction) {if (na > 0) { na = 0; print "^"; } if (GProperty(OBJECT_TY, t_0, p9_opposite)) { print "opposite: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, p9_opposite), "^"; } } if (t_0 ofclass K4_door) {if (na > 0) { na = 0; print "^"; } if (GProperty(OBJECT_TY, t_0, door_to)) { print "other side: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, door_to), "^"; } } if (t_0 ofclass K5_container) {if (na > 0) { na = 0; print "^"; } print "carrying capacity: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, capacity), "^"; } if (t_0 ofclass K6_supporter) {if (na > 0) { na = 0; print "^"; } print "carrying capacity: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, capacity), "^"; } if (t_0 ofclass K8_person) {if (na > 0) { na = 0; print "^"; } print "carrying capacity: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, capacity), "^"; print "health: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p14_health), "^"; print "initiative: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p15_initiative), "^"; print "AI rules: "; print (RulePrintingRule) GProperty(OBJECT_TY, t_0, p16_ai_rules), "^"; print "permanent health: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p17_permanent_health), "^"; print "melee: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p18_melee), "^"; print "defence: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p19_defence), "^"; print "concentration: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p26_concentration), "^"; print "level: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p31_level), "^"; print "group level: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p32_group_level), "^"; print "Perception: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p33_perception), "^"; print "Dexterity: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p34_dexterity), "^"; print "Willpower: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p35_willpower), "^"; print "inherent damage modifier: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p36_inherent_damage_modifier), "^"; print "heal power: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p40_heal_power), "^"; print "heal cooldown: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p41_heal_cooldown), "^"; print "current heal cooldown: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p42_current_heal_cooldown), "^"; print "teleport amount: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p43_teleport_amount), "^"; print "teleport eagerness: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p44_teleport_eagerness), "^"; print "disintegrate power: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p45_disintegrate_power), "^"; print "disintegrate cooldown: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p46_disintegrate_cooldown), "^"; print "current disintegrate cooldown: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p47_current_disintegrate_coo), "^"; print "follower percentile chance: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p48_follower_percentile_chan), "^"; print "intrinsic heat resistance: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p51_intrinsic_heat_resistanc), "^"; print "ethereal timer: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p55_ethereal_timer), "^"; print "hit protection: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p59_hit_protection), "^"; print "stun count: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p60_stun_count), "^"; if (GProperty(OBJECT_TY, t_0, p62_last_seen_location)) { print "last-seen-location: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, p62_last_seen_location), "^"; } print "faction: "; print (T59) GProperty(OBJECT_TY, t_0, p111_faction), "^"; print "combat state: "; print (T60) GProperty(OBJECT_TY, t_0, p112_combat_state), "^"; print "size: "; print (T68) GProperty(OBJECT_TY, t_0, p154_size), "^"; } if (t_0 ofclass K17_weapon) {if (na > 0) { na = 0; print "^"; } print "damage die: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p20_damage_die), "^"; print "weapon damage bonus: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p21_weapon_damage_bonus), "^"; print "dodgability: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p22_dodgability), "^"; print "passive parry max: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p23_passive_parry_max), "^"; print "active parry max: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p24_active_parry_max), "^"; print "weapon attack bonus: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p25_weapon_attack_bonus), "^"; print "special weapon info: "; if (GProperty(OBJECT_TY, t_0, p37_special_weapon_info) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, p37_special_weapon_info), "~", "^"; } if (t_0 ofclass K21_power) {if (na > 0) { na = 0; print "^"; } print "power level: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p38_power_level), "^"; print "command text: "; if (GProperty(OBJECT_TY, t_0, p39_command_text) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, p39_command_text), "~", "^"; } if (t_0 ofclass K24_clothing) {if (na > 0) { na = 0; print "^"; } print "constriction prevention: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, p61_constriction_prevention), "^"; } if (t_0 ofclass K38_scroll) {if (na > 0) { na = 0; print "^"; } print "scroll-effect: "; print (T91) GProperty(OBJECT_TY, t_0, p56_scroll_effect), "^"; print "true-name: "; print (DA_TruthState) GProperty(OBJECT_TY, t_0, p57_true_name), "^"; print "scroll-parsable: "; print (T92) GProperty(OBJECT_TY, t_0, p218_scroll_parsable), "^"; print "plural-name: "; if (GProperty(OBJECT_TY, t_0, p219_plural_name) == EMPTY_TEXT_VALUE) print "none^"; else print "~", (PrintText) GProperty(OBJECT_TY, t_0, p219_plural_name), "~", "^"; } if (t_0 == selfobj) {if (na > 0) { na = 0; print "^"; } print "player form: "; print (T72) GProperty(OBJECT_TY, t_0, p201_player_form), "^"; } if (t_0 == I513_aswang) {if (na > 0) { na = 0; print "^"; } print "as-shape: "; print (T108) GProperty(OBJECT_TY, t_0, p242_as_shape), "^"; } ]; [ ShowRLocation obj top; if (obj ofclass K1_room) return; print " "; if (parent(obj)) { if (obj has worn) print "worn by "; else { if (parent(obj) has animate) print "carried by "; if (parent(obj) has container) print "in "; if (parent(obj) ofclass K1_room) print "in "; if (parent(obj) has supporter) print "on "; } print (the) parent(obj); ShowRLocation(parent(obj)); } else { if (obj.component_parent) { if (top == false) print ", which is "; print "part of ", (the) obj.component_parent; ShowRLocation(obj.component_parent); } else print "out of play"; } ]; [ ShowMeRecursively obj depth f c i k; spaces(2*depth); if (f && (depth > 0) && (TestScope(obj, player) == false)) { print "*"; c = true; } print (name) obj; if (depth > 0) { if (obj.component_parent) print " (part of ", (name) obj.component_parent, ")"; if (obj has worn) print " (worn)"; } if (obj provides KD_Count) { k = KindHierarchy-->((obj.KD_Count)*2); if ((k ~= K2_thing) || (depth==0)) { print " - "; if (k == K4_door or K5_container) { if (obj has transparent) print "transparent "; if (obj has locked) print "locked "; else if (obj has open) print "open "; else print "closed "; } print (I7_Kind_Name) k; } } print "^"; if (obj.component_child) c = c | ShowMeRecursively(obj.component_child, depth+2, f); if ((depth>0) && (obj.component_sibling)) c = c | ShowMeRecursively(obj.component_sibling, depth, f); if (child(obj)) c = c | ShowMeRecursively(child(obj), depth+2, f); if ((depth>0) && (sibling(obj))) c = c | ShowMeRecursively(sibling(obj), depth, f); return c; ]; [ AllowInShowme pr; if (pr == workflag or concealed or mentioned) rfalse; rtrue; ]; [ ShowVerbSub address lines meta i x; wn = 2; x = NextWordStopped(); if (x == 0 || ((x->#dict_par1) & 1) == 0) "Try typing ~showverb~ and then the name of a verb."; meta = ((x->#dict_par1) & 2)/2; i = DictionaryWordToVerbNum(x); address = VM_CommandTableAddress(i); lines = address->0; address++; print "Verb "; if (meta) print "meta "; VM_PrintCommandWords(i); new_line; if (lines == 0) "has no grammar lines."; for (: lines>0 : lines--) { address = UnpackGrammarLine(address); print " "; DebugGrammarLine(); new_line; } ParaContent(); ]; [ DebugGrammarLine pcount; print " * "; for (: line_token-->pcount ~= ENDIT_TOKEN : pcount++) { if ((line_token-->pcount)->0 & $10) print "/ "; print (DebugToken) line_token-->pcount, " "; } print "-> ", (DebugAction) action_to_be; if (action_reversed) print " reverse"; ]; [ DebugToken token; AnalyseToken(token); switch (found_ttype) { ILLEGAL_TT: print ""; ELEMENTARY_TT: switch (found_tdata) { NOUN_TOKEN: print "noun"; HELD_TOKEN: print "held"; MULTI_TOKEN: print "multi"; MULTIHELD_TOKEN: print "multiheld"; MULTIEXCEPT_TOKEN: print "multiexcept"; MULTIINSIDE_TOKEN: print "multiinside"; CREATURE_TOKEN: print "creature"; SPECIAL_TOKEN: print "special"; NUMBER_TOKEN: print "number"; TOPIC_TOKEN: print "topic"; ENDIT_TOKEN: print "END"; } PREPOSITION_TT: print "'", (address) found_tdata, "'"; ROUTINE_FILTER_TT: print "noun=Routine(", found_tdata, ")"; ATTR_FILTER_TT: print (DebugAttribute) found_tdata; SCOPE_TT: print "scope=Routine(", found_tdata, ")"; GPR_TT: print "Routine(", found_tdata, ")"; } ]; #Iftrue (0 > 0); [ TestScriptSub; switch(special_word) { default: print ">--> The following tests are available:^"; } ]; #ifdef TARGET_GLULX; Constant TEST_STACK_SIZE = 128; #ifnot; Constant TEST_STACK_SIZE = 48; #endif; Array test_stack --> TEST_STACK_SIZE; Global test_sp = 0; [ TestStart T R l k; if (test_sp >= TEST_STACK_SIZE) ">--> Testing too many levels deep"; test_stack-->test_sp = T; test_stack-->(test_sp+1) = 0; test_stack-->(test_sp+3) = l; test_sp = test_sp + 4; if ((R-->0) && (R-->0 ~= real_location)) { print "(first moving to ", (name) R-->0, ")^"; PlayerTo(R-->0, 1); } k=1; while (R-->k) { if (R-->k notin player) { print "(first acquiring ", (the) R-->k, ")^"; move R-->k to player; } k++; } print "(Testing.)^"; say__p = 1; ]; [ TestKeyboardPrimitive a_buffer a_table p i j l spaced ch; if (test_sp == 0) { test_stack-->2 = 1; return VM_ReadKeyboard(a_buffer, a_table); } else { p = test_stack-->(test_sp-4); i = test_stack-->(test_sp-3); l = test_stack-->(test_sp-1); print "["; print test_stack-->2; print "] "; test_stack-->2 = test_stack-->2 + 1; style bold; while ((i < l) && (p->i ~= '/')) { ch = p->i; if (spaced || (ch ~= ' ')) { if ((p->i == '[') && (p->(i+1) == '/') && (p->(i+2) == ']')) { ch = '/'; i = i+2; } a_buffer->(j+WORDSIZE) = ch; print (char) ch; i++; j++; spaced = true; } else i++; } style roman; print "^"; #ifdef TARGET_ZCODE; a_buffer->1 = j; #ifnot; ! TARGET_GLULX a_buffer-->0 = j; #endif; VM_Tokenise(a_buffer, a_table); if (p->i == '/') i++; if (i >= l) { test_sp = test_sp - 4; } else test_stack-->(test_sp-3) = i; } ]; #IFNOT; [ TestScriptSub; ">--> No test scripts exist for this game."; ]; #ENDIF; [ TraceOnSub; parser_trace=1; say__p = 1; "[Trace on.]"; ]; [ TraceLevelSub; parser_trace = parsed_number; say__p = 1; print "[Parser tracing set to level ", parser_trace, ".]^"; ]; [ TraceOffSub; parser_trace=0; say__p = 1; "Trace off."; ]; [ XTreeSub i; if (noun == 0) { objectloop (i) if (i ofclass Object && parent(i) == 0) XObj(i); } else XObj(noun,1); ]; [ XObj obj f; if (parent(obj) == 0) print (name) obj; else print (a) obj; print " (", obj, ") "; if (f == 1 && parent(obj) ~= 0) print "(in ", (name) parent(obj), " ", parent(obj), ")"; new_line; if (child(obj) == 0) rtrue; if (obj == Class) WriteListFrom(child(obj), NEWLINE_BIT+INDENT_BIT+ALWAYS_BIT+NOARTICLE_BIT, 1); else WriteListFrom(child(obj), NEWLINE_BIT+INDENT_BIT+ALWAYS_BIT+FULLINV_BIT, 1); ]; [ testcommandnoun obj o2; switch (scope_stage) { 1: rtrue; ! allow multiple objects 2: objectloop (obj) if ((obj ofclass Object) && (obj provides KD_Count)) PlaceInScope(obj, true); 3: print "There seems to be no such object anywhere in the model world.^"; } ]; Verb meta 'abstract' * scope=testcommandnoun 'to' scope=testcommandnoun -> XAbstract; Verb meta 'actions' * -> ActionsOn * 'on' -> ActionsOn * 'off' -> ActionsOff; Verb meta 'gonear' * scope=testcommandnoun -> Gonear; Verb meta 'purloin' * scope=testcommandnoun -> XPurloin; Verb meta 'random' * -> Predictable; Verb meta 'relations' * -> ShowRelations; Verb meta 'rules' * -> RulesOn * 'all' -> RulesAll * 'on' -> RulesOn * 'off' -> RulesOff; Verb meta 'scenes' * -> ScenesOn * 'on' -> ScenesOn * 'off' -> ScenesOff; Verb meta 'scope' * -> Scope * scope=testcommandnoun -> Scope; Verb meta 'showheap' * -> ShowHeap; Verb meta 'showme' * -> ShowMe * scope=testcommandnoun -> ShowMe; Verb meta 'showverb' * special -> Showverb; Verb meta 'test' * -> TestScript * special -> TestScript; Verb meta 'trace' * -> TraceOn * number -> TraceLevel * 'on' -> TraceOn * 'off' -> TraceOff; Verb meta 'tree' * -> XTree * scope=testcommandnoun -> XTree; [ InternalTestCases; ]; #ENDIF; ! DEBUG ! "Include (- ... -)" inclusions with no specified position appear here. [ CheckDPMR result sinp1 sinp2 rv; sinp1 = inp1; sinp2 = inp2; inp1 = noun; inp2 = second; rv = FollowRulebook( 26 ); inp1 = sinp1; inp2 = sinp2; if ((rv) && RulebookSucceeded()) { result = ResultOfRule(); if (result == RBNO_6 ) return 4; if (result == RBNO_7 ) return 3; if (result == RBNO_8 ) return 2; if (result == RBNO_9 ) return 1; if (result == RBNO_10 ) return 0; } return 2; ]; [ LITTLE_USED_DO_NOTHING_R; rfalse; ]; [ KeyPause i; i = VM_KeyChar(); rfalse; ]; [ SPACEPause i; while (i ~= 13 or 31 or 32) { i = VM_KeyChar(); } ]; [ GetKey i; i = VM_KeyChar(); return i; ]; #ifndef printed_text; Array printed_text --> 64; #endif; [ CenterPrint str depth i j; font off; i = VM_ScreenWidth(); VM_PrintToBuffer(printed_text, 63, str); j = (i-(printed_text-->0))/2; j = j-1; VM_MoveCursorInStatusLine(depth, j); print (I7_string) str; font on; ]; [ CenterPrintComplex str i j; font off; print "^"; i = VM_ScreenWidth(); VM_PrintToBuffer(printed_text, 63, str); j = (i-(printed_text-->0))/2; spaces j-1; print (I7_string) str; font on; ]; [ I7ScreenHeight i screen_height; i = 0->32; if (screen_height == 0 or 255) screen_height = 18; screen_height = screen_height - 7; return screen_height; ]; [ DeepStatus depth i screen_width; VM_StatusLineHeight(depth); screen_width = VM_ScreenWidth(); #ifdef TARGET_GLULX; VM_ClearScreen(1); #ifnot; style reverse; for (i=1:i15); o = screen_width - n; VM_MoveCursorInStatusLine(depth, o); ]; Array do_temp_array --> 3; Constant OBJECT_STRUCT_SIZE = NUM_ATTR_BYTES + 25; [ DO_CloneObject src opts rv props i; ! need to have something to copy from if ((src == 0) || (src->0 ~= $70)) rfalse; do_temp_array-->0 = (opts ~= 0); ! will be copied to "preserving relations" BeginActivity(V33_cloning_a_new_object_fro, src); if (ForActivity(V33_cloning_a_new_object_fro, src) == false) { ! copy property table (this also allocates the fixed-size object structure at the beginning) rv = DO_CloneProperties(src); if (~~rv) { AbandonActivity(V33_cloning_a_new_object_fro, src); rfalse; } props = rv + OBJECT_STRUCT_SIZE; ! initialize object rv->0 = $70; ! type ID for ( i=1: i<=NUM_ATTR_BYTES: i++ ) rv->i = src->i; ! attributes i = (1 + NUM_ATTR_BYTES) / 4; rv-->i = 0; ! next object link rv-->(i+1) = src-->(i+1); ! hardware name rv-->(i+2) = props; ! property table rv-->(i+3) = 0; ! parent rv-->(i+4) = 0; ! sibling rv-->(i+5) = 0; ! child ! insert object into Inform's linked lists DO_LinkObject(src, rv); ! update relation structures and maintain invariants for symmetric relations DO_FixRelations(src, rv, opts); } ! we can't refer to the activity variable "new object" from here, so we rely on knowing that it's the first variable in this activity (see above) MStack-->MstVO(10000 + V33_cloning_a_new_object_fro, 0) = rv; EndActivity(V33_cloning_a_new_object_fro, src); return rv; ]; [ DO_CloneProperties src orig size i rv; ! find source object's property table src = (src + 9 + NUM_ATTR_BYTES)-->0; orig = src; ! measure size of table size = 4; i = src-->0; src = src + 4; while (i > 0) { size = size + 10 + ((src-->0 & $FFFF) * WORDSIZE); src = src + 10; i--; } ! obtain memory for new table rv = DT_Alloc(size + OBJECT_STRUCT_SIZE); if (~~rv) rfalse; rv = rv + OBJECT_STRUCT_SIZE; ! copy it DT_CopyBytes(size, orig, rv); ! adjust property data pointers i = rv-->0; src = rv + 4; while (i > 0) { src-->1 = src-->1 - orig + rv; src = src + 10; i--; } return rv - OBJECT_STRUCT_SIZE; ]; ! compatibility with 6F95 #ifndef KD_Count; Constant KD_Count = IK_0; #endif; [ DO_LinkObject src obj i last prop nk; ! add obj to the linked list of all objects last = 0; for (i=Class: i: i=(i + 1 + NUM_ATTR_BYTES)-->0) last = i; if (last) (last + 1 + NUM_ATTR_BYTES)-->0 = obj; ! add obj to the linked lists for each kind it's a member of nk = obj.KD_Count; while (nk > 0) { i = nk*2; prop = DO_FindLinkProp(obj, KindHierarchy-->i); if (prop) { last = src; while (last.prop) last = last.prop; last.prop = obj; obj.prop = 0; } else { print "*** Failed to find link property for ", (object) KindHierarchy-->i, " ***^"; } nk = KindHierarchy-->(i+1); } ]; Constant DO_PROPBUF_LEN 16; Array do_propbuf1 buffer DO_PROPBUF_LEN; ! the kind name, e.g. "K2_thing" Array do_propbuf2 buffer DO_PROPBUF_LEN; ! the property name, e.g. "IK2_Link" [ DO_FindLinkProp obj kind pt i prop; ! get kind name VM_PrintToBuffer(do_propbuf1, DO_PROPBUF_LEN, DO_PrintObject, kind); ! find obj's property table pt = (obj + 9 + NUM_ATTR_BYTES)-->0; ! check each property i = pt-->0; pt = pt + 4; while (i > 0) { prop = ((pt-->0) / $10000) & $FFFF; VM_PrintToBuffer(do_propbuf2, DO_PROPBUF_LEN, DO_PrintProperty, prop); if (DO_PropBufsMatch()) return prop; pt = pt + 10; i--; } rfalse; ]; [ DO_PrintObject x; print (object) x; ]; [ DO_PrintProperty x; print (property) x; ]; [ DO_PropBufsMatch len p1 p2 c1 c2 lc2; len = do_propbuf1-->0; if (do_propbuf2-->0 <= len) len = do_propbuf2-->0 - 1; p1 = do_propbuf1 + WORDSIZE; p2 = do_propbuf2 + WORDSIZE + 1; lc2 = 0; while (len > 0) { c1 = p1->0; c2 = p2->0; ! we used to only have to compare up to the first underscore, but 6G60 added ! "IK#_Count" properties so we have to make sure the character after the ! underscore is an L if (c1 ~= c2) { if (lc2 == '_' && c2 == 'l' or 'L') rtrue; rfalse; } len--; p1++; p2++; lc2 = c2; } rfalse; ]; [ DO_FixRelations src obj preserve i storage; do_temp_array-->0 = src; do_temp_array-->1 = obj; do_temp_array-->2 = preserve; IterateRelations(DO_FixEachRelation); ]; [ DO_FixEachRelation rel src obj preserve i k1 k2 list storage handler valency; ! skip read-only relations if (~~(rel-->RR_PERMISSIONS & RELS_ASSERT_TRUE)) return; k1 = KindBaseTerm(rel-->RR_KIND, 0); k2 = KindBaseTerm(rel-->RR_KIND, 1); if (DO_RelationKindApplies(k1, obj) || DO_RelationKindApplies(k2, obj)) { src = do_temp_array-->0; obj = do_temp_array-->1; preserve = do_temp_array-->2; valency = RELATION_TY_GetValency(rel); if (DO_IsDynamicRelation(rel)) { ! dynamic relation: the relation structure is fine, just add the new object to it if preserving if (preserve && valency ~= RRVAL_O_TO_O or RRVAL_SYM_O_TO_O) { list = LIST_OF_TY_Create(k2); handler = rel-->RR_HANDLER; if (valency ~= RRVAL_O_TO_V && DO_RelationKindApplies(k1, obj)) { handler(rel, RELS_LOOKUP_ALL_Y, src, list); for ( i=LIST_OF_TY_GetLength(list): i>0: i-- ) handler(rel, RELS_ASSERT_TRUE, obj, LIST_OF_TY_GetItem(list, i)); } if (valency ~= RRVAL_V_TO_O && DO_RelationKindApplies(k2, obj)) { handler(rel, RELS_LOOKUP_ALL_X, src, list); for ( i=LIST_OF_TY_GetLength(list): i>0: i-- ) handler(rel, RELS_ASSERT_TRUE, LIST_OF_TY_GetItem(list, i), obj); } BlkFree(list); } } else { ! static relation: we may need to resize the storage array (for V-to-V) or clear properties (for others, when not preserving) storage = rel-->RR_STORAGE; switch (valency) { RRVAL_O_TO_V, RRVAL_V_TO_O: if (~~preserve) DO_ClearOtoX(obj, storage); RRVAL_O_TO_O, RRVAL_SYM_O_TO_O: DO_ClearOtoX(obj, storage); RRVAL_V_TO_V: rel-->RR_STORAGE = DO_AddVtoV(obj, storage, preserve, src, 0); RRVAL_SYM_V_TO_V: rel-->RR_STORAGE = DO_AddVtoV(obj, storage, preserve, src, 1); RRVAL_EQUIV: if (~~preserve) DO_ClearEquiv(obj, storage); } } } ]; [ DO_IsDynamicRelation rel; ! static relations start with REL_BLOCK_HEADER (which includes the BLK_FLAG_RESIDENT bit) if (rel-->0 == REL_BLOCK_HEADER) rfalse; rtrue; ]; [ DO_RelationKindApplies rk obj; ! relations between any kinds of objects are (as of 6E59) stored as relations of OBJECT_TY, ! but maybe that will change in the future if (rk == OBJECT_TY) rtrue; rfalse; ]; [ DO_ClearOtoX obj prop; if (obj provides prop) obj.prop = nothing; ]; [ DO_ClearEquiv obj prop last i; if (obj provides prop) { last = 0; objectloop (i provides prop) if (i.prop > last) last = i.prop; obj.prop = last + 1; } ]; Constant VTOVS_HDR_WORDS = 8; [ DO_AddVtoV obj bitmap preserve src sym lp rp nbmp i m l r n oli ori; lp = bitmap-->VTOVS_LEFT_INDEX_PROP; rp = bitmap-->VTOVS_RIGHT_INDEX_PROP; if (obj provides lp) { if (obj provides rp) m = 3; ! both else m = 1; ! left only } else { if (obj provides rp) m = 2; ! right only else return bitmap; } ! calculate new domain size l = bitmap-->VTOVS_LEFT_DOMAIN_SIZE; if (m == 1 or 3) { oli = obj.lp; obj.lp = l; l++; } r = bitmap-->VTOVS_RIGHT_DOMAIN_SIZE; if (m == 2 or 3) { ori = obj.rp; obj.rp = r; r++; } n = l * r; ! allocate memory for new bitmap ! 1 word for static bitmap pointer + 8 word v2v header + 1 word per 16 entries in the bitmap nbmp = DT_Alloc((1 + VTOVS_HDR_WORDS + ((n+15)/16)) * WORDSIZE); if (~~nbmp) { print "*** No memory to resize V2V relation ***^"; rfalse; } ! point from the dynamic bitmap to the static bitmap if (bitmap >= Blk_Heap) nbmp-->0 = bitmap-->(-1); else nbmp-->0 = bitmap; ! point from the static bitmap to the dynamic bitmap !(nbmp-->0)-->0 = -1; !(nbmp-->0)-->1 = nbmp + WORDSIZE; ! fill in V2V header nbmp = nbmp + WORDSIZE; nbmp-->VTOVS_LEFT_INDEX_PROP = lp; nbmp-->VTOVS_RIGHT_INDEX_PROP = rp; nbmp-->VTOVS_LEFT_DOMAIN_SIZE = l; nbmp-->VTOVS_RIGHT_DOMAIN_SIZE = r; nbmp-->VTOVS_LEFT_PRINTING_ROUTINE = bitmap-->VTOVS_LEFT_PRINTING_ROUTINE; nbmp-->VTOVS_RIGHT_PRINTING_ROUTINE = bitmap-->VTOVS_RIGHT_PRINTING_ROUTINE; nbmp-->VTOVS_CACHE_BROKEN = 1; nbmp-->VTOVS_CACHE = 0; ! expand the bits l = bitmap-->VTOVS_LEFT_DOMAIN_SIZE; r = bitmap-->VTOVS_RIGHT_DOMAIN_SIZE; if (m == 2 or 3) { ! need to insert bits for a new column DO_InsertBits(bitmap + VTOVS_HDR_WORDS*WORDSIZE, l * r, r, nbmp + VTOVS_HDR_WORDS*WORDSIZE); } else { ! just copy for (i=(l*r + 15)/16: i>0: --i) nbmp-->(VTOVS_HDR_WORDS+i) = bitmap-->(VTOVS_HDR_WORDS+i); } ! preserve relations if needed if (preserve) { if (m == 1 or 3) objectloop (i provides rp) if (DO_Relation_TestVtoV_Raw(src, bitmap, i, sym)) DO_Relation_NowVtoV_Raw(obj, nbmp, i, sym); if ((~~sym) && m == 2 or 3) objectloop (i provides lp) if (DO_Relation_TestVtoV_Raw(i, bitmap, src, sym)) DO_Relation_NowVtoV_Raw(i, nbmp, obj, sym); } ! deallocate old bitmap if necessary if (bitmap >= Blk_Heap) DT_Free(bitmap - WORDSIZE); return nbmp; ]; ! expands 'nbits' bits from src to dest, inserting a zero bit every ! 'interval' bits and using only the lower 16 bits of each word. ! the number of words used for dest is (nbits+(nbits/interval)+15)/16. [ DO_InsertBits src nbits interval dest sw sb dw db i si f; sw = 0; sb = 1; dw = 0; db = 1; nbits = nbits + (nbits / interval); f = 0; si = 0; for (i=0: idw = 0; if (f) { f = 0; } else { if (src-->sw & sb) dest-->dw = dest-->dw | db; sb = sb * 2; if (sb == $10000) { sw++; sb = 1; } si++; if (si == interval) { f = 1; si = 0; } } db = db * 2; if (db == $10000) { dw++; db = 1; } } ]; ! "raw" versions of a couple functions from Relations.i6t, to operate directly on the V2V bitmap [ DO_Relation_NowVtoV_Raw obj1 vtov_structure obj2 sym pr pr2 i1 i2; if (sym && (obj2 ~= obj1)) { DO_Relation_NowVtoV_Raw(obj2, vtov_structure, obj1, false); } pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; vtov_structure-->VTOVS_CACHE_BROKEN = true; ! Mark any cache as broken if (pr) { ! if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; ! else return RunTimeProblem(RTP_IMPREL, obj1, relation); i1 = obj1.pr; } else i1 = obj1-1; if (pr2) { ! if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; ! else return RunTimeProblem(RTP_IMPREL, obj2, relation); i2 = obj2.pr2; } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; vtov_structure-->pr = (vtov_structure-->pr) | i1; ]; [ DO_Relation_TestVtoV_Raw obj1 vtov_structure obj2 sym pr pr2 i1 i2; pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; if (sym && (obj2 > obj1)) { sym = obj1; obj1 = obj2; obj2 = sym; } if (pr) { ! if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; ! else { RunTimeProblem(RTP_IMPREL, obj1, relation); rfalse; } i1 = obj1.pr; } else i1 = obj1-1; if (pr2) { ! if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; ! else { RunTimeProblem(RTP_IMPREL, obj2, relation); rfalse; } i2 = obj2.pr2; } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; if ((vtov_structure-->pr) & i1) rtrue; rfalse; ]; [ DO_UnlinkProp prop obj v; v = obj.prop; obj.prop = BlkValueCreate(v-->BLK_HEADER_KOV); BlkValueCopy(obj.prop, v); ]; [ FileIO_LoadSavedGame extf struc fref res; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to access a non-file"); struc = TableOfExternalFiles-->extf; fref = glk_fileref_create_by_name(fileusage_SavedGame + fileusage_BinaryMode, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (fref == 0) jump RFailed; gg_savestr = glk_stream_open_file(fref, $02, GG_SAVESTR_ROCK); glk_fileref_destroy(fref); if (gg_savestr == 0) jump RFailed; @restore gg_savestr res; glk_stream_close(gg_savestr, 0); gg_savestr = 0; rtrue; .RFailed; CarryOutActivity( V35_failing_to_restore_from_ ); ]; [ FileIO_WriteSavedGame extf struc fref res; if (actor ~= player) rfalse; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to access a non-file"); struc = TableOfExternalFiles-->extf; fref = glk_fileref_create_by_name(fileusage_SavedGame + fileusage_BinaryMode, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (fref == 0) jump SFailed; gg_savestr = glk_stream_open_file(fref, $01, GG_SAVESTR_ROCK); glk_fileref_destroy(fref); if (gg_savestr == 0) jump SFailed; @save gg_savestr res; if (res == -1) { ! The player actually just typed "restore". We have to recover all the Glk objects; ! the values in our global variables are all wrong. GGRecoverObjects(); glk_stream_close(gg_savestr, 0); ! stream_close gg_savestr = 0; CarryOutActivity( V34_restoring_from_a_saved_g ); rtrue; } glk_stream_close(gg_savestr, 0); ! stream_close gg_savestr = 0; if (res == 0) rtrue; .SFailed; CarryOutActivity( V37_failing_to_automatically ); ]; [ FileIO_SavedGameExists extf fref struc rv usage; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) rfalse; struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_SavedGame + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); rv = glk_fileref_does_file_exist(fref); glk_fileref_destroy(fref); return rv; ]; [ FileIO_DeleteSavedGame extf struc fref res; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to access a non-file"); struc = TableOfExternalFiles-->extf; fref = glk_fileref_create_by_name(fileusage_SavedGame + fileusage_BinaryMode, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (fref == 0) rfalse; if (glk_fileref_does_file_exist(fref)) { res = glk_fileref_delete_file(fref); if (res ~= 0) CarryOutActivity( V38_failing_to_delete_a_save ); } glk_fileref_destroy(fref); ]; [ PlugPlural obj; SetPronoun('them', obj); SetPronoun('it', obj); ]; ! Request 0: phrase nothing -> nothing ! From the Standard Rules ! To decide if intervened in miscellaneous message: [ PHR_717_r0 ; ! phrase 1 ! [1: decide on false] return 0; rfalse; ]; ! Request 1: phrase nothing -> nothing ! From the Standard Rules ! To decide if intervened in miscellaneous list message: [ PHR_718_r1 ; ! phrase 1 ! [1: decide on false] return 0; rfalse; ]; ! Request 2: phrase nothing -> nothing ! From the Standard Rules ! To decide if intervened in action message: [ PHR_719_r2 ; ! phrase 1 ! [1: decide on false] return 0; rfalse; ]; ! Request 3: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To set up initial scores for the player: [ PHR_2140_r3 ; ! phrase 1 ! [1: now permanent health of the player is 13] WriteGProperty(9, player,p17_permanent_health,13); ! phrase 2 ! [2: now melee of the player is 1] WriteGProperty(9, player,p18_melee,1); ! phrase 3 ! [3: now defence of the player is 7] WriteGProperty(9, player,p19_defence,7); ! phrase 4 ! [4: now perception of the player is 5] WriteGProperty(9, player,p33_perception,5); ! phrase 5 ! [5: now dexterity of the player is 5] WriteGProperty(9, player,p34_dexterity,5); ! phrase 6 ! [6: now willpower of the player is 5] WriteGProperty(9, player,p35_willpower,5); ! phrase 7 ! [7: give the player a stat bonus] (PHR_2141_r212 ()); ! phrase 8 ! [8: give the player a stat bonus] (PHR_2141_r212 ()); ! phrase 9 ! [9: give the player a stat penalty] (PHR_2142_r213 ()); ! phrase 10 ! [10: restore the health of the player] (PHR_958_r181 (player)); rfalse; ]; ! Request 4: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To apply the difficulty: [ PHR_2138_r4 t_0 ! Local variable e.g. 'k' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = monster t_3 ! Local variable e.g. '?-1,-1?' = monster t_4 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the difficulty is 0 begin] if ((((Global_Vars-->131) == 0))) { ! phrase 2 ! [2: increase health of the player by 5] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) + 5); ! phrase 3 ! [3: increase permanent health of the player by 5] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 5); ! phrase 4 ! [4: increase melee of the player by 1] WriteGProperty(9, player,p18_melee,GProperty(9, player,p18_melee) + 1); ! phrase 5 ! [5: increase defence of the player by 1] WriteGProperty(9, player,p19_defence,GProperty(9, player,p19_defence) + 1); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if the difficulty is 1 begin] if ((((Global_Vars-->131) == 1))) { ! phrase 8 ! [8: increase health of the player by 2] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) + 2); ! phrase 9 ! [9: increase permanent health of the player by 2] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 2); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: let k be 7 + difficulty] t_0 = (7+(Global_Vars-->131)) ; ! phrase 12 ! [12: repeat with guy running through monsters begin] for (t_1=Prop_395(0), t_2=Prop_395(t_1): t_1: t_1=t_2, t_2=Prop_395(t_2)) { ! phrase 13 ! [13: now health of guy is k times health of guy] WriteGProperty(9, t_1,p14_health, (t_0*GProperty(9, t_1,p14_health)) ); ! phrase 14 ! [14: now health of guy is health of guy divided by 10] WriteGProperty(9, t_1,p14_health, (IntegerDivide(GProperty(9, t_1,p14_health),10)) ); ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: if difficulty is greater than 1 begin] if ((((Global_Vars-->131) > 1))) { ! phrase 17 ! [17: let n be difficulty - 1] t_1 = ((Global_Vars-->131)-1) ; ! phrase 18 ! [18: repeat with guy running through monsters begin] for (t_2=Prop_396(0), t_3=Prop_396(t_2): t_2: t_2=t_3, t_3=Prop_396(t_3)) { ! phrase 19 ! [19: repeat with i running from 1 to n begin] for (t_4=1: t_4<=t_1: t_4++) { ! phrase 20 ! [20: buff guy] (PHR_2139_r211 (t_2)); ! phrase 21 ! [21: end repeat] } ! phrase 22 ! [22: end repeat] } ! phrase 23 ! [23: end if] } rfalse; ]; ! Request 5: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To update the achievements: [ PHR_2159_r5 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = achievement ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through table of achievements begin] @push ct_0; @push ct_1; for (t_0=T25_achievements,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: let current achievement be the achievement entry] t_2 = TableLookUpEntry(ct_0,149,ct_1); ! phrase 3 ! [3: unless there is a held achievement of current achievement in the table of held achievements begin] if (~~(( (ExistsTableLookUpCorr(T26_held_achievements,150,150,t_2)) ))) { ! phrase 4 ! [4: choose a blank row in the table of held achievements] ct_0 = T26_held_achievements; ct_1 = TableBlankRow(ct_0); ! phrase 5 ! [5: now held achievement entry is current achievement] TableLookUpEntry(ct_0,150,ct_1,1,t_2); ! phrase 6 ! [6: now held difficulty entry is -1] TableLookUpEntry(ct_0,151,ct_1,1,-1); ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! Request 6: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To write out the file of victories without reset: [ PHR_2136_r6 ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: choose row 1 in the table of victories] ct_0 = T21_victories; ct_1 = 1; ! phrase 2 ! [2: now the victories entry is number-of-victories] TableLookUpEntry(ct_0,146,ct_1,1,(Global_Vars-->128)); ! phrase 3 ! [3: now the streak entry is winning-streak] TableLookUpEntry(ct_0,147,ct_1,1,(Global_Vars-->129)); ! phrase 4 ! [4: now the best-streak entry is best-winning-streak] TableLookUpEntry(ct_0,148,ct_1,1,(Global_Vars-->130)); ! phrase 5 ! [5: write file of victories from table of victories] FileIO_PutTable(I525_file_of_victories, T21_victories); ! phrase 6 ! [6: write file of achievements from table of held achievements] FileIO_PutTable(I527_file_of_achievements, T26_held_achievements); rfalse; ]; ! Request 7: phrase number -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To say difficulty level ( m - a number ): [ PHR_2153_r7 t_0 ! Call parameter 'm' = number ; ! phrase 1 ! [1: if m is 0 begin] if (((t_0 == 0))) { ! phrase 2 ! [2: say ~EASY[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1539; ParaContent(); RunParagraphOn(); .L_Say1114; .L_SayX1035; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if m is 1 begin] if (((t_0 == 1))) { ! phrase 5 ! [5: say ~NORMAL[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1540; ParaContent(); RunParagraphOn(); .L_Say1115; .L_SayX1036; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if m is 2 begin] if (((t_0 == 2))) { ! phrase 8 ! [8: say ~HARD[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1541; ParaContent(); RunParagraphOn(); .L_Say1116; .L_SayX1037; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: if m is 3 begin] if (((t_0 == 3))) { ! phrase 11 ! [11: say ~VERY HARD[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1542; ParaContent(); RunParagraphOn(); .L_Say1117; .L_SayX1038; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: if m is 4 begin] if (((t_0 == 4))) { ! phrase 14 ! [14: say ~NIGHTMARE[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1543; ParaContent(); RunParagraphOn(); .L_Say1118; .L_SayX1039; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: if m is 5 begin] if (((t_0 == 5))) { ! phrase 17 ! [17: say ~INSANE[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1544; ParaContent(); RunParagraphOn(); .L_Say1119; .L_SayX1040; ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: if m is 6 begin] if (((t_0 == 6))) { ! phrase 20 ! [20: say ~HELL[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1545; ParaContent(); RunParagraphOn(); .L_Say1120; .L_SayX1041; ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: if m is 7 begin] if (((t_0 == 7))) { ! phrase 23 ! [23: say ~BEYOND HELL[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1546; ParaContent(); RunParagraphOn(); .L_Say1121; .L_SayX1042; ! phrase 24 ! [24: end if] } ! phrase 25 ! [25: if m is greater than 7 begin] if (((t_0 > 7))) { ! phrase 26 ! [26: say ~IMPOSSIBLE[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1547; ParaContent(); RunParagraphOn(); .L_Say1122; .L_SayX1043; ! phrase 27 ! [27: end if] } rfalse; ]; ! Request 8: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To create the dungeon: [ PHR_1075_r8 ; ! phrase 1 ! [1: now map approved is false] (Global_Vars-->49) = 0; ! phrase 2 ! [2: while map approved is false begin] while (((((Global_Vars-->49) && true) == (0 && true)))) { ! phrase 3 ! [3: say ~Generating map...~] say__p=1;ParaContent(); print (PrintText) SC_1548; new_line; .L_Say1123; .L_SayX1044; ! phrase 4 ! [4: consider the resetting the map rules] ProcessRulebook(456); ! phrase 5 ! [5: consider the creating the map rules] ProcessRulebook(457); ! phrase 6 ! [6: if generation info is true , say ~[paragraph break]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say1124; .L_SayX1045; } ! phrase 7 ! [7: approve the map] (PHR_1082_r183 ()); ! phrase 8 ! [8: if map approved is false begin] if (((((Global_Vars-->49) && true) == (0 && true)))) { ! phrase 9 ! [9: say ~Map rejected.~] say__p=1;ParaContent(); print (PrintText) SC_1549; new_line; .L_Say1125; .L_SayX1046; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end while] } ! phrase 12 ! [12: say ~Placing monsters...~] say__p=1;ParaContent(); print (PrintText) SC_1550; new_line; .L_Say1126; .L_SayX1047; ! phrase 13 ! [13: place monsters] (PHR_1099_r186 ()); ! phrase 14 ! [14: if generation info is true , say ~[paragraph break]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); DivideParagraphPoint(); new_line; .L_Say1127; .L_SayX1048; } ! phrase 15 ! [15: say ~Placing treasures...~] say__p=1;ParaContent(); print (PrintText) SC_1551; new_line; .L_Say1128; .L_SayX1049; ! phrase 16 ! [16: stock the dungeon] (PHR_1109_r193 ()); ! phrase 17 ! [17: make the dungeon interesting] (PHR_1119_r196 ()); ! phrase 18 ! [18: say ~Finishing the dungeon...~] say__p=1;ParaContent(); print (PrintText) SC_1552; new_line; .L_Say1129; .L_SayX1050; ! phrase 19 ! [19: finish the dungeon] (PHR_1120_r197 ()); ! phrase 20 ! [20: unless generation info is true begin] if (~~(((((Global_Vars-->135) && true) == (1 && true))))) { ! phrase 21 ! [21: clear the screen] VM_ClearScreen(0); ! phrase 22 ! [22: end unless] } rfalse; ]; ! Request 9: phrase thing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether ( item - a thing ) can rust: [ PHR_1243_r9 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now test object is item] (Global_Vars-->81) = t_0; ! phrase 2 ! [2: consider the rusting rules] ProcessRulebook(504); ! phrase 3 ! [3: if rule failed begin] if (( (RulebookFailed()) )) { ! phrase 4 ! [4: decide no] rfalse; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide yes] rtrue; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 10: phrase thing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To corrode ( item - a thing ): [ PHR_1251_r10 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: if item corrodes begin] if (((PHR_1252_r203 (t_0)))) { ! phrase 2 ! [2: if item is visible begin] if ((((Adj_3_t1_v9(t_0))))) { ! phrase 3 ! [3: say ~[The item] dissolve[if item is not plural-named]s[end if].~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_1553; if (~~((((~~(((Adj_48_t1_v9(t_0))))))))) jump L_Say1130; ParaContent(); print (PrintText) SC_1149; .L_Say1130; .L_SayX1051; ParaContent(); print (PrintText) SC_310; new_line; .L_Say1131; .L_SayX1052; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: remove item from play] RemoveFromPlay(t_0); ! phrase 6 ! [6: otherwise if item is a weapon] } else if (((t_0 ofclass K17_weapon))) { ! phrase 7 ! [7: if item corrodes begin] if (((PHR_1252_r203 (t_0)))) { ! phrase 8 ! [8: decrease weapon attack bonus of item by 1] WriteGProperty(9, t_0,p25_weapon_attack_bonus,GProperty(9, t_0,p25_weapon_attack_bonus) - 1); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: if item corrodes begin] if (((PHR_1252_r203 (t_0)))) { ! phrase 11 ! [11: decrease weapon attack bonus of item by 1] WriteGProperty(9, t_0,p25_weapon_attack_bonus,GProperty(9, t_0,p25_weapon_attack_bonus) - 1); ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: if item corrodes begin] if (((PHR_1252_r203 (t_0)))) { ! phrase 14 ! [14: decrease damage die of item by 1] WriteGProperty(9, t_0,p20_damage_die,GProperty(9, t_0,p20_damage_die) - 1); ! phrase 15 ! [15: if damage die of item is less than 1 begin] if (((GProperty(9, t_0,p20_damage_die) < 1))) { ! phrase 16 ! [16: now damage die of item is 1] WriteGProperty(9, t_0,p20_damage_die,1); ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end if] } rfalse; ]; ! Request 11: phrase person -> nothing ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! To decide whether there is no perceived threat for ( guy - a person ): [ PHR_1314_r11 t_0 ! Call parameter 'guy' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: repeat with guy2 running through persons enclosed by the location of guy begin] for (t_1=Prop_397(, LocationOf(t_0) ,0), t_2=Prop_397(, LocationOf(t_0) ,t_1): t_1: t_1=t_2, t_2=Prop_397(, LocationOf(t_0) ,t_2)) { ! phrase 2 ! [2: if the faction of guy hates the faction of guy2 begin] if ((((Relation_TestVtoV(GProperty(9, t_0,p111_faction),Rel_Record_67,GProperty(9, t_1,p111_faction),false))))) { ! phrase 3 ! [3: if guy2 is not hidden or guy is unnaturally aware begin] if ((((~~(((Adj_221_t1_v9(t_1))))))) || ((((Adj_225_t1_v9(t_0)))))) { ! phrase 4 ! [4: decide no] rfalse; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: decide yes] rtrue; rfalse; ]; ! Request 12: phrase (room, room) -> direction ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide which direction is the direction from ( a - a room ) to ( b - a room ): [ PHR_1092_r12 t_0 ! Call parameter 'a' = room t_1 ! Call parameter 'b' = room ; ! phrase 1 ! [1: if absolute distance between a and b is not 1 begin] if (((~~(((PHR_1091_r118 (t_0,t_1)) == 1))))) { ! phrase 2 ! [2: decide on northwest] return I48_northwest; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: if x-coordinate of a minus x-coordinate of b is -1 begin] if ((( (GProperty(9, t_0,p28_x_coordinate)-GProperty(9, t_1,p28_x_coordinate)) == -1))) { ! phrase 5 ! [5: decide on north] return I46_north; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if x-coordinate of a minus x-coordinate of b is 1 begin] if ((( (GProperty(9, t_0,p28_x_coordinate)-GProperty(9, t_1,p28_x_coordinate)) == 1))) { ! phrase 8 ! [8: decide on south] return I49_south; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: if y-coordinate of a minus y-coordinate of b is -1 begin] if ((( (GProperty(9, t_0,p29_y_coordinate)-GProperty(9, t_1,p29_y_coordinate)) == -1))) { ! phrase 11 ! [11: decide on east] return I52_east; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: if y-coordinate of a minus y-coordinate of b is 1 begin] if ((( (GProperty(9, t_0,p29_y_coordinate)-GProperty(9, t_1,p29_y_coordinate)) == 1))) { ! phrase 14 ! [14: decide on west] return I53_west; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: if z-coordinate of a minus z-coordinate of b is -1 begin] if ((( (GProperty(9, t_0,p30_z_coordinate)-GProperty(9, t_1,p30_z_coordinate)) == -1))) { ! phrase 17 ! [17: decide on up] return I54_up; ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: if z-coordinate of a minus z-coordinate of b is 1 begin] if ((( (GProperty(9, t_0,p30_z_coordinate)-GProperty(9, t_1,p30_z_coordinate)) == 1))) { ! phrase 20 ! [20: decide on down] return I55_down; ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } return I46_north; ]; ! Request 13: phrase achievement -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To award achievement ( current achievement - an achievement ): [ PHR_2161_r13 t_0 ! Call parameter 'current achievement' = achievement ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: if there is a held achievement of current achievement in the table of held achievements begin] if (( (ExistsTableLookUpCorr(T26_held_achievements,150,150,t_0)) )) { ! phrase 2 ! [2: choose row with a held achievement of current achievement in the table of held achievements] ct_0 = T26_held_achievements; ct_1 = TableRowCorr(ct_0, 150, t_0); ! phrase 3 ! [3: if held difficulty entry is less than difficulty begin] if (((TableLookUpEntry(ct_0,151,ct_1) < (Global_Vars-->131)))) { ! phrase 4 ! [4: now held difficulty entry is difficulty] TableLookUpEntry(ct_0,151,ct_1,1,(Global_Vars-->131)); ! phrase 5 ! [5: say ~[line break]You have been awarded the [bold type][current achievement][roman type] achievement!~] say__p=1;ParaContent(); new_line; ParaContent(); print (PrintText) SC_1554; ParaContent(); style bold; ParaContent(); print (T109) t_0; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1555; new_line; .L_Say1132; .L_SayX1053; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 14: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To wake the Nameless Horror: [ PHR_1993_r14 ; ! phrase 1 ! [1: now nameless horror is follower] (Adj_172_t2_v9(I499_nameless_horror)); rfalse; ]; ! Request 15: phrase nothing -> nothing ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! To hide: [ PHR_1315_r15 t_0 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: unless hate is present begin] if (~~(((PHR_833_r16 ())))) { ! phrase 2 ! [2: say ~You blend into the shadows.~] say__p=1;ParaContent(); print (PrintText) SC_1556; new_line; .L_Say1133; .L_SayX1054; ! phrase 3 ! [3: now the player is hidden] (Adj_221_t2_v9(player)); ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: consider the detection rules] ProcessRulebook(516); ! phrase 6 ! [6: increase detection probability by 50] (Global_Vars-->89) = (Global_Vars-->89) + 50; ! phrase 7 ! [7: let n be a random number between 1 and 100] t_0 = R_DecimalNumber(1, 100) ; ! phrase 8 ! [8: unless the detection probability is greater than n begin] if (~~((((Global_Vars-->89) > t_0)))) { ! phrase 9 ! [9: say ~You blend into the shadows.~] say__p=1;ParaContent(); print (PrintText) SC_1556; new_line; .L_Say1134; .L_SayX1055; ! phrase 10 ! [10: now the player is hidden] (Adj_221_t2_v9(player)); ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~You fail to hide.~] say__p=1;ParaContent(); print (PrintText) SC_1557; new_line; .L_Say1135; .L_SayX1056; ! phrase 13 ! [13: end unless] } ! phrase 14 ! [14: end unless] } rfalse; ]; ! Request 16: phrase nothing -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To decide whether hate is present ( deprecated ): [ PHR_833_r16 ; ! phrase 1 ! [1: consider the hate rules] ProcessRulebook(406); ! phrase 2 ! [2: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 3 ! [3: decide yes] rtrue; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: decide no] rfalse; ! phrase 6 ! [6: end if] } rfalse; ]; ! Request 17: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether ( guy - a person ) is blind: [ PHR_1169_r17 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: consider the blindness rules] ProcessRulebook(489); ! phrase 3 ! [3: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 4 ! [4: decide yes] rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide no] rfalse; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 18: phrase (room, thing, person) -> nothing ! From "Kerkerkruip Events" by Victor Gijsbers ! To have a fragmentation event in ( place - a room ) with ( item - a thing ) by ( guy - a person ): [ PHR_1122_r18 t_0 ! Call parameter 'place' = room t_1 ! Call parameter 'item' = thing t_2 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now fragmentation-place is place] (Global_Vars-->68) = t_0; ! phrase 2 ! [2: now fragmentation-guy is guy] (Global_Vars-->69) = t_2; ! phrase 3 ! [3: now fragmentation-item is item] (Global_Vars-->70) = t_1; ! phrase 4 ! [4: consider the fragmentation rules] ProcessRulebook(471); rfalse; ]; ! Request 19: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To do the absorption with ( guy - a person ): [ PHR_1159_r19 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: increase score by level of guy] score = score + GProperty(9, t_0,p31_level); ! phrase 2 ! [2: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 3 ! [3: unless absorption is stopped begin] if (~~(((PHR_1165_r202 ())))) { ! phrase 4 ! [4: do power transferral with the guy] (PHR_1160_r198 (t_0)); ! phrase 5 ! [5: heal fully because the guy is slain] (PHR_1161_r199 (t_0)); ! phrase 6 ! [6: end unless] } ! phrase 7 ! [7: have the guy disappear] (PHR_1162_r200 (t_0)); ! phrase 8 ! [8: do achievement awarding for the guy] (PHR_1163_r201 (t_0)); rfalse; ]; ! Request 20: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether teleportation is impossible for ( guy - a person ): [ PHR_1179_r20 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: consider the teleport impossible rules] ProcessRulebook(496); ! phrase 3 ! [3: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 4 ! [4: decide yes] rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide no] rfalse; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 21: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To turn off mentioning hotness: [ PHR_1208_r21 ; ! phrase 1 ! [1: now not-mentioning-hotness is true] (Global_Vars-->82) = 1; ! phrase 2 ! [2: now not-mentioning-flaming is true] (Global_Vars-->83) = 1; rfalse; ]; ! Request 22: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To turn on mentioning hotness: [ PHR_1209_r22 ; ! phrase 1 ! [1: now not-mentioning-hotness is false] (Global_Vars-->82) = 0; ! phrase 2 ! [2: now not-mentioning-flaming is false] (Global_Vars-->83) = 0; rfalse; ]; ! Request 23: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To turn off mentioning rust: [ PHR_1228_r23 ; ! phrase 1 ! [1: now not-mentioning-rust is true] (Global_Vars-->85) = 1; rfalse; ]; ! Request 24: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To turn on mentioning rust: [ PHR_1229_r24 ; ! phrase 1 ! [1: now not-mentioning-rust is false] (Global_Vars-->85) = 0; rfalse; ]; ! Request 25: phrase room -> number ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! To decide what number is the smoke penalty of ( place - a room ): [ PHR_1316_r25 t_0 ! Call parameter 'place' = room t_1 ! Local variable e.g. 'n' = number ; ! phrase 1 ! [1: let n be the smoke timer of place] t_1 = GProperty(9, t_0,p54_smoke_timer); ! phrase 2 ! [2: increase n by 3] t_1 = t_1 + 3; ! phrase 3 ! [3: now n is n divided by 4] t_1 = (IntegerDivide(t_1,4)) ; ! phrase 4 ! [4: if n is greater than 3 , now n is 3] if (((t_1 > 3))) { t_1 = 3; } ! phrase 5 ! [5: decide on n] return t_1; return 0; ]; ! Request 26: phrase nothing -> nothing ! From "Kerkerkruip Locations" by Victor Gijsbers ! To have Aite intervene: [ PHR_1587_r26 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'X' = number t_2 ! Local variable e.g. 'guy' = object ; ! phrase 1 ! [1: let n be a random number between 1 and 6] t_0 = R_DecimalNumber(1, 6) ; ! phrase 2 ! [2: if aite wrath state is 1 and n is less than 4 begin] if (((((Global_Vars-->104) == 1))) && (((t_0 < 4)))) { ! phrase 3 ! [3: increase n by 3] t_0 = t_0 + 3; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if aite wrath state is -1 and n is greater than 3 begin] if (((((Global_Vars-->104) == -1))) && (((t_0 > 3)))) { ! phrase 6 ! [6: decrease n by 3] t_0 = t_0 - 3; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if player is beloved of aite begin] if (((PHR_1205_r79 (player)))) { ! phrase 9 ! [9: increase n by 1] t_0 = t_0 + 1; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if at least one hostile alive person is enclosed by the location begin] if ((Prop_398())) { ! phrase 12 ! [12: repeat with guy running through hostile alive persons enclosed by the location begin] for (t_1=Prop_399(0), t_2=Prop_399(t_1): t_1: t_1=t_2, t_2=Prop_399(t_2)) { ! phrase 13 ! [13: if guy is beloved of aite begin] if (((PHR_1205_r79 (t_1)))) { ! phrase 14 ! [14: if a random chance of 1 in 2 succeeds , decrease n by 1] if (( (GenerateRandomNumber(1, 2) <= 1) )) { t_0 = t_0 - 1; } ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: end repeat] } ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: if n is greater than 6 , now n is 6] if (((t_0 > 6))) { t_0 = 6; } ! phrase 19 ! [19: if n is less than 1 , now n is 1] if (((t_0 < 1))) { t_0 = 1; } ! phrase 20 ! [20: let x be permanent health of the player] t_1 = GProperty(9, player,p17_permanent_health); ! phrase 21 ! [21: now x is x divided by 8] t_1 = (IntegerDivide(t_1,8)) ; ! phrase 22 ! [22: unless at least one hostile alive person is enclosed by the location begin] if (~~((Prop_400()))) { ! phrase 23 ! [23: if n is greater than 2 begin] if (((t_0 > 2))) { ! phrase 24 ! [24: make no decision] rfalse; ! phrase 25 ! [25: end if] } ! phrase 26 ! [26: end unless] } ! phrase 27 ! [27: let guy be a random hostile alive person enclosed by the location] t_2 = (Prop_401()) ; ! phrase 28 ! [28: if n is begin] switch(t_0) { ! phrase 29 ! [29: -- 1] 1: ! phrase 30 ! [30: say ~A gigantic [one of]sword[or]spear[or]pike[at random] bursts out of the ground, skewering you for [bold type][X times 2] damage[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1558; ParaContent(); I7_ST_say_one_of-->13 = i7_soo_ran(I7_ST_say_one_of-->13, 3); switch((I7_ST_say_one_of-->13)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_1559; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1560; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1561; ParaContent(); } ParaContent(); print (PrintText) SC_1562; ParaContent(); style bold; ParaContent(); print (say__n= (t_1*2) ); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say1136; .L_SayX1057; ! phrase 31 ! [31: decrease the health of the player by x times 2] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - (t_1*2) ); ! phrase 32 ! [32: unless the player is dead begin] if (~~((((~~Adj_33_t1_v9(player)))))) { ! phrase 33 ! [33: let the player lose concentration] (PHR_1016_r82 (player)); ! phrase 34 ! [34: if the player is hidden begin] if ((((Adj_221_t1_v9(player))))) { ! phrase 35 ! [35: now the player is not hidden] (Adj_221_t3_v9(player)); ! phrase 36 ! [36: say ~Your cry of pain reveals your presence.~] say__p=1;ParaContent(); print (PrintText) SC_1563; new_line; .L_Say1137; .L_SayX1058; ! phrase 37 ! [37: end if] } ! phrase 38 ! [38: end unless] } ! phrase 39 ! [39: if health of the player is less than 1 begin] if (((GProperty(9, player,p14_health) < 1))) { ! phrase 40 ! [40: end the game saying ~Aite is a dangerous mistress.~] deadflag=SC_1564; story_complete=false; ! phrase 41 ! [41: end if] } ! phrase 42 ! [42: -- 2] ; 2: ! phrase 43 ! [43: say ~A huge [one of]sword[or]spear[or]pike[at random] bursts out of the ground, impaling you for [bold type][X] damage[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1565; ParaContent(); I7_ST_say_one_of-->14 = i7_soo_ran(I7_ST_say_one_of-->14, 3); switch((I7_ST_say_one_of-->14)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_1559; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1560; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1561; ParaContent(); } ParaContent(); print (PrintText) SC_1566; ParaContent(); style bold; ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say1138; .L_SayX1059; ! phrase 44 ! [44: decrease the health of the player by x] WriteGProperty(9, player,p14_health,GProperty(9, player,p14_health) - t_1); ! phrase 45 ! [45: unless the player is dead begin] if (~~((((~~Adj_33_t1_v9(player)))))) { ! phrase 46 ! [46: let the player lose concentration] (PHR_1016_r82 (player)); ! phrase 47 ! [47: end unless] } ! phrase 48 ! [48: if health of the player is less than 1 begin] if (((GProperty(9, player,p14_health) < 1))) { ! phrase 49 ! [49: end the game saying ~Aite is a dangerous mistress.~] deadflag=SC_1564; story_complete=false; ! phrase 50 ! [50: end if] } ! phrase 51 ! [51: -- 3] ; 3: ! phrase 52 ! [52: if the concentration of the guy is less than 3 begin] if (((GProperty(OBJECT_TY, t_2,p26_concentration) < 3))) { ! phrase 53 ! [53: say ~[The guy] suddenly looks [bold type]highly concentrated[roman type], as if divinely inspired.~] say__p=1;ParaContent(); print (The) t_2; ParaContent(); print (PrintText) SC_1567; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1568; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1569; new_line; .L_Say1139; .L_SayX1060; ! phrase 54 ! [54: now the concentration of the guy is 3] WriteGProperty(OBJECT_TY, t_2,p26_concentration,3); ! phrase 55 ! [55: end if] } ! phrase 56 ! [56: -- 4] ; 4: ! phrase 57 ! [57: if the concentration of the player is less than 3 begin] if (((GProperty(9, player,p26_concentration) < 3))) { ! phrase 58 ! [58: say ~You suddenly feel divinely inspired and [bold type]highly concentrated[roman type].~] say__p=1;ParaContent(); print (PrintText) SC_1570; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1568; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; new_line; .L_Say1140; .L_SayX1061; ! phrase 59 ! [59: now the concentration of the player is 3] WriteGProperty(9, player,p26_concentration,3); ! phrase 60 ! [60: end if] } ! phrase 61 ! [61: -- 5] ; 5: ! phrase 62 ! [62: say ~A huge [one of]sword[or]spear[or]pike[at random] bursts out of the ground, impaling [the guy] for [bold type][X] damage[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1565; ParaContent(); I7_ST_say_one_of-->15 = i7_soo_ran(I7_ST_say_one_of-->15, 3); switch((I7_ST_say_one_of-->15)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_1559; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1560; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1561; ParaContent(); } ParaContent(); print (PrintText) SC_1571; ParaContent(); print (the) t_2; ParaContent(); print (PrintText) SC_1572; ParaContent(); style bold; ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say1141; .L_SayX1062; ! phrase 63 ! [63: decrease the health of the guy by x] WriteGProperty(OBJECT_TY, t_2,p14_health,GProperty(OBJECT_TY, t_2,p14_health) - t_1); ! phrase 64 ! [64: unless guy is dead begin] if (~~((((~~Adj_33_t1_v9(t_2)))))) { ! phrase 65 ! [65: let the guy lose concentration] (Resolver_33(t_2,"source", 553)); ! phrase 66 ! [66: end unless] } ! phrase 67 ! [67: if health of the guy is less than 1 begin] if (((GProperty(OBJECT_TY, t_2,p14_health) < 1))) { ! phrase 68 ! [68: now the global attacker is the player] (Global_Vars-->41) = player; ! phrase 69 ! [69: now the global defender is the guy] (Global_Vars-->42) = t_2; if (~~((Global_Vars-->42) ofclass K8_person)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->42), "now the global defender is the guy", "person");; ! phrase 70 ! [70: consider the grant powers when a monster is slain rule] ProcessRulebook(R_1157); ! phrase 71 ! [71: end if] } ! phrase 72 ! [72: -- 6] ; 6: ! phrase 73 ! [73: say ~A gigantic [one of]sword[or]spear[or]pike[at random] bursts out of the ground, impaling [the guy] for [bold type][X times 2] damage[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1558; ParaContent(); I7_ST_say_one_of-->16 = i7_soo_ran(I7_ST_say_one_of-->16, 3); switch((I7_ST_say_one_of-->16)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_1559; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1560; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1561; ParaContent(); } ParaContent(); print (PrintText) SC_1571; ParaContent(); print (the) t_2; ParaContent(); print (PrintText) SC_1572; ParaContent(); style bold; ParaContent(); print (say__n= (t_1*2) ); ParaContent(); print (PrintText) SC_698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say1142; .L_SayX1063; ! phrase 74 ! [74: decrease the health of the guy by x times 2] WriteGProperty(OBJECT_TY, t_2,p14_health,GProperty(OBJECT_TY, t_2,p14_health) - (t_1*2) ); ! phrase 75 ! [75: unless guy is dead begin] if (~~((((~~Adj_33_t1_v9(t_2)))))) { ! phrase 76 ! [76: let the guy lose concentration] (Resolver_33(t_2,"source", 562)); ! phrase 77 ! [77: end unless] } ! phrase 78 ! [78: if health of the guy is less than 1 begin] if (((GProperty(OBJECT_TY, t_2,p14_health) < 1))) { ! phrase 79 ! [79: now the global attacker is the player] (Global_Vars-->41) = player; ! phrase 80 ! [80: now the global defender is the guy] (Global_Vars-->42) = t_2; if (~~((Global_Vars-->42) ofclass K8_person)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->42), "now the global defender is the guy", "person");; ! phrase 81 ! [81: consider the grant powers when a monster is slain rule] ProcessRulebook(R_1157); ! phrase 82 ! [82: end if] } ! phrase 83 ! [83: end if] } rfalse; ]; ! Request 27: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To gain the power of the Fanatics of Aite: [ PHR_1944_r27 ; ! phrase 1 ! [1: increase score by 4] score = score + 4; ! phrase 2 ! [2: now test subject is fanatics-of-aite-package] (Global_Vars-->79) = I476_fanatics_of_aite_packag; ! phrase 3 ! [3: unless absorption is stopped begin] if (~~(((PHR_1165_r202 ())))) { ! phrase 4 ! [4: do power transferral with fanatics-of-aite-package] (PHR_1160_r198 (I476_fanatics_of_aite_packag)); ! phrase 5 ! [5: heal fully because fanatics-of-aite-package is slain] (PHR_1161_r199 (I476_fanatics_of_aite_packag)); ! phrase 6 ! [6: end unless] } ! phrase 7 ! [7: do achievement awarding for the fanatics-of-aite-package] (PHR_1163_r201 (I476_fanatics_of_aite_packag)); rfalse; ]; ! Request 28: phrase (person, number) -> nothing ! From "Inform ATTACK" by Victor Gijsbers ! To heal ( patient - a person ) for ( health - a number ) health: [ PHR_960_r28 t_0 ! Call parameter 'patient' = person t_1 ! Call parameter 'health' = number t_2 ! Local variable e.g. 'health dummy' = number ; ! phrase 1 ! [1: let the health dummy be the permanent health of the patient minus the health of the patient] t_2 = (GProperty(9, t_0,p17_permanent_health)-GProperty(9, t_0,p14_health)) ; ! phrase 2 ! [2: if health is less than the health dummy begin] if (((t_1 < t_2))) { ! phrase 3 ! [3: now the health dummy is health] t_2 = t_1; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if the health dummy is less than 0 begin] if (((t_2 < 0))) { ! phrase 6 ! [6: now the health dummy is 0] t_2 = 0; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: increase the health of the patient by the health dummy] WriteGProperty(9, t_0,p14_health,GProperty(9, t_0,p14_health) + t_2); rfalse; ]; ! Request 29: phrase room -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To have the smoke demon disappear from ( place - a room ): [ PHR_2050_r29 t_0 ! Call parameter 'place' = room ; ! phrase 1 ! [1: remove smoke demon from play] RemoveFromPlay(I517_smoke_demon); ! phrase 2 ! [2: if place is the location begin] if (((t_0 == real_location))) { ! phrase 3 ! [3: say ~With an eery cry, the [bold type]smoke demon dissipates[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1573; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1574; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say1143; .L_SayX1064; ! phrase 4 ! [4: end if] } rfalse; ]; ! Request 30: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To have the smoke demon appear: [ PHR_2051_r30 ; ! phrase 1 ! [1: now health of the smoke demon is 10] WriteGProperty(9, I517_smoke_demon,p14_health,10); ! phrase 2 ! [2: move smoke demon to the location] MoveObject(I517_smoke_demon, real_location, 0, false); ! phrase 3 ! [3: say ~The smoke coalesces to [bold type]form a smoke demon[roman type]!~] say__p=1;ParaContent(); print (PrintText) SC_1575; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1576; ParaContent(); style roman; ParaContent(); print (PrintText) SC_426; new_line; .L_Say1144; .L_SayX1065; rfalse; ]; ! Request 31: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To decide whether the player is victorious: [ PHR_2144_r31 t_0 ! Local variable e.g. 'counter' = number t_1 ! Local variable e.g. '?-1,-1?' = monster t_2 ! Local variable e.g. '?-1,-1?' = monster ; ! phrase 1 ! [1: if started boolean is false begin] if (((((Global_Vars-->132) && true) == (0 && true)))) { ! phrase 2 ! [2: decide no] rfalse; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: let counter be 0] t_0 = 0; ! phrase 5 ! [5: repeat with guy running through alive not off-stage monsters begin] for (t_1=Prop_402(0), t_2=Prop_402(t_1): t_1: t_1=t_2, t_2=Prop_402(t_2)) { ! phrase 6 ! [6: if the level of guy is 5 begin] if (((GProperty(9, t_1,p31_level) == 5))) { ! phrase 7 ! [7: now counter is 1] t_0 = 1; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } ! phrase 10 ! [10: if counter is 0 begin] if (((t_0 == 0))) { ! phrase 11 ! [11: decide yes] rtrue; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: decide no] rfalse; rfalse; ]; ! Request 32: phrase (person, person) -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To have ( A - a person ) start pressing ( B - a person ): [ PHR_866_r32 t_0 ! Call parameter 'A' = person t_1 ! Call parameter 'B' = person ; ! phrase 1 ! [1: now a presses no one] Prop_403(,t_0); ! phrase 2 ! [2: now a presses b] (Relation_NowVtoV(t_0,Rel_Record_71,t_1,false)); rfalse; ]; ! Request 33: phrase nothing -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To take no time: [ PHR_853_r33 ; ! phrase 1 ! [1: now the take no time boolean is true] (Global_Vars-->34) = 1; rfalse; ]; ! Request 34: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To ghoulify the player: [ PHR_1270_r34 ; ! phrase 1 ! [1: now the faction of the player is undead] WriteGProperty(9, player,p111_faction,I158_undead); ! phrase 2 ! [2: now the player form of the player is ghoul] WriteGProperty(9, player,p201_player_form,I182_ghoul); rfalse; ]; ! Request 35: phrase (direction, room) -> number ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide what number is the x ( way - a direction ) of ( place - a room ): [ PHR_1096_r35 t_0 ! Call parameter 'way' = direction t_1 ! Call parameter 'place' = room ; ! phrase 1 ! [1: if way is north begin] if (((t_0 == I46_north))) { ! phrase 2 ! [2: decide on x-coordinate of place + 1] return (GProperty(9, t_1,p28_x_coordinate)+1) ; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if way is south begin] if (((t_0 == I49_south))) { ! phrase 5 ! [5: decide on x-coordinate of place - 1] return (GProperty(9, t_1,p28_x_coordinate)-1) ; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: decide on x-coordinate of place] return GProperty(9, t_1,p28_x_coordinate); ! phrase 8 ! [8: end if] } return 0; ]; ! Request 36: phrase (direction, room) -> number ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide what number is the y ( way - a direction ) of ( place - a room ): [ PHR_1097_r36 t_0 ! Call parameter 'way' = direction t_1 ! Call parameter 'place' = room ; ! phrase 1 ! [1: if way is east begin] if (((t_0 == I52_east))) { ! phrase 2 ! [2: decide on y-coordinate of place + 1] return (GProperty(9, t_1,p29_y_coordinate)+1) ; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if way is west begin] if (((t_0 == I53_west))) { ! phrase 5 ! [5: decide on y-coordinate of place - 1] return (GProperty(9, t_1,p29_y_coordinate)-1) ; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: decide on y-coordinate of place] return GProperty(9, t_1,p29_y_coordinate); ! phrase 8 ! [8: end if] } return 0; ]; ! Request 37: phrase (direction, room) -> number ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide what number is the z ( way - a direction ) of ( place - a room ): [ PHR_1098_r37 t_0 ! Call parameter 'way' = direction t_1 ! Call parameter 'place' = room ; ! phrase 1 ! [1: if way is up begin] if (((t_0 == I54_up))) { ! phrase 2 ! [2: decide on z-coordinate of place + 1] return (GProperty(9, t_1,p30_z_coordinate)+1) ; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if way is down begin] if (((t_0 == I55_down))) { ! phrase 5 ! [5: decide on z-coordinate of place - 1] return (GProperty(9, t_1,p30_z_coordinate)-1) ; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: decide on z-coordinate of place] return GProperty(9, t_1,p30_z_coordinate); ! phrase 8 ! [8: end if] } return 0; ]; ! Request 38: phrase (number, number, number) -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide whether the space at ( a - a number ) by ( b - a number ) by ( c - a number ) is free: [ PHR_1094_r38 t_0 ! Call parameter 'a' = number t_1 ! Call parameter 'b' = number t_2 ! Call parameter 'c' = number t_3 ! Local variable e.g. '?-1,-1?' = room t_4 ! Local variable e.g. '?-1,-1?' = room ; ! phrase 1 ! [1: repeat with checked place running through placed rooms begin] for (t_3=Prop_404(0), t_4=Prop_404(t_3): t_3: t_3=t_4, t_4=Prop_404(t_4)) { ! phrase 2 ! [2: if x-coordinate of checked place is a begin] if (((GProperty(9, t_3,p28_x_coordinate) == t_0))) { ! phrase 3 ! [3: if y-coordinate of checked place is b begin] if (((GProperty(9, t_3,p29_y_coordinate) == t_1))) { ! phrase 4 ! [4: if z-coordinate of checked place is c begin] if (((GProperty(9, t_3,p30_z_coordinate) == t_2))) { ! phrase 5 ! [5: decide no] rfalse; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } ! phrase 10 ! [10: decide yes] rtrue; rfalse; ]; ! Request 39: phrase (number, number, number) -> room ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide what room is the room at ( a - a number ) by ( b - a number ) by ( c - a number ): [ PHR_1095_r39 t_0 ! Call parameter 'a' = number t_1 ! Call parameter 'b' = number t_2 ! Call parameter 'c' = number t_3 ! Local variable e.g. '?-1,-1?' = room t_4 ! Local variable e.g. '?-1,-1?' = room ; ! phrase 1 ! [1: repeat with checked place running through placed rooms begin] for (t_3=Prop_405(0), t_4=Prop_405(t_3): t_3: t_3=t_4, t_4=Prop_405(t_4)) { ! phrase 2 ! [2: if x-coordinate of checked place is a begin] if (((GProperty(9, t_3,p28_x_coordinate) == t_0))) { ! phrase 3 ! [3: if y-coordinate of checked place is b begin] if (((GProperty(9, t_3,p29_y_coordinate) == t_1))) { ! phrase 4 ! [4: if z-coordinate of checked place is c begin] if (((GProperty(9, t_3,p30_z_coordinate) == t_2))) { ! phrase 5 ! [5: decide on checked place] return t_3; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } return X125; ]; ! Request 40: phrase nothing -> nothing ! From "Kerkerkruip Locations" by Victor Gijsbers ! To do the Aite prayer: [ PHR_1585_r40 ; ! phrase 1 ! [1: say ~You ask Aite for help in battle, and [run paragraph on][if player is beloved of Aite]confidently[otherwise]anxiously[end if] await the consequences.[line break][paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1577; ParaContent(); RunParagraphOn(); if (~~((((PHR_1205_r79 (player)))))) jump L_Say1145; ParaContent(); print (PrintText) SC_1578; jump L_SayX1066; .L_Say1145; ParaContent(); print (PrintText) SC_1579; .L_Say1146; .L_SayX1066; ParaContent(); print (PrintText) SC_1580; ParaContent(); new_line; ParaContent(); DivideParagraphPoint(); new_line; .L_Say1147; .L_SayX1067; ! phrase 2 ! [2: if the aite counter is 0 begin] if ((((Global_Vars-->105) == 0))) { ! phrase 3 ! [3: now the aite counter is a random number between 2 and 12] (Global_Vars-->105) = R_DecimalNumber(2, 12) ; ! phrase 4 ! [4: end if] } rfalse; ]; ! Request 41: phrase number -> number ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide which number is the absolute value of ( N - a number ): [ PHR_1090_r41 t_0 ! Call parameter 'N' = number ; ! phrase 1 ! [1: if n is less than 0 begin] if (((t_0 < 0))) { ! phrase 2 ! [2: let n be 0 minus n] t_0 = (0-t_0) ; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: decide on n] return t_0; return 0; ]; ! Request 42: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say possessive of ( item - a thing ): [ PHR_940_r42 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item is the player begin] if (((t_0 == player))) { ! phrase 4 ! [4: say ~your~] say__p=1;ParaContent(); print (PrintText) SC_805; .L_Say1148; .L_SayX1068; ! phrase 5 ! [5: otherwise if the item acts plural] } else if (((PHR_884_r129 (t_0)))) { ! phrase 6 ! [6: say ~[the item][apostrophe]~] say__p=1;ParaContent(); print (the) t_0; ParaContent(); print "'"; .L_Say1149; .L_SayX1069; ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: say ~[the item][apostrophe]s~] say__p=1;ParaContent(); print (the) t_0; ParaContent(); print "'"; ParaContent(); print (PrintText) SC_1149; .L_Say1150; .L_SayX1070; ! phrase 9 ! [9: end if] } rfalse; ]; ! Request 43: phrase nothing -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To say no dead property ( deprecated ): [ PHR_828_r43 ; ! phrase 1 ! [1: now the printing dead property is false] (Global_Vars-->28) = 0; rfalse; ]; ! Request 44: phrase nothing -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To say dead property ( deprecated ): [ PHR_829_r44 ; ! phrase 1 ! [1: now the printing dead property is true] (Global_Vars-->28) = 1; rfalse; ]; ! Request 45: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To vampirise the player: [ PHR_1276_r45 ; ! phrase 1 ! [1: now the faction of the player is undead] WriteGProperty(9, player,p111_faction,I158_undead); ! phrase 2 ! [2: now the player form of the player is vampire] WriteGProperty(9, player,p201_player_form,I183_vampire); rfalse; ]; ! Request 46: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To teleport the player: [ PHR_1186_r46 ; ! phrase 1 ! [1: now teleportation-from is the location of the player] (Global_Vars-->76) = LocationOf(player) ; ! phrase 2 ! [2: now teleportation-guy is the player] (Global_Vars-->74) = player; ! phrase 3 ! [3: choose a teleportation destination] (PHR_1185_r103 ()); ! phrase 4 ! [4: say ~A sickening feeling, and then you find yourself in --[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1581; ParaContent(); DivideParagraphPoint(); new_line; .L_Say1151; .L_SayX1071; ! phrase 5 ! [5: now retreat location is teleportation-destination] (Global_Vars-->126) = (Global_Vars-->75); ! phrase 6 ! [6: consider the sudden combat reset rules] ProcessRulebook(506); ! phrase 7 ! [7: move player to teleportation-destination] MoveObject(player, (Global_Vars-->75), 0, false); ! phrase 8 ! [8: now the take no time boolean is false] (Global_Vars-->34) = 0; rfalse; ]; ! Request 47: phrase nothing -> nothing ! From "Kerkerkruip Locations" by Victor Gijsbers ! To do the pile-scroll-giving: [ PHR_1650_r47 t_0 ! Local variable e.g. 'effect' = scroll-effect-value t_1 ! Local variable e.g. 'item' = object t_2 ! Local variable e.g. 'newobject' = object ; ! phrase 1 ! [1: let effect be a random scroll-effect] t_0 = R_T91() ; ! phrase 2 ! [2: while effect is no-effect begin] while (((t_0 == I224_no_effect))) { ! phrase 3 ! [3: now effect is a random scroll-effect] t_0 = R_T91() ; ! phrase 4 ! [4: end while] } ! phrase 5 ! [5: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 6 ! [6: now effect is scroll-ghoulification] t_0 = I215_scroll_ghoulification; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if a random chance of 1 in 4 succeeds begin] if (( (GenerateRandomNumber(1, 4) <= 1) )) { ! phrase 9 ! [9: now effect is scroll-summoning] t_0 = I217_scroll_summoning; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if a random chance of 1 in 5 succeeds begin] if (( (GenerateRandomNumber(1, 5) <= 1) )) { ! phrase 12 ! [12: now effect is scroll-death] t_0 = I223_scroll_death; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: let item be a random prototypical obfuscated scroll which has-scroll-effect effect] t_1 = (Prop_406(,t_0)) ; ! phrase 15 ! [15: if player has-knowledge-of effect begin] if (((player == (GProperty(54, t_0, p217_having_knowledge_of))))) { ! phrase 16 ! [16: now item is a random prototypical plain scroll which has-scroll-effect effect] t_1 = (Prop_407(,t_0)) ; ! phrase 17 ! [17: end if] } ! phrase 18 ! [18: let newobject be a new object cloned from item] t_2 = DO_CloneObject(t_1, 0); ; ! phrase 19 ! [19: move newobject to player] MoveObject(t_2, player, 0, false); ! phrase 20 ! [20: say ~You have found [a newobject] buried between the body parts. It is slightly wet and smelly, but still usable.~] say__p=1;ParaContent(); print (PrintText) SC_1582; ParaContent(); print (a) t_2; ParaContent(); print (PrintText) SC_1583; new_line; .L_Say1152; .L_SayX1072; rfalse; ]; ! Request 48: phrase person -> nothing ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! To decide whether ( guy - a person ) is smoke immune: [ PHR_1325_r48 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: consider the smoke immunity rules] ProcessRulebook(518); ! phrase 3 ! [3: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 4 ! [4: decide yes] rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide no] rfalse; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 49: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say is-are: [ PHR_885_r49 ; ! phrase 1 ! [1: say is-are of prior named noun] say__p=1;ParaContent(); (PHR_886_r130 ((Global_Vars-->39))); .L_Say1153; .L_SayX1073; rfalse; ]; ! Request 50: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether ( guy - a person ) can move: [ PHR_1258_r50 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now test subject is the guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: consider the impeded movement rules] ProcessRulebook(507); ! phrase 3 ! [3: if rule failed begin] if (( (RulebookFailed()) )) { ! phrase 4 ! [4: decide no] rfalse; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: decide yes] rtrue; rfalse; ]; ! Request 51: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether ( guy - a person ) is flying: [ PHR_1166_r51 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: consider the flying rules] ProcessRulebook(488); ! phrase 3 ! [3: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 4 ! [4: decide yes] rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide no] rfalse; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 52: phrase thing -> nothing ! From "Plurality" by Emily Short ! To mark ( target - a thing ) in output: [ PHR_881_r52 t_0 ! Call parameter 'target' = thing ; ! phrase 1 ! [1: if the target acts plural or target is the player , mark-future-plural] if ((((PHR_884_r129 (t_0)))) || (((t_0 == player)))) { say__n = 1; } ! phrase 2 ! [2: otherwise mark-future-singular] else { say__n = 29; } ! phrase 3 ! [3: now the prior named noun is the target] (Global_Vars-->39) = t_0; rfalse; ]; ! Request 53: phrase table name -> nothing ! From "Basic Screen Effects" by Emily Short ! To fill the/-- status bar/line with ( selected table - a table-name ): [ PHR_768_r53 t_0 ! Call parameter 'selected table' = table name t_1 ! Local variable e.g. '__n' = number t_2 ! Local variable e.g. '__index' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let __n be the number of rows in the selected table] t_1 = TableRows(t_0) ; ! phrase 2 ! [2: deepen status line to __n rows] DeepStatus(t_1); ! phrase 3 ! [3: let __index be 1] t_2 = 1; ! phrase 4 ! [4: repeat through selected table begin] @push ct_0; @push ct_1; for (t_3=t_0,t_4=1,ct_0=t_3,ct_1=t_4: t_4<=TableRows(t_3):t_4++,ct_0=t_3,ct_1=t_4) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 5 ! [5: move cursor to __index] I7VM_MoveCursorInStatusLine(t_2); ! phrase 6 ! [6: say ~[left entry]~] say__p=1;ParaContent(); print (PrintText) TableLookUpEntry(ct_0,113,ct_1); .L_Say1154; .L_SayX1074; ! phrase 7 ! [7: center central entry at row __index] CenterPrint(TableLookUpEntry(ct_0,114,ct_1), t_2); ! phrase 8 ! [8: right align cursor to __index] RightAlign(t_2); ! phrase 9 ! [9: say ~[right entry]~] say__p=1;ParaContent(); print (PrintText) TableLookUpEntry(ct_0,115,ct_1); .L_Say1155; .L_SayX1075; ! phrase 10 ! [10: increase __index by 1] t_2 = t_2 + 1; ! phrase 11 ! [11: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! Request 54: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To write out the file of victories: [ PHR_2135_r54 ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: if the player is victorious begin] if (((PHR_2144_r31 ()))) { ! phrase 2 ! [2: increase number-of-victories by 1] (Global_Vars-->128) = (Global_Vars-->128) + 1; ! phrase 3 ! [3: unless number-of-victories is 1 begin] if (~~((((Global_Vars-->128) == 1)))) { ! phrase 4 ! [4: increase winning-streak by 1] (Global_Vars-->129) = (Global_Vars-->129) + 1; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~[paragraph break][bold type]You have defeated Malygris on easy mode, proving that you understand the basics of the game! Next time, Kerkerkruip will start in normal mode. From now on, new items, monsters and locations will be available; and the game will start tracking your winning streak and will scale the difficulty accordingly. Have fun![roman type]~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1584; ParaContent(); style roman; .L_Say1156; .L_SayX1076; ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: if winning-streak is greater than best-winning-streak begin] if ((((Global_Vars-->129) > (Global_Vars-->130)))) { ! phrase 9 ! [9: now best-winning-streak is winning-streak] (Global_Vars-->130) = (Global_Vars-->129); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: now winning-streak is 0] (Global_Vars-->129) = 0; ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: choose row 1 in the table of victories] ct_0 = T21_victories; ct_1 = 1; ! phrase 15 ! [15: now the victories entry is number-of-victories] TableLookUpEntry(ct_0,146,ct_1,1,(Global_Vars-->128)); ! phrase 16 ! [16: now the streak entry is winning-streak] TableLookUpEntry(ct_0,147,ct_1,1,(Global_Vars-->129)); ! phrase 17 ! [17: now the best-streak entry is best-winning-streak] TableLookUpEntry(ct_0,148,ct_1,1,(Global_Vars-->130)); ! phrase 18 ! [18: write file of victories from table of victories] FileIO_PutTable(I525_file_of_victories, T21_victories); ! phrase 19 ! [19: write file of achievements from table of held achievements] FileIO_PutTable(I527_file_of_achievements, T26_held_achievements); rfalse; ]; ! Request 55: phrase (object, number) -> nothing ! From the Standard Rules ! To set the/-- locale priority of ( O - an object ) to ( N - a number ): [ PHR_72_r55 t_0 ! Call parameter 'O' = object t_1 ! Call parameter 'N' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: if o is a thing begin] if (((t_0 ofclass K2_thing))) { ! phrase 2 ! [2: if n <= 0 , now o is mentioned] if (((t_1 <= 0))) { (Adj_72_t2_v9(t_0)); } ! phrase 3 ! [3: if there is a notable-object of o in the table of locale priorities begin] if (( (ExistsTableLookUpCorr(T1_locale_priorities,105,105,t_0)) )) { ! phrase 4 ! [4: choose row with a notable-object of o in the table of locale priorities] ct_0 = T1_locale_priorities; ct_1 = TableRowCorr(ct_0, 105, t_0); ! phrase 5 ! [5: if n <= 0 , blank out the whole row] if (((t_1 <= 0))) { TableBlankOutRow(ct_0, ct_1); } ! phrase 6 ! [6: otherwise now the locale description priority entry is n] else { TableLookUpEntry(ct_0,106,ct_1,1,t_1); } ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: if n is greater than 0 begin] if (((t_1 > 0))) { ! phrase 9 ! [9: choose a blank row in the table of locale priorities] ct_0 = T1_locale_priorities; ct_1 = TableBlankRow(ct_0); ! phrase 10 ! [10: now the notable-object entry is o] TableLookUpEntry(ct_0,105,ct_1,1,t_0); ! phrase 11 ! [11: now the locale description priority entry is n] TableLookUpEntry(ct_0,106,ct_1,1,t_1); ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: end if] } rfalse; ]; ! Request 56: phrase scroll-effect-value -> nothing ! From "Kerkerkruip Items" by Victor Gijsbers ! To scroll-effect-identify ( effect - a scroll-effect-value ): [ PHR_1386_r56 t_0 ! Call parameter 'effect' = scroll-effect-value t_1 ! Local variable e.g. 'realitem' = object t_2 ! Local variable e.g. '?-1,-1?' = scroll t_3 ! Local variable e.g. '?-1,-1?' = scroll t_4 ! Local variable e.g. '?-1,-1?' = object t_5 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let realitem be a random prototypical plain scroll which has-scroll-effect effect] t_1 = (Prop_408(,t_0)) ; ! phrase 2 ! [2: now player has-knowledge-of effect] WriteGProperty(54, t_0, p217_having_knowledge_of, player); ! phrase 3 ! [3: repeat with item running through every actual on-stage obfuscated scroll which has-scroll-effect effect begin] for (t_2=Prop_409(,t_0,0), t_3=Prop_409(,t_0,t_2): t_2: t_2=t_3, t_3=Prop_409(,t_0,t_3)) { ! phrase 4 ! [4: let itemholder be holder of item] t_4 = (HolderOf(t_2)) ; ! phrase 5 ! [5: let newobject be a new object cloned from realitem] t_5 = DO_CloneObject(t_1, 0); ; ! phrase 6 ! [6: remove item from play] RemoveFromPlay(t_2); ! phrase 7 ! [7: if item is flaming begin] if ((((Adj_201_t1_v9(t_2))))) { ! phrase 8 ! [8: now newobject is flaming] (Adj_201_t2_v9(t_5)); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: now heat strength of newobject is heat strength of item] WriteGProperty(OBJECT_TY, t_5,p50_heat_strength,GProperty(9, t_2,p50_heat_strength)); ! phrase 11 ! [11: now newobject is in itemholder] MoveObject(t_5,t_4); ! phrase 12 ! [12: end repeat] } rfalse; ]; ! Request 57: phrase object -> nothing ! From "Plurality" by Emily Short ! To have the parser notice ( o - an object ): [ PHR_948_r57 t_0 ! Call parameter 'o' = object ; ! phrase 1 ! [1: if o is ambiguously plural , notice the plurality of o] if ((((Adj_101_t1_v9(t_0))))) { PlugPlural(t_0); } ! phrase 2 ! [2: otherwise set pronouns from o] else { PronounNotice(t_0); } rfalse; ]; ! Request 58: phrase object -> nothing ! From the Standard Rules ! To describe locale for ( O - object ): [ PHR_71_r58 t_0 ! Call parameter 'O' = object ; ! phrase 1 ! [1: carry out the printing the locale description activity with o] CarryOutActivity(V29_printing_the_locale_desc, t_0); rfalse; ]; ! Request 59: phrase weapon -> nothing ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! To say parry and dodge info of ( item - a weapon ): [ PHR_1139_r59 t_0 ! Call parameter 'item' = weapon ; ! phrase 1 ! [1: if passive parry max of item is less than 2 begin] if (((GProperty(9, t_0,p23_passive_parry_max) < 2))) { ! phrase 2 ! [2: say ~; hard to parry[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1585; ParaContent(); RunParagraphOn(); .L_Say1157; .L_SayX1077; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if passive parry max of item is greater than 3 begin] if (((GProperty(9, t_0,p23_passive_parry_max) > 3))) { ! phrase 5 ! [5: say ~; easy to parry[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1586; ParaContent(); RunParagraphOn(); .L_Say1158; .L_SayX1078; ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if active parry max of item is less than 2 begin] if (((GProperty(9, t_0,p24_active_parry_max) < 2))) { ! phrase 8 ! [8: say ~; bad at parrying[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1587; ParaContent(); RunParagraphOn(); .L_Say1159; .L_SayX1079; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: if active parry max of item is greater than 3 begin] if (((GProperty(9, t_0,p24_active_parry_max) > 3))) { ! phrase 11 ! [11: say ~; good at parrying[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1588; ParaContent(); RunParagraphOn(); .L_Say1160; .L_SayX1080; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: if dodgability of item is less than 2 begin] if (((GProperty(9, t_0,p22_dodgability) < 2))) { ! phrase 14 ! [14: say ~; hard to dodge[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1589; ParaContent(); RunParagraphOn(); .L_Say1161; .L_SayX1081; ! phrase 15 ! [15: end if] } ! phrase 16 ! [16: if dodgability of item is greater than 3 begin] if (((GProperty(9, t_0,p22_dodgability) > 3))) { ! phrase 17 ! [17: say ~; easy to dodge[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1590; ParaContent(); RunParagraphOn(); .L_Say1162; .L_SayX1082; ! phrase 18 ! [18: end if] } rfalse; ]; ! Request 60: phrase (person, number) -> nothing ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! To test the perception of ( guy - a person ) against ( n - a number ): [ PHR_1134_r60 t_0 ! Call parameter 'guy' = person t_1 ! Call parameter 'n' = number ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: now test score is a roll of the dice] (Global_Vars-->77) = (PHR_1141_r76 ()); ! phrase 3 ! [3: say ~[if guy is the player]You roll[otherwise][The guy] rolls[end if] ~ , test score , ~ + [perception of guy] (perception score)[run paragraph on]~] say__p=1; if (~~((((t_0 == player))))) jump L_Say1163; ParaContent(); print (PrintText) SC_1591; jump L_SayX1083; .L_Say1163; ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_1592; .L_Say1164; .L_SayX1083; ParaContent(); print (PrintText) SC_209; ParaContent(); print (say__n=(Global_Vars-->77)); ParaContent(); print (PrintText) SC_667; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p33_perception)); @pull self; ParaContent(); print (PrintText) SC_1593; ParaContent(); RunParagraphOn(); .L_Say1165; .L_SayX1084; ! phrase 4 ! [4: increase test score by perception of guy] (Global_Vars-->77) = (Global_Vars-->77) + GProperty(9, t_0,p33_perception); ! phrase 5 ! [5: consider the perception test rules] ProcessRulebook(476); ! phrase 6 ! [6: consider the ability test rules] ProcessRulebook(475); ! phrase 7 ! [7: say ~ = [test score] against a target number of ~ , n , ~[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_930; ParaContent(); print (say__n=(Global_Vars-->77)); ParaContent(); print (PrintText) SC_1594; ParaContent(); print (say__n=t_1); ParaContent(); RunParagraphOn(); .L_Say1166; .L_SayX1085; ! phrase 8 ! [8: if test score is less than n begin] if ((((Global_Vars-->77) < t_1))) { ! phrase 9 ! [9: say ~, failing the perception check.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1595; ParaContent(); RunParagraphOn(); .L_Say1167; .L_SayX1086; ! phrase 10 ! [10: now test result is false] (Global_Vars-->78) = 0; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~, succeeding at the perception check.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1596; ParaContent(); RunParagraphOn(); .L_Say1168; .L_SayX1087; ! phrase 13 ! [13: now test result is true] (Global_Vars-->78) = 1; ! phrase 14 ! [14: end if] } rfalse; ]; ! Request 61: phrase (person, number) -> nothing ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! To test the dexterity of ( guy - a person ) against ( n - a number ): [ PHR_1135_r61 t_0 ! Call parameter 'guy' = person t_1 ! Call parameter 'n' = number ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: now test score is a roll of the dice] (Global_Vars-->77) = (PHR_1141_r76 ()); ! phrase 3 ! [3: say ~[if guy is the player]You roll[otherwise][The guy] rolls[end if] ~ , test score , ~ + [dexterity of guy] (dexterity score)[run paragraph on]~] say__p=1; if (~~((((t_0 == player))))) jump L_Say1169; ParaContent(); print (PrintText) SC_1591; jump L_SayX1088; .L_Say1169; ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_1592; .L_Say1170; .L_SayX1088; ParaContent(); print (PrintText) SC_209; ParaContent(); print (say__n=(Global_Vars-->77)); ParaContent(); print (PrintText) SC_667; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p34_dexterity)); @pull self; ParaContent(); print (PrintText) SC_1597; ParaContent(); RunParagraphOn(); .L_Say1171; .L_SayX1089; ! phrase 4 ! [4: increase test score by dexterity of guy] (Global_Vars-->77) = (Global_Vars-->77) + GProperty(9, t_0,p34_dexterity); ! phrase 5 ! [5: consider the dexterity test rules] ProcessRulebook(477); ! phrase 6 ! [6: consider the ability test rules] ProcessRulebook(475); ! phrase 7 ! [7: say ~ = [test score] against a target number of ~ , n , ~[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_930; ParaContent(); print (say__n=(Global_Vars-->77)); ParaContent(); print (PrintText) SC_1594; ParaContent(); print (say__n=t_1); ParaContent(); RunParagraphOn(); .L_Say1172; .L_SayX1090; ! phrase 8 ! [8: if test score is less than n begin] if ((((Global_Vars-->77) < t_1))) { ! phrase 9 ! [9: say ~, failing the dexterity check.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1598; ParaContent(); RunParagraphOn(); .L_Say1173; .L_SayX1091; ! phrase 10 ! [10: now test result is false] (Global_Vars-->78) = 0; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~, succeeding at the dexterity check.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1599; ParaContent(); RunParagraphOn(); .L_Say1174; .L_SayX1092; ! phrase 13 ! [13: now test result is true] (Global_Vars-->78) = 1; ! phrase 14 ! [14: end if] } rfalse; ]; ! Request 62: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To calculate the pdr for ( guy - a person ): [ PHR_1260_r62 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now pdr is 0] (Global_Vars-->87) = 0; ! phrase 2 ! [2: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 3 ! [3: consider the physical damage reduction rules] ProcessRulebook(508); rfalse; ]; ! Request 63: phrase person -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To say the name of ( P - a person ): [ PHR_830_r63 t_0 ! Call parameter 'P' = person ; ! phrase 1 ! [1: now the printing dead property is false] (Global_Vars-->28) = 0; ! phrase 2 ! [2: say the p] say__p=1;ParaContent(); print (the) t_0; .L_Say1175; .L_SayX1093; ! phrase 3 ! [3: now the printing dead property is true] (Global_Vars-->28) = 1; rfalse; ]; ! Request 64: phrase (person, person) -> nothing ! From "Kerkerkruip Events" by Victor Gijsbers ! To have an event of ( guy - a person ) killing ( guy2 - a person ): [ PHR_1126_r64 t_0 ! Call parameter 'guy' = person t_1 ! Call parameter 'guy2' = person ; ! phrase 1 ! [1: now killer-guy is guy] (Global_Vars-->71) = t_0; ! phrase 2 ! [2: now killed-guy is guy2] (Global_Vars-->72) = t_1; ! phrase 3 ! [3: consider the killing rules] ProcessRulebook(472); rfalse; ]; ! Request 65: phrase nothing -> number ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To decide what number is the legs of the rotting corpse: [ PHR_2007_r65 t_0 ! Local variable e.g. 'm' = number ; ! phrase 1 ! [1: let m be 0] t_0 = 0; ! phrase 2 ! [2: if rotting left leg is part of the rotting corpse begin] if (((I501_rotting_corpse == (I504_rotting_left_leg.component_parent)))) { ! phrase 3 ! [3: increase m by 1] t_0 = t_0 + 1; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if rotting right leg is part of the rotting corpse begin] if (((I501_rotting_corpse == (I505_rotting_right_leg.component_parent)))) { ! phrase 6 ! [6: increase m by 1] t_0 = t_0 + 1; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: decide on m] return t_0; return 0; ]; ! Request 66: phrase nothing -> number ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To decide what number is the arms of the rotting corpse: [ PHR_2008_r66 t_0 ! Local variable e.g. 'm' = number ; ! phrase 1 ! [1: let m be 0] t_0 = 0; ! phrase 2 ! [2: if rotting left arm is part of the rotting corpse begin] if (((I501_rotting_corpse == (I506_rotting_left_arm.component_parent)))) { ! phrase 3 ! [3: increase m by 1] t_0 = t_0 + 1; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if rotting right arm is part of the rotting corpse begin] if (((I501_rotting_corpse == (I507_rotting_right_arm.component_parent)))) { ! phrase 6 ! [6: increase m by 1] t_0 = t_0 + 1; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: decide on m] return t_0; return 0; ]; ! Request 67: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say es: [ PHR_902_r67 ; ! phrase 1 ! [1: say es of prior named noun] say__p=1;ParaContent(); (PHR_903_r141 ((Global_Vars-->39))); .L_Say1176; .L_SayX1094; rfalse; ]; ! Request 68: phrase nothing -> nothing ! From "Menus" by Emily Short ! To show menu contents: [ PHR_746_r68 t_0 ! Local variable e.g. 'temporary depth' = number t_1 ! Local variable e.g. 'temporary menu' = table name t_2 ! Local variable e.g. 'temporary title' = text t_3 ! Local variable e.g. '__x' = number t_4 ! Local variable e.g. '__index' = number t_5 ! Local variable e.g. '?-1,-1?' = number t_6 ! Local variable e.g. '?-1,-1?' = number t_7 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: increase the menu depth by 1] (Global_Vars-->9) = (Global_Vars-->9) + 1; ! phrase 2 ! [2: let temporary depth be the menu depth] t_0 = (Global_Vars-->9); ! phrase 3 ! [3: let temporary menu be the current menu] t_1 = (Global_Vars-->12); ! phrase 4 ! [4: let temporary title be the current menu title] t_2 = (Global_Vars-->11); ! phrase 5 ! [5: let __x be 0] t_3 = 0; ! phrase 6 ! [6: let __index be 0] t_4 = 0; ! phrase 7 ! [7: while __index is not 1 begin] while (((~~((t_4 == 1))))) { ! phrase 8 ! [8: now the current menu is the temporary menu] (Global_Vars-->12) = t_1; ! phrase 9 ! [9: let __n be 0] t_5 = 0; ! phrase 10 ! [10: repeat through current menu begin] @push ct_0; @push ct_1; for (t_6=(Global_Vars-->12),t_7=1,ct_0=t_6,ct_1=t_7: t_7<=TableRows(t_6):t_7++,ct_0=t_6,ct_1=t_7) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 11 ! [11: increase __n by 1] t_5 = t_5 + 1; ! phrase 12 ! [12: if title entry is current menu title , now current menu selection is __n] if (((TableLookUpEntry(ct_0,107,ct_1) == (Global_Vars-->11)))) { (Global_Vars-->13) = t_5; } ! phrase 13 ! [13: end repeat] } @pull ct_1; @pull ct_0; ! phrase 14 ! [14: now the current menu title is the temporary title] (Global_Vars-->11) = t_2; ! phrase 15 ! [15: reprint current menu] (PHR_745_r121 ((Global_Vars-->12))); ! phrase 16 ! [16: let __x be the chosen letter] t_3 = GetKey() ; ! phrase 17 ! [17: if __x is a number listed in the table of menu commands begin] if (((true) && ((ct_1=ExistsTableRowCorr(ct_0=T3_menu_commands,111,t_3))))) { ! phrase 18 ! [18: consider the effect entry] ProcessRulebook(TableLookUpEntry(ct_0,112,ct_1)); ! phrase 19 ! [19: if temporary depth > menu depth begin] if (((t_0 > (Global_Vars-->9)))) { ! phrase 20 ! [20: now __index is 1] t_4 = 1; ! phrase 21 ! [21: end if] } ! phrase 22 ! [22: end if] } ! phrase 23 ! [23: end while] } rfalse; ]; ! Request 69: phrase nothing -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To update the combat status: [ PHR_835_r69 ; ! phrase 1 ! [1: consider the hate rules] ProcessRulebook(406); ! phrase 2 ! [2: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 3 ! [3: now the combat status is combat] (Global_Vars-->29) = I100_combat; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: now the combat status is peace] (Global_Vars-->29) = I99_peace; ! phrase 6 ! [6: end if] } rfalse; ]; ! Request 70: phrase nothing -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To rank participants by initiative: [ PHR_852_r70 ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD5_list_of_people); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_78(blockv_sp-1); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_78 I7BASPL ; ! phrase 1 ! [1: consider the initiative update rules] ProcessRulebook(412); ! phrase 2 ! [2: now the participants list is the list of alive not passive persons enclosed by the location] BlkValueCopy((Global_Vars-->33), LIST_OF_TY_Desc((blockv_stack-->(I7BASPL+0)), Prop_410, 9) ); ! phrase 3 ! [3: sort the participants list in random order] LIST_OF_TY_Sort((Global_Vars-->33), 2); ! phrase 4 ! [4: sort the participants list in reverse initiative order] LIST_OF_TY_Sort((Global_Vars-->33), -1, p15_initiative, 0); rfalse; ]; ! Request 71: phrase nothing -> person ! From "Inform ATTACK Core" by Victor Gijsbers ! To decide which person is the next participant: [ PHR_836_r71 t_0 ! Local variable e.g. 'P' = object ; ! phrase 1 ! [1: let p be entry 1 of the participants list] t_0 = LIST_OF_TY_GetItem((Global_Vars-->33),1); ! phrase 2 ! [2: remove entry 1 from the participants list] LIST_OF_TY_RemoveItemRange((Global_Vars-->33), 1, 1, 0); ! phrase 3 ! [3: decide on p] return CheckKindReturned(t_0,K8_person); return selfobj; ]; ! Request 72: phrase person -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To run the AI rules for ( P - a person ): [ PHR_861_r72 t_0 ! Call parameter 'P' = person ; ! phrase 1 ! [1: consider ai rules of p for p] ProcessRulebook(GProperty(9, t_0,p16_ai_rules), t_0, true); rfalse; ]; ! Request 73: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To decide whether there is a good item for the armadillo to eat: [ PHR_1727_r73 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: repeat with item running through things in the location of the ravenous armadillo begin] for (t_0=Prop_411(, LocationOf(I442_ravenous_armadillo) ,0), t_1=Prop_411(, LocationOf(I442_ravenous_armadillo) ,t_0): t_0: t_0=t_1, t_1=Prop_411(, LocationOf(I442_ravenous_armadillo) ,t_1)) { ! phrase 2 ! [2: if item is not a person and item is not scenery and item is not fixed in place and item is not hot begin] if ((((~~((t_0 ofclass K8_person))))) && ((((~~(((Adj_64_t1_v9(t_0))))))) && ((((~~(((Adj_62_t1_v9(t_0))))))) && (((~~(((Adj_39_t1_v9(t_0)))))))))) { ! phrase 3 ! [3: decide yes] rtrue; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: end repeat] } ! phrase 6 ! [6: decide no] rfalse; rfalse; ]; ! Request 74: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To say do the mouser rage: [ PHR_1858_r74 ; ! phrase 1 ! [1: increase melee of mouser by 2] WriteGProperty(9, I469_mouser,p18_melee,GProperty(9, I469_mouser,p18_melee) + 2); ! phrase 2 ! [2: decrease defence of mouser by 1] WriteGProperty(9, I469_mouser,p19_defence,GProperty(9, I469_mouser,p19_defence) - 1); ! phrase 3 ! [3: if global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 4 ! [4: now faction of mouser is hostile] WriteGProperty(9, I469_mouser,p111_faction,I93_hostile); ! phrase 5 ! [5: end if] } rfalse; ]; ! Request 75: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To say do the Fafhrd rage: [ PHR_1864_r75 ; ! phrase 1 ! [1: increase melee of fafhrd by 2] WriteGProperty(9, I466_fafhrd,p18_melee,GProperty(9, I466_fafhrd,p18_melee) + 2); ! phrase 2 ! [2: decrease defence of fafhrd by 1] WriteGProperty(9, I466_fafhrd,p19_defence,GProperty(9, I466_fafhrd,p19_defence) - 1); ! phrase 3 ! [3: if global attacker is the player begin] if ((((Global_Vars-->41) == player))) { ! phrase 4 ! [4: now faction of fafhrd is hostile] WriteGProperty(9, I466_fafhrd,p111_faction,I93_hostile); ! phrase 5 ! [5: end if] } rfalse; ]; ! Request 76: phrase nothing -> number ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! To decide which number is a roll of the dice: [ PHR_1141_r76 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. 'm' = number t_2 ! Local variable e.g. 'x' = number ; ! phrase 1 ! [1: let n be a random number between 1 and 7] t_0 = R_DecimalNumber(1, 7) ; ! phrase 2 ! [2: let m be a random number between 0 and 3] t_1 = R_DecimalNumber(0, 3) ; ! phrase 3 ! [3: let x be n + m] t_2 = (t_0+t_1) ; ! phrase 4 ! [4: if x is 10 begin] if (((t_2 == 10))) { ! phrase 5 ! [5: if a random chance of 1 in 2 succeeds begin] if (( (GenerateRandomNumber(1, 2) <= 1) )) { ! phrase 6 ! [6: now x is 20] t_2 = 20; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: decide on x] return t_2; return 0; ]; ! Request 77: phrase nothing -> nothing ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! To decide if the attacker is affected by smoke: [ PHR_1328_r77 ; ! phrase 1 ! [1: if the smoke penalty of the location is less than 1 or the global attacker is smoke immune begin] if (((((Resolver_9(real_location,"source", 280)) < 1))) || (((PHR_1325_r48 ((Global_Vars-->41)))))) { ! phrase 2 ! [2: no] rfalse; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: yes] rtrue; rfalse; ]; ! Request 78: phrase nothing -> number ! From "Kerkerkruip Items" by Victor Gijsbers ! To decide which number is the ment bonus: [ PHR_1528_r78 t_0 ! Local variable e.g. 'n' = number ; ! phrase 1 ! [1: let n be ment addiction] t_0 = (Global_Vars-->96); ! phrase 2 ! [2: decide on n] return t_0; return 0; ]; ! Request 79: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether ( guy - a person ) is beloved of Aite: [ PHR_1205_r79 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: consider the beloved of aite rules] ProcessRulebook(502); ! phrase 3 ! [3: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 4 ! [4: decide yes] rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide no] rfalse; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 80: phrase person -> number ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide what number is the heat resistance of ( guy - a person ): [ PHR_1221_r80 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: now temp-heat is 0] (Global_Vars-->84) = 0; ! phrase 3 ! [3: consider the heat resistance rules] ProcessRulebook(503); ! phrase 4 ! [4: decide on temp-heat] return (Global_Vars-->84); return 0; ]; ! Request 81: phrase nothing -> number ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To decide what number is the limbs of the rotting corpse: [ PHR_2006_r81 t_0 ! Local variable e.g. 'm' = number t_1 ! Local variable e.g. '?-1,-1?' = rotting limb t_2 ! Local variable e.g. '?-1,-1?' = rotting limb ; ! phrase 1 ! [1: let m be 0] t_0 = 0; ! phrase 2 ! [2: repeat with item running through rotting limbs begin] for (t_1=Prop_412(0), t_2=Prop_412(t_1): t_1: t_1=t_2, t_2=Prop_412(t_2)) { ! phrase 3 ! [3: if item is part of the rotting corpse begin] if (((I501_rotting_corpse == (t_1.component_parent)))) { ! phrase 4 ! [4: increase m by 1] t_0 = t_0 + 1; ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end repeat] } ! phrase 7 ! [7: decide on m] return t_0; return 0; ]; ! Request 82: phrase person -> nothing ! From "Inform ATTACK" by Victor Gijsbers ! To let ( the defender - a person ) lose concentration: [ PHR_1016_r82 t_0 ! Call parameter 'defender' = person ; ! phrase 1 ! [1: if the concentration of the defender > 0 begin] if (((GProperty(9, t_0,p26_concentration) > 0))) { ! phrase 2 ! [2: now the concentration of the defender is 0] WriteGProperty(9, t_0,p26_concentration,0); ! phrase 3 ! [3: consider the lose concentration prose rules for the defender] ProcessRulebook(446, t_0, true); ! phrase 4 ! [4: end if] } rfalse; ]; ! Request 83: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether ( guy - a person ) can fall: [ PHR_1263_r83 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: now falling-test-person is guy] (Global_Vars-->88) = t_0; ! phrase 2 ! [2: consider the falling-test rules] ProcessRulebook(509); ! phrase 3 ! [3: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 4 ! [4: decide no] rfalse; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide yes] rtrue; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 84: phrase (person, room, number) -> nothing ! From "Kerkerkruip Events" by Victor Gijsbers ! To have a falling event with ( guy - a person ) falling in ( place - a room ) for reason ( reason - a number ): [ PHR_1121_r84 t_0 ! Call parameter 'guy' = person t_1 ! Call parameter 'place' = room t_2 ! Call parameter 'reason' = number ; ! phrase 1 ! [1: now falling-guy is guy] (Global_Vars-->64) = t_0; ! phrase 2 ! [2: now falling-place is place] (Global_Vars-->65) = t_1; ! phrase 3 ! [3: now falling-reason is reason] (Global_Vars-->66) = t_2; ! phrase 4 ! [4: consider the falling destination rules] ProcessRulebook(468); ! phrase 5 ! [5: consider the preempt falling rules] ProcessRulebook(469); ! phrase 6 ! [6: consider the falling rules] ProcessRulebook(470); rfalse; ]; ! Request 85: phrase nothing -> nothing ! From "Kerkerkruip Locations" by Victor Gijsbers ! To decide whether the staircase still goes down: [ PHR_1612_r85 t_0 ! Local variable e.g. 'place' = object ; ! phrase 1 ! [1: let place be the room down from vast staircase] t_0 = MapConnection(I403_vast_staircase,I55_down) ; ! phrase 2 ! [2: if place is a room begin] if (((t_0 ofclass K1_room))) { ! phrase 3 ! [3: decide yes] rtrue; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: decide no] rfalse; ! phrase 6 ! [6: end if] } rfalse; ]; ! Request 86: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say ies: [ PHR_904_r86 ; ! phrase 1 ! [1: say ies of prior named noun] say__p=1;ParaContent(); (PHR_905_r142 ((Global_Vars-->39))); .L_Say1177; .L_SayX1095; rfalse; ]; ! Request 87: phrase (room, number, number, number) -> room ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide which room is a suitable room from ( place - a room ) at ( x - a number ) by ( y - a number ) by ( z - a number ): [ PHR_1087_r87 t_0 ! Call parameter 'place' = room t_1 ! Call parameter 'x' = number t_2 ! Call parameter 'y' = number t_3 ! Call parameter 'z' = number t_4 ! Local variable e.g. 'max' = number t_5 ! Local variable e.g. '?-1,-1?' = number t_6 ! Local variable e.g. '?-1,-1?' = number t_7 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: now original room is place] (Global_Vars-->51) = t_0; ! phrase 2 ! [2: now considered-x is x] (Global_Vars-->52) = t_1; ! phrase 3 ! [3: now considered-y is y] (Global_Vars-->53) = t_2; ! phrase 4 ! [4: now considered-z is z] (Global_Vars-->54) = t_3; ! phrase 5 ! [5: fill the table of suitable rooms] (PHR_1083_r184 ()); ! phrase 6 ! [6: score the suitable rooms] (PHR_1086_r185 ()); ! phrase 7 ! [7: sort table of suitable rooms in random order] TableShuffle(T13_suitable_rooms); ! phrase 8 ! [8: sort table of suitable rooms in reverse room score order] TableSort(T13_suitable_rooms, 127, -1); ! phrase 9 ! [9: let max be the number of filled rows in table of suitable rooms] t_4 = TableFilledRows(T13_suitable_rooms) ; ! phrase 10 ! [10: if max is 0 begin] if (((t_4 == 0))) { ! phrase 11 ! [11: decide on entrance hall] return I375_entrance_hall; ! phrase 12 ! [12: otherwise] } else { ! phrase 13 ! [13: let pos1 be a random number between 1 and max] t_5 = R_DecimalNumber(1, t_4) ; ! phrase 14 ! [14: let pos2 be a random number between 1 and max] t_6 = R_DecimalNumber(1, t_4) ; ! phrase 15 ! [15: let pos3 be a random number between 1 and max] t_7 = R_DecimalNumber(1, t_4) ; ! phrase 16 ! [16: if pos2 is less than pos1 , now pos1 is pos2] if (((t_6 < t_5))) { t_5 = t_6; } ! phrase 17 ! [17: if pos3 is less than pos1 , now pos1 is pos3] if (((t_7 < t_5))) { t_5 = t_7; } ! phrase 18 ! [18: choose row pos1 in the table of suitable rooms] ct_0 = T13_suitable_rooms; ct_1 = t_5; ! phrase 19 ! [19: decide on candidate entry] return CheckKindReturned(TableLookUpEntry(ct_0,126,ct_1),K1_room); ! phrase 20 ! [20: end if] } return X125; ]; ! Request 88: phrase (room, room, number, number, number) -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To place ( new place - a room ) from ( original place - a room ) at ( x - a number ) by ( y - a number ) by ( z - a number ): [ PHR_1088_r88 t_0 ! Call parameter 'new place' = room t_1 ! Call parameter 'original place' = room t_2 ! Call parameter 'x' = number t_3 ! Call parameter 'y' = number t_4 ! Call parameter 'z' = number t_5 ! Local variable e.g. '?-1,-1?' = object t_6 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: unless new place is entrance hall begin] if (~~(((t_0 == I375_entrance_hall)))) { ! phrase 2 ! [2: now x-coordinate of new place is x] WriteGProperty(9, t_0,p28_x_coordinate,t_2); ! phrase 3 ! [3: now y-coordinate of new place is y] WriteGProperty(9, t_0,p29_y_coordinate,t_3); ! phrase 4 ! [4: now z-coordinate of new place is z] WriteGProperty(9, t_0,p30_z_coordinate,t_4); ! phrase 5 ! [5: let way be the direction from original place to new place] t_5 = (PHR_1092_r12 (t_1,t_0)); ! phrase 6 ! [6: change the way exit of original place to new place] (Resolver_24(t_5,t_1,t_0,"source", 254)); ! phrase 7 ! [7: let reverse be the opposite of way] t_6 = GProperty(OBJECT_TY, t_5,p9_opposite); ! phrase 8 ! [8: change the reverse exit of new place to original place] (Resolver_24(t_6,t_0,t_1,"source", 256)); ! phrase 9 ! [9: now new place is placed] (Adj_111_t2_v9(t_0)); ! phrase 10 ! [10: if generation info is true , say ~* [Way] of [original place] ([x-coordinate of original place], [y-coordinate of original place], [z-coordinate of original place]) is [new place] ([x], [y], [z]).[line break][run paragraph on]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1118; ParaContent(); print (PrintShortName) t_5; ParaContent(); print (PrintText) SC_560; ParaContent(); print (PrintShortName) t_1; ParaContent(); print (PrintText) SC_893; ParaContent(); @push self; print (say__n=GProperty(9, self=t_1,p28_x_coordinate)); @pull self; ParaContent(); print (PrintText) SC_592; ParaContent(); @push self; print (say__n=GProperty(9, self=t_1,p29_y_coordinate)); @pull self; ParaContent(); print (PrintText) SC_592; ParaContent(); @push self; print (say__n=GProperty(9, self=t_1,p30_z_coordinate)); @pull self; ParaContent(); print (PrintText) SC_1600; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_893; ParaContent(); print (say__n=t_2); ParaContent(); print (PrintText) SC_592; ParaContent(); print (say__n=t_3); ParaContent(); print (PrintText) SC_592; ParaContent(); print (say__n=t_4); ParaContent(); print (PrintText) SC_1601; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1178; .L_SayX1096; } ! phrase 11 ! [11: now additional considered room is new place] (Global_Vars-->56) = t_0; ! phrase 12 ! [12: now additional original room is original place] (Global_Vars-->57) = t_1; ! phrase 13 ! [13: consider the additional placement rules] ProcessRulebook(458); ! phrase 14 ! [14: end unless] } rfalse; ]; ! Request 89: phrase (room, room) -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To place ( a - a room ) next to ( b - a room ): [ PHR_1089_r89 t_0 ! Call parameter 'a' = room t_1 ! Call parameter 'b' = room t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = number t_6 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: unless the number of rooms surrounding considered-x by considered-y by considered-z is the number of cardinal directions begin] if (~~((((PHR_1093_r90 ((Global_Vars-->52),(Global_Vars-->53),(Global_Vars-->54))) == (Prop_413()) )))) { ! phrase 2 ! [2: while a is not placed begin] while (((~~(((Adj_111_t1_v9(t_0))))))) { ! phrase 3 ! [3: let way be a random cardinal direction] t_2 = (Prop_414()) ; ! phrase 4 ! [4: let x be the x way of b] t_3 = (Resolver_34(t_2,t_1,"source", 269)); ! phrase 5 ! [5: let y be the y way of b] t_4 = (Resolver_35(t_2,t_1,"source", 270)); ! phrase 6 ! [6: let z be the z way of b] t_5 = (Resolver_36(t_2,t_1,"source", 271)); ! phrase 7 ! [7: if the space at x by y by z is free begin] if (((PHR_1094_r38 (t_3,t_4,t_5)))) { ! phrase 8 ! [8: now x-coordinate of a is x] WriteGProperty(9, t_0,p28_x_coordinate,t_3); ! phrase 9 ! [9: now y-coordinate of a is y] WriteGProperty(9, t_0,p29_y_coordinate,t_4); ! phrase 10 ! [10: now z-coordinate of a is z] WriteGProperty(9, t_0,p30_z_coordinate,t_5); ! phrase 11 ! [11: change the way exit of b to a] (Resolver_24(t_2,t_1,t_0,"source", 276)); ! phrase 12 ! [12: let reverse be the opposite of way] t_6 = GProperty(OBJECT_TY, t_2,p9_opposite); ! phrase 13 ! [13: change the reverse exit of a to b] (Resolver_24(t_6,t_0,t_1,"source", 278)); ! phrase 14 ! [14: now a is placed] (Adj_111_t2_v9(t_0)); ! phrase 15 ! [15: if generation info is true , say ~* Placed [a] [way] of [b].[line break][run paragraph on]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1602; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_209; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_560; ParaContent(); print (PrintShortName) t_1; ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1179; .L_SayX1097; } ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: end while] } ! phrase 18 ! [18: end unless] } rfalse; ]; ! Request 90: phrase (number, number, number) -> number ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide which number is the number of rooms surrounding ( a - a number ) by ( b - a number ) by ( c - a number ): [ PHR_1093_r90 t_0 ! Call parameter 'a' = number t_1 ! Call parameter 'b' = number t_2 ! Call parameter 'c' = number t_3 ! Local variable e.g. 'count-1' = number t_4 ! Local variable e.g. '?-1,-1?' = room t_5 ! Local variable e.g. '?-1,-1?' = room t_6 ! Local variable e.g. '?-1,-1?' = number t_7 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: let count-1 be 0] t_3 = 0; ! phrase 2 ! [2: repeat with place running through placed rooms begin] for (t_4=Prop_415(0), t_5=Prop_415(t_4): t_4: t_4=t_5, t_5=Prop_415(t_5)) { ! phrase 3 ! [3: let count-2 be 0] t_6 = 0; ! phrase 4 ! [4: let temp be x-coordinate of place minus a] t_7 = (GProperty(9, t_4,p28_x_coordinate)-t_0) ; ! phrase 5 ! [5: increase count-2 by the absolute value of temp] t_6 = t_6 + (PHR_1090_r41 (t_7)); ! phrase 6 ! [6: let temp be y-coordinate of place minus b] t_7 = (GProperty(9, t_4,p29_y_coordinate)-t_1) ; ! phrase 7 ! [7: increase count-2 by the absolute value of temp] t_6 = t_6 + (PHR_1090_r41 (t_7)); ! phrase 8 ! [8: let temp be z-coordinate of place minus c] t_7 = (GProperty(9, t_4,p30_z_coordinate)-t_2) ; ! phrase 9 ! [9: increase count-2 by the absolute value of temp] t_6 = t_6 + (PHR_1090_r41 (t_7)); ! phrase 10 ! [10: if count-2 is 1 begin] if (((t_6 == 1))) { ! phrase 11 ! [11: increase count-1 by 1] t_3 = t_3 + 1; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end repeat] } ! phrase 14 ! [14: decide on count-1] return t_3; return 0; ]; ! Request 91: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To choose a room: [ PHR_1115_r91 t_0 ! Local variable e.g. 'max' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: fill the table of suitable rooms for treasure] (PHR_1116_r194 ()); ! phrase 2 ! [2: score the suitable rooms for treasure] (PHR_1117_r195 ()); ! phrase 3 ! [3: sort table of suitable rooms in random order] TableShuffle(T13_suitable_rooms); ! phrase 4 ! [4: sort table of suitable rooms in reverse room score order] TableSort(T13_suitable_rooms, 127, -1); ! phrase 5 ! [5: let max be the number of filled rows in table of suitable rooms] t_0 = TableFilledRows(T13_suitable_rooms) ; ! phrase 6 ! [6: if max is 0 begin] if (((t_0 == 0))) { ! phrase 7 ! [7: now considered room is entrance hall] (Global_Vars-->50) = I375_entrance_hall; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: let pos1 be a random number between 1 and max] t_1 = R_DecimalNumber(1, t_0) ; ! phrase 10 ! [10: let pos2 be a random number between 1 and max] t_2 = R_DecimalNumber(1, t_0) ; ! phrase 11 ! [11: let pos3 be a random number between 1 and max] t_3 = R_DecimalNumber(1, t_0) ; ! phrase 12 ! [12: if pos2 is less than pos1 , now pos1 is pos2] if (((t_2 < t_1))) { t_1 = t_2; } ! phrase 13 ! [13: if pos3 is less than pos1 , now pos1 is pos3] if (((t_3 < t_1))) { t_1 = t_3; } ! phrase 14 ! [14: choose row pos1 in the table of suitable rooms] ct_0 = T13_suitable_rooms; ct_1 = t_1; ! phrase 15 ! [15: now considered room is candidate entry] (Global_Vars-->50) = TableLookUpEntry(ct_0,126,ct_1); if (~~((Global_Vars-->50) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->50), "now considered room is Candidate entry", "room");; ! phrase 16 ! [16: end if] } rfalse; ]; ! Request 92: phrase (number, valuation, object) -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To place ( i - a number ) of ( worth - a valuation ) things in ( coffer - an object ): [ PHR_1118_r92 t_0 ! Call parameter 'i' = number t_1 ! Call parameter 'worth' = valuation t_2 ! Call parameter 'coffer' = object t_3 ! Local variable e.g. 'n' = number t_4 ! Local variable e.g. 'm' = number t_5 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let n be the number of off-stage not-too-difficult things valuing worth] t_3 = (Prop_416(,t_1)) ; ! phrase 2 ! [2: let m be i] t_4 = t_0; ! phrase 3 ! [3: if m is greater than n , now m is n] if (((t_4 > t_3))) { t_4 = t_3; } ! phrase 4 ! [4: while m is greater than 0 begin] while (((t_4 > 0))) { ! phrase 5 ! [5: let item be a random off-stage not-too-difficult thing valuing worth] t_5 = (Prop_417(,t_1)) ; ! phrase 6 ! [6: move item to coffer] MoveObject(t_5, t_2, 0, false); ! phrase 7 ! [7: if generation info is true , say ~* Putting [item] in [coffer].~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1603; ParaContent(); print (PrintShortName) t_5; ParaContent(); print (PrintText) SC_1115; ParaContent(); print (PrintShortName) t_2; ParaContent(); print (PrintText) SC_310; new_line; .L_Say1180; .L_SayX1098; } ! phrase 8 ! [8: decrease m by 1] t_4 = t_4 - 1; ! phrase 9 ! [9: end while] } rfalse; ]; ! Request 93: phrase (thing, thing) -> nothing ! From "Kerkerkruip Items" by Victor Gijsbers ! To copy ( item - a thing ) to ( item2 - a thing ): [ PHR_1390_r93 t_0 ! Call parameter 'item' = thing t_1 ! Call parameter 'item2' = thing t_2 ! Local variable e.g. 'copy' = object ; ! phrase 1 ! [1: let copy be a new object cloned from item] t_2 = DO_CloneObject(t_0, 0); ; ! phrase 2 ! [2: move copy to item2] MoveObject(t_2, t_1, 0, false); rfalse; ]; ! Request 94: phrase room -> number ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide which number is the distance of ( place - a room ): [ PHR_1081_r94 t_0 ! Call parameter 'place' = room ; ! phrase 1 ! [1: decide on the number of moves from place to entrance hall] return MapRouteTo(t_0,I375_entrance_hall,0,0,true) ; return 0; ]; ! Request 95: phrase room -> nothing ! From "Kerkerkruip Locations" by Victor Gijsbers ! To put ( place - a room ) in a near location: [ PHR_1652_r95 t_0 ! Call parameter 'place' = room t_1 ! Local variable e.g. 'starting position' = object ; ! phrase 1 ! [1: let starting position be a random placed room] t_1 = (Prop_418()) ; ! phrase 2 ! [2: now considered-x is the x-coordinate of starting position] (Global_Vars-->52) = GProperty(OBJECT_TY, t_1,p28_x_coordinate); ! phrase 3 ! [3: now considered-y is the y-coordinate of starting position] (Global_Vars-->53) = GProperty(OBJECT_TY, t_1,p29_y_coordinate); ! phrase 4 ! [4: now considered-z is the z-coordinate of starting position] (Global_Vars-->54) = GProperty(OBJECT_TY, t_1,p30_z_coordinate); ! phrase 5 ! [5: do a random step] (PHR_1653_r206 ()); ! phrase 6 ! [6: do a random step] (PHR_1653_r206 ()); ! phrase 7 ! [7: while not the space at considered-x by considered-y by considered-z is free begin] while (~~(((PHR_1094_r38 ((Global_Vars-->52),(Global_Vars-->53),(Global_Vars-->54)))))) { ! phrase 8 ! [8: do a random step] (PHR_1653_r206 ()); ! phrase 9 ! [9: end while] } ! phrase 10 ! [10: now x-coordinate of place is considered-x] WriteGProperty(9, t_0,p28_x_coordinate,(Global_Vars-->52)); ! phrase 11 ! [11: now y-coordinate of place is considered-y] WriteGProperty(9, t_0,p29_y_coordinate,(Global_Vars-->53)); ! phrase 12 ! [12: now z-coordinate of place is considered-z] WriteGProperty(9, t_0,p30_z_coordinate,(Global_Vars-->54)); ! phrase 13 ! [13: now place is placed] (Adj_111_t2_v9(t_0)); ! phrase 14 ! [14: if generation info is true , say ~* Added [place] ([x-coordinate of place], [y-coordinate of place], [z-coordinate of place]).[line break][run paragraph on]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1604; ParaContent(); print (PrintShortName) t_0; ParaContent(); print (PrintText) SC_893; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p28_x_coordinate)); @pull self; ParaContent(); print (PrintText) SC_592; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p29_y_coordinate)); @pull self; ParaContent(); print (PrintText) SC_592; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p30_z_coordinate)); @pull self; ParaContent(); print (PrintText) SC_1601; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1181; .L_SayX1099; } rfalse; ]; ! Request 96: phrase nothing -> nothing ! From "Kerkerkruip Scenery" by Victor Gijsbers ! To choose an extra room: [ PHR_1665_r96 t_0 ! Local variable e.g. 'max' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: fill the table of suitable rooms for extra] (PHR_1666_r207 ()); ! phrase 2 ! [2: score the suitable rooms for extra] (PHR_1667_r208 ()); ! phrase 3 ! [3: sort table of suitable rooms in random order] TableShuffle(T13_suitable_rooms); ! phrase 4 ! [4: sort table of suitable rooms in reverse room score order] TableSort(T13_suitable_rooms, 127, -1); ! phrase 5 ! [5: let max be the number of filled rows in table of suitable rooms] t_0 = TableFilledRows(T13_suitable_rooms) ; ! phrase 6 ! [6: if max is 0 begin] if (((t_0 == 0))) { ! phrase 7 ! [7: now considered room is entrance hall] (Global_Vars-->50) = I375_entrance_hall; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: let pos1 be a random number between 1 and max] t_1 = R_DecimalNumber(1, t_0) ; ! phrase 10 ! [10: let pos2 be a random number between 1 and max] t_2 = R_DecimalNumber(1, t_0) ; ! phrase 11 ! [11: let pos3 be a random number between 1 and max] t_3 = R_DecimalNumber(1, t_0) ; ! phrase 12 ! [12: if pos2 is less than pos1 , now pos1 is pos2] if (((t_2 < t_1))) { t_1 = t_2; } ! phrase 13 ! [13: if pos3 is less than pos1 , now pos1 is pos3] if (((t_3 < t_1))) { t_1 = t_3; } ! phrase 14 ! [14: choose row pos1 in the table of suitable rooms] ct_0 = T13_suitable_rooms; ct_1 = t_1; ! phrase 15 ! [15: now considered room is candidate entry] (Global_Vars-->50) = TableLookUpEntry(ct_0,126,ct_1); if (~~((Global_Vars-->50) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->50), "now considered room is Candidate entry", "room");; ! phrase 16 ! [16: end if] } rfalse; ]; ! Request 97: phrase nothing -> nothing ! From "Kerkerkruip Items" by Victor Gijsbers ! To amnesia all scrolls: [ PHR_1389_r97 t_0 ! Local variable e.g. '?-1,-1?' = scroll-effect-value t_1 ! Local variable e.g. '?-1,-1?' = scroll-effect-value t_2 ! Local variable e.g. '?-1,-1?' = object t_3 ! Local variable e.g. '?-1,-1?' = scroll t_4 ! Local variable e.g. '?-1,-1?' = scroll t_5 ! Local variable e.g. '?-1,-1?' = object t_6 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: repeat with effect running through scroll-effect-values begin] for (t_0=1: t_0<=13: t_0++)if (((true))) { ! phrase 2 ! [2: let obfuscateditem be a random prototypical obfuscated scroll which has-scroll-effect effect] t_2 = (Prop_419(,t_0)) ; ! phrase 3 ! [3: unless obfuscateditem is nothing begin] if (~~(((t_2 == nothing)))) { ! phrase 4 ! [4: repeat with item running through every actual plain on-stage scroll which has-scroll-effect effect begin] for (t_3=Prop_420(,t_0,0), t_4=Prop_420(,t_0,t_3): t_3: t_3=t_4, t_4=Prop_420(,t_0,t_4)) { ! phrase 5 ! [5: let itemholder be holder of item] t_5 = (HolderOf(t_3)) ; ! phrase 6 ! [6: let newobject be a new object cloned from obfuscateditem] t_6 = DO_CloneObject(t_2, 0); ; ! phrase 7 ! [7: remove item from play] RemoveFromPlay(t_3); ! phrase 8 ! [8: now newobject is in itemholder] MoveObject(t_6,t_5); ! phrase 9 ! [9: end repeat] } ! phrase 10 ! [10: end unless] } ! phrase 11 ! [11: end repeat] } rfalse; ]; ! Request 98: phrase thing -> nothing ! From "Kerkerkruip Events" by Victor Gijsbers ! To have a shatter event with ( item - a thing ): [ PHR_1127_r98 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now shatter-item is item] (Global_Vars-->73) = t_0; ! phrase 2 ! [2: consider the shatter rules] ProcessRulebook(473); rfalse; ]; ! Request 99: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To do the dig move: [ PHR_1150_r99 t_0 ! Local variable e.g. '?-1,-1?' = object t_1 ! Local variable e.g. '?-1,-1?' = person ; ! phrase 1 ! [1: if hate is present and the player is not hidden begin] if ((((PHR_833_r16 ()))) && (((~~(((Adj_221_t1_v9(player)))))))) { ! phrase 2 ! [2: now the player is runner] (Adj_286_t2_v9(player)); ! phrase 3 ! [3: repeat with x running through alive persons in the location begin] for (t_0=Prop_421(0), t_1=Prop_421(t_0): t_0: t_0=t_1, t_1=Prop_421(t_1)) { ! phrase 4 ! [4: now x does not press the player] (Relation_NowNVtoV(t_0,Rel_Record_71,player,false)); ! phrase 5 ! [5: now the player does not press x] (Relation_NowNVtoV(player,Rel_Record_71,t_0,false)); ! phrase 6 ! [6: if the player is alive begin] if ((((Adj_33_t1_v9(player))))) { ! phrase 7 ! [7: if the faction of x hates the faction of the player begin] if ((((Relation_TestVtoV(GProperty(9, t_0,p111_faction),Rel_Record_67,GProperty(9, player,p111_faction),false))))) { ! phrase 8 ! [8: try x hitting the player] TryAction(0, t_0, ##A86_hitting, player, 0);; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: now concentration of x is 0] WriteGProperty(9, t_0,p26_concentration,0); ! phrase 12 ! [12: end repeat] } ! phrase 13 ! [13: now the player is not runner] (Adj_286_t3_v9(player)); ! phrase 14 ! [14: end if] } ! phrase 15 ! [15: if the player is alive begin] if ((((Adj_33_t1_v9(player))))) { ! phrase 16 ! [16: let place be the room noun of location] t_0 = (Resolver_8(noun,real_location,"source", 178)); ! phrase 17 ! [17: now retreat location is location] (Global_Vars-->126) = real_location; if (~~((Global_Vars-->126) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->126), "now retreat location is location", "room");; ! phrase 18 ! [18: move the player to place] MoveObject(player, t_0, 0, false); ! phrase 19 ! [19: now the take no time boolean is false] (Global_Vars-->34) = 0; ! phrase 20 ! [20: end if] } rfalse; ]; ! Request 100: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To do the armadillo stomach trick: [ PHR_1732_r100 t_0 ! Local variable e.g. '?-1,-1?' = thing t_1 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: if at least one thing is in the armadillo stomach begin] if ((Prop_422())) { ! phrase 2 ! [2: repeat with item running through things in the armadillo stomach begin] for (t_0=Prop_423(0), t_1=Prop_423(t_0): t_0: t_0=t_1, t_1=Prop_423(t_1)) { ! phrase 3 ! [3: move item to the location of the ravenous armadillo] MoveObject(t_0, LocationOf(I442_ravenous_armadillo) , 0, false); ! phrase 4 ! [4: end repeat] } ! phrase 5 ! [5: end if] } rfalse; ]; ! Request 101: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To make slaves followers: [ PHR_1873_r101 ; ! phrase 1 ! [1: now fafhrd is follower] (Adj_172_t2_v9(I466_fafhrd)); ! phrase 2 ! [2: now mouser is follower] (Adj_172_t2_v9(I469_mouser)); rfalse; ]; ! Request 102: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To unmake slaves followers: [ PHR_1874_r102 ; ! phrase 1 ! [1: now fafhrd is not follower] (Adj_172_t3_v9(I466_fafhrd)); ! phrase 2 ! [2: now mouser is not follower] (Adj_172_t3_v9(I469_mouser)); rfalse; ]; ! Request 103: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To choose a teleportation destination: [ PHR_1185_r103 t_0 ! Local variable e.g. 'destination' = object ; ! phrase 1 ! [1: let destination be a random placed placeable teleportable room] t_0 = (Prop_424()) ; ! phrase 2 ! [2: while destination is the location of teleportation-guy begin] while (((t_0 == LocationOf((Global_Vars-->74)) ))) { ! phrase 3 ! [3: let destination be a random placed placeable teleportable room] t_0 = (Prop_425()) ; ! phrase 4 ! [4: end while] } ! phrase 5 ! [5: now teleportation-destination is destination] (Global_Vars-->75) = t_0; if (~~((Global_Vars-->75) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->75), "now teleportation-destination is destination", "room");; ! phrase 6 ! [6: consider the special teleportation destination rules] ProcessRulebook(497); rfalse; ]; ! Request 104: phrase nothing -> nothing ! From "Kerkerkruip Events" by Victor Gijsbers ! To have a teleportation event: [ PHR_1130_r104 ; ! phrase 1 ! [1: consider the teleportation event rules] ProcessRulebook(474); rfalse; ]; ! Request 105: phrase nothing -> nothing ! From "Inform ATTACK" by Victor Gijsbers ! To ready natural weapons ( deprecated ): [ PHR_966_r105 t_0 ! Local variable e.g. '?-1,-1?' = person t_1 ! Local variable e.g. '?-1,-1?' = person t_2 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: repeat with x running through all alive persons enclosed by the location begin] for (t_0=Prop_426(0), t_1=Prop_426(t_0): t_0: t_0=t_1, t_1=Prop_426(t_1)) { ! phrase 2 ! [2: if x encloses no readied weapon begin] if ((Prop_427(,t_0))) { ! phrase 3 ! [3: let item be a random natural weapon part of x] t_2 = (Prop_428(,t_0)) ; ! phrase 4 ! [4: now item is readied] (Adj_103_t2_v9(t_2)); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end repeat] } rfalse; ]; ! Request 106: phrase nothing -> nothing ! From "Kerkerkruip Items" by Victor Gijsbers ! To do the adamantine blade shuffle: [ PHR_1460_r106 ; ! phrase 1 ! [1: now the damage die of the adamantine blade is a random number between 5 and 12] WriteGProperty(9, I332_adamantine_blade,p20_damage_die, R_DecimalNumber(5, 12) ); ! phrase 2 ! [2: now the weapon attack bonus of the adamantine blade is a random number between -1 and 5] WriteGProperty(9, I332_adamantine_blade,p25_weapon_attack_bonus, R_DecimalNumber(-1, 5) ); ! phrase 3 ! [3: now the weapon damage bonus of the adamantine blade is a random number between 0 and 2] WriteGProperty(9, I332_adamantine_blade,p21_weapon_damage_bonus, R_DecimalNumber(0, 2) ); ! phrase 4 ! [4: now the dodgability of the adamantine blade is a random number between 1 and 4] WriteGProperty(9, I332_adamantine_blade,p22_dodgability, R_DecimalNumber(1, 4) ); ! phrase 5 ! [5: now the passive parry max of the adamantine blade is a random number between 1 and 4] WriteGProperty(9, I332_adamantine_blade,p23_passive_parry_max, R_DecimalNumber(1, 4) ); ! phrase 6 ! [6: now the active parry max of the adamantine blade is a random number between 1 and 4] WriteGProperty(9, I332_adamantine_blade,p24_active_parry_max, R_DecimalNumber(1, 4) ); ! phrase 7 ! [7: now the adamantine blade timer is a random number between 12 and 22] (Global_Vars-->91) = R_DecimalNumber(12, 22) ; rfalse; ]; ! Request 107: phrase person -> nothing ! From "Kerkerkruip Systems - Hiding Smoke Ethereal" by Victor Gijsbers ! To make ( guy - a person ) ethereal: [ PHR_1337_r107 t_0 ! Call parameter 'guy' = person t_1 ! Local variable e.g. 'X' = object t_2 ! Local variable e.g. '?-1,-1?' = thing t_3 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: now guy is ethereal] (Adj_231_t2_v9(t_0)); ! phrase 2 ! [2: let x be location of the guy] t_1 = LocationOf(t_0) ; ! phrase 3 ! [3: repeat with item running through things had by guy begin] for (t_2=Prop_429(,t_0,0), t_3=Prop_429(,t_0,t_2): t_2: t_2=t_3, t_3=Prop_429(,t_0,t_3)) { ! phrase 4 ! [4: unless item is radiant begin] if (~~(((t_2 == I382_radiant_images)))) { ! phrase 5 ! [5: move item to x] MoveObject(t_2, t_1, 0, false); ! phrase 6 ! [6: if item is a weapon begin] if (((t_2 ofclass K17_weapon))) { ! phrase 7 ! [7: now item is not readied] (Adj_103_t3_v9(t_2)); ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end unless] } ! phrase 10 ! [10: end repeat] } ! phrase 11 ! [11: repeat with item running through things worn by guy begin] for (t_2=Prop_430(,t_0,0), t_3=Prop_430(,t_0,t_2): t_2: t_2=t_3, t_3=Prop_430(,t_0,t_3)) { ! phrase 12 ! [12: unless item is radiant begin] if (~~(((t_2 == I382_radiant_images)))) { ! phrase 13 ! [13: move item to x] MoveObject(t_2, t_1, 0, false); ! phrase 14 ! [14: end unless] } ! phrase 15 ! [15: end repeat] } rfalse; ]; ! Request 108: phrase nothing -> nothing ! From "Kerkerkruip Items" by Victor Gijsbers ! To have the ment kick in: [ PHR_1540_r108 ; ! phrase 1 ! [1: increase the ment addiction by 1] (Global_Vars-->96) = (Global_Vars-->96) + 1; ! phrase 2 ! [2: now the ment timer is a random number between 10 and 15] (Global_Vars-->97) = R_DecimalNumber(10, 15) ; ! phrase 3 ! [3: remove the noun from play] RemoveFromPlay(noun); rfalse; ]; ! Request 109: phrase nothing -> number ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide which number is the greatest power of the player: [ PHR_1164_r109 t_0 ! Local variable e.g. 'm' = number t_1 ! Local variable e.g. '?-1,-1?' = power t_2 ! Local variable e.g. '?-1,-1?' = power ; ! phrase 1 ! [1: let m be 0] t_0 = 0; ! phrase 2 ! [2: if at least one power is granted begin] if ((Prop_431())) { ! phrase 3 ! [3: repeat with x running through granted powers begin] for (t_1=Prop_432(0), t_2=Prop_432(t_1): t_1: t_1=t_2, t_2=Prop_432(t_2)) { ! phrase 4 ! [4: if power level of x is greater than m begin] if (((GProperty(9, t_1,p38_power_level) > t_0))) { ! phrase 5 ! [5: now m is power level of x] t_0 = GProperty(9, t_1,p38_power_level); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: end repeat] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: decide on m] return t_0; return 0; ]; ! Request 110: phrase nothing -> thing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To decide which thing is the armadillo food: [ PHR_1728_r110 t_0 ! Local variable e.g. 'm' = number t_1 ! Local variable e.g. 'item' = object ; ! phrase 1 ! [1: let m be 20] t_0 = 20; ! phrase 2 ! [2: let item be the ravenous armadillo] t_1 = I442_ravenous_armadillo; ! phrase 3 ! [3: while m is greater than 0 begin] while (((t_0 > 0))) { ! phrase 4 ! [4: now item is a random thing in the location of the ravenous armadillo] t_1 = (Prop_433(, LocationOf(I442_ravenous_armadillo) )) ; ! phrase 5 ! [5: if item is not a person and item is not scenery and item is not fixed in place and item is not hot begin] if ((((~~((t_1 ofclass K8_person))))) && ((((~~(((Adj_64_t1_v9(t_1))))))) && ((((~~(((Adj_62_t1_v9(t_1))))))) && (((~~(((Adj_39_t1_v9(t_1)))))))))) { ! phrase 6 ! [6: now m is 0] t_0 = 0; ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: decrease m by 1] t_0 = t_0 - 1; ! phrase 9 ! [9: now item is the ravenous armadillo] t_1 = I442_ravenous_armadillo; ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: end while] } ! phrase 12 ! [12: decide on item] return CheckKindReturned(t_1,K2_thing); return selfobj; ]; ! Request 111: phrase (person, number) -> nothing ! From "Kerkerkruip ATTACK Additions" by Victor Gijsbers ! To test the willpower of ( guy - a person ) against ( n - a number ): [ PHR_1136_r111 t_0 ! Call parameter 'guy' = person t_1 ! Call parameter 'n' = number ; ! phrase 1 ! [1: now test subject is guy] (Global_Vars-->79) = t_0; ! phrase 2 ! [2: now test score is a roll of the dice] (Global_Vars-->77) = (PHR_1141_r76 ()); ! phrase 3 ! [3: say ~[if guy is the player]You roll[otherwise][The guy] rolls[end if] ~ , test score , ~ + [willpower of guy] (willpower score)[run paragraph on]~] say__p=1; if (~~((((t_0 == player))))) jump L_Say1182; ParaContent(); print (PrintText) SC_1591; jump L_SayX1100; .L_Say1182; ParaContent(); print (The) t_0; ParaContent(); print (PrintText) SC_1592; .L_Say1183; .L_SayX1100; ParaContent(); print (PrintText) SC_209; ParaContent(); print (say__n=(Global_Vars-->77)); ParaContent(); print (PrintText) SC_667; ParaContent(); @push self; print (say__n=GProperty(9, self=t_0,p35_willpower)); @pull self; ParaContent(); print (PrintText) SC_1605; ParaContent(); RunParagraphOn(); .L_Say1184; .L_SayX1101; ! phrase 4 ! [4: increase test score by willpower of guy] (Global_Vars-->77) = (Global_Vars-->77) + GProperty(9, t_0,p35_willpower); ! phrase 5 ! [5: consider the willpower test rules] ProcessRulebook(478); ! phrase 6 ! [6: consider the ability test rules] ProcessRulebook(475); ! phrase 7 ! [7: say ~ = [test score] against a target number of ~ , n , ~[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_930; ParaContent(); print (say__n=(Global_Vars-->77)); ParaContent(); print (PrintText) SC_1594; ParaContent(); print (say__n=t_1); ParaContent(); RunParagraphOn(); .L_Say1185; .L_SayX1102; ! phrase 8 ! [8: if test score is less than n begin] if ((((Global_Vars-->77) < t_1))) { ! phrase 9 ! [9: say ~, failing the willpower check.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1606; ParaContent(); RunParagraphOn(); .L_Say1186; .L_SayX1103; ! phrase 10 ! [10: now test result is false] (Global_Vars-->78) = 0; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~, succeeding at the willpower check.[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1607; ParaContent(); RunParagraphOn(); .L_Say1187; .L_SayX1104; ! phrase 13 ! [13: now test result is true] (Global_Vars-->78) = 1; ! phrase 14 ! [14: end if] } rfalse; ]; ! Request 112: phrase weapon -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To decide whether ( item - a weapon ) resists Bodmall transmutation: [ PHR_1957_r112 t_0 ! Call parameter 'item' = weapon t_1 ! Local variable e.g. 'm' = number ; ! phrase 1 ! [1: let m be 20] t_1 = 20; ! phrase 2 ! [2: if item is major begin] if (((t_0.p214_valuation == I189_major))) { ! phrase 3 ! [3: increase m by 10] t_1 = t_1 + 10; ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if item is epic begin] if (((t_0.p214_valuation == I190_epic))) { ! phrase 6 ! [6: increase m by 20] t_1 = t_1 + 20; ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if a random chance of 10 in m succeeds begin] if (( (GenerateRandomNumber(1, t_1) <= 10) )) { ! phrase 9 ! [9: decide no] rfalse; ! phrase 10 ! [10: otherwise] } else { ! phrase 11 ! [11: decide yes] rtrue; ! phrase 12 ! [12: end if] } rfalse; ]; ! Request 113: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To unghoulify the player: [ PHR_1275_r113 ; ! phrase 1 ! [1: now the faction of the player is friendly] WriteGProperty(9, player,p111_faction,I91_friendly); ! phrase 2 ! [2: now player form of the player is human-form] WriteGProperty(9, player,p201_player_form,I181_human_form); rfalse; ]; ! Request 114: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To transform away from dog: [ PHR_2024_r114 ; ! phrase 1 ! [1: decrease melee of aswang by 2] WriteGProperty(9, I513_aswang,p18_melee,GProperty(9, I513_aswang,p18_melee) - 2); ! phrase 2 ! [2: increase defence of aswang by 1] WriteGProperty(9, I513_aswang,p19_defence,GProperty(9, I513_aswang,p19_defence) + 1); rfalse; ]; ! Request 115: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To transform away from bird: [ PHR_2026_r115 ; ! phrase 1 ! [1: increase melee of aswang by 2] WriteGProperty(9, I513_aswang,p18_melee,GProperty(9, I513_aswang,p18_melee) + 2); ! phrase 2 ! [2: decrease defence of aswang by 1] WriteGProperty(9, I513_aswang,p19_defence,GProperty(9, I513_aswang,p19_defence) - 1); rfalse; ]; ! Request 116: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To transform to dog: [ PHR_2023_r116 ; ! phrase 1 ! [1: increase melee of aswang by 2] WriteGProperty(9, I513_aswang,p18_melee,GProperty(9, I513_aswang,p18_melee) + 2); ! phrase 2 ! [2: decrease defence of aswang by 1] WriteGProperty(9, I513_aswang,p19_defence,GProperty(9, I513_aswang,p19_defence) - 1); rfalse; ]; ! Request 117: phrase nothing -> nothing ! From "Kerkerkruip Monsters" by Victor Gijsbers ! To transform to bird: [ PHR_2025_r117 ; ! phrase 1 ! [1: decrease melee of aswang by 2] WriteGProperty(9, I513_aswang,p18_melee,GProperty(9, I513_aswang,p18_melee) - 2); ! phrase 2 ! [2: increase defence of aswang by 1] WriteGProperty(9, I513_aswang,p19_defence,GProperty(9, I513_aswang,p19_defence) + 1); rfalse; ]; ! Request 118: phrase (room, room) -> number ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To decide which number is the absolute distance between ( a - a room ) and ( b - a room ): [ PHR_1091_r118 t_0 ! Call parameter 'a' = room t_1 ! Call parameter 'b' = room t_2 ! Local variable e.g. 'count' = number t_3 ! Local variable e.g. 'temp' = number ; ! phrase 1 ! [1: let count be 0] t_2 = 0; ! phrase 2 ! [2: let temp be x-coordinate of a minus x-coordinate of b] t_3 = (GProperty(9, t_0,p28_x_coordinate)-GProperty(9, t_1,p28_x_coordinate)) ; ! phrase 3 ! [3: increase count by the absolute value of temp] t_2 = t_2 + (PHR_1090_r41 (t_3)); ! phrase 4 ! [4: let temp be y-coordinate of a minus y-coordinate of b] t_3 = (GProperty(9, t_0,p29_y_coordinate)-GProperty(9, t_1,p29_y_coordinate)) ; ! phrase 5 ! [5: increase count by the absolute value of temp] t_2 = t_2 + (PHR_1090_r41 (t_3)); ! phrase 6 ! [6: let temp be z-coordinate of a minus z-coordinate of b] t_3 = (GProperty(9, t_0,p30_z_coordinate)-GProperty(9, t_1,p30_z_coordinate)) ; ! phrase 7 ! [7: increase count by the absolute value of temp] t_2 = t_2 + (PHR_1090_r41 (t_3)); ! phrase 8 ! [8: decide on count] return t_2; return 0; ]; ! Request 119: phrase room -> nothing ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! To say the road to ( place - a room ): [ PHR_2105_r119 t_0 ! Call parameter 'place' = room t_1 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: if place is location of the player begin] if (((t_0 == LocationOf(player) ))) { ! phrase 2 ! [2: say ~here[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1608; ParaContent(); RunParagraphOn(); .L_Say1188; .L_SayX1105; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: let y be the best route from the location of player to place through visited rooms] t_1 = MapRouteTo( LocationOf(player) ,t_0,Prop_434,0) ; ! phrase 5 ! [5: if y is a direction begin] if (((t_1 ofclass K3_direction))) { ! phrase 6 ! [6: say ~[Y][run paragraph on]~] say__p=1;ParaContent(); print (PrintShortName) t_1; ParaContent(); RunParagraphOn(); .L_Say1189; .L_SayX1106; ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: say ~no known path[run paragraph on]~] say__p=1;ParaContent(); print (PrintText) SC_1609; ParaContent(); RunParagraphOn(); .L_Say1190; .L_SayX1107; ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end if] } rfalse; ]; ! Request 120: phrase (room, room) -> nothing ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! To say general direction from ( place1 - a room ) to ( place2 - a room ): [ PHR_2107_r120 t_0 ! Call parameter 'place1' = room t_1 ! Call parameter 'place2' = room ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD6_list_of_directions); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_79(blockv_sp-1, t_0, t_1 ); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_79 I7BASPL t_0 ! Call parameter 'place1' = room t_1 ! Call parameter 'place2' = room t_2 ! Local variable e.g. 'K' = list of directions ; ! phrase 1 ! [1: let k be a list of directions] t_2 = (blockv_stack-->(I7BASPL+0)); ! phrase 2 ! [2: if x-coordinate of place1 is less than x-coordinate of place2 begin] if (((GProperty(9, t_0,p28_x_coordinate) < GProperty(9, t_1,p28_x_coordinate)))) { ! phrase 3 ! [3: add north to k] LIST_OF_TY_InsertItem(t_2, I46_north, 0, 0, 0); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if x-coordinate of place1 is greater than x-coordinate of place2 begin] if (((GProperty(9, t_0,p28_x_coordinate) > GProperty(9, t_1,p28_x_coordinate)))) { ! phrase 6 ! [6: add south to k] LIST_OF_TY_InsertItem(t_2, I49_south, 0, 0, 0); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if y-coordinate of place1 is less than y-coordinate of place2 begin] if (((GProperty(9, t_0,p29_y_coordinate) < GProperty(9, t_1,p29_y_coordinate)))) { ! phrase 9 ! [9: add east to k] LIST_OF_TY_InsertItem(t_2, I52_east, 0, 0, 0); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if y-coordinate of place1 is greater than y-coordinate of place2 begin] if (((GProperty(9, t_0,p29_y_coordinate) > GProperty(9, t_1,p29_y_coordinate)))) { ! phrase 12 ! [12: add west to k] LIST_OF_TY_InsertItem(t_2, I53_west, 0, 0, 0); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: if z-coordinate of place1 is less than z-coordinate of place2 begin] if (((GProperty(9, t_0,p30_z_coordinate) < GProperty(9, t_1,p30_z_coordinate)))) { ! phrase 15 ! [15: add up to k] LIST_OF_TY_InsertItem(t_2, I54_up, 0, 0, 0); ! phrase 16 ! [16: end if] } ! phrase 17 ! [17: if z-coordinate of place1 is greater than z-coordinate of place2 begin] if (((GProperty(9, t_0,p30_z_coordinate) > GProperty(9, t_1,p30_z_coordinate)))) { ! phrase 18 ! [18: add down to k] LIST_OF_TY_InsertItem(t_2, I55_down, 0, 0, 0); ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: say ~[K]~] say__p=1;ParaContent(); print (LIST_OF_TY_Say) t_2; .L_Say1191; .L_SayX1108; rfalse; ]; ! Request 121: phrase table name -> nothing ! From "Menus" by Emily Short ! To reprint ( selected menu - a table-name ): [ PHR_745_r121 t_0 ! Call parameter 'selected menu' = table name t_1 ! Local variable e.g. '__index' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: redraw status line] DrawStatusLine(); ! phrase 2 ! [2: say fixed letter spacing] say__p=1;ParaContent(); font off; .L_Say1192; .L_SayX1109; ! phrase 3 ! [3: let __index be 1] t_1 = 1; ! phrase 4 ! [4: clear only the main screen] VM_ClearScreen(2); ! phrase 5 ! [5: repeat through selected menu begin] @push ct_0; @push ct_1; for (t_2=t_0,t_3=1,ct_0=t_2,ct_1=t_3: t_3<=TableRows(t_2):t_3++,ct_0=t_2,ct_1=t_3) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 6 ! [6: if __index is current menu selection , say ~ >~] if (((t_1 == (Global_Vars-->13)))) { say__p=1;ParaContent(); print (PrintText) SC_1610; .L_Say1193; .L_SayX1110; } ! phrase 7 ! [7: otherwise say ~ ~] else { say__p=1;ParaContent(); print (PrintText) SC_1611; .L_Say1194; .L_SayX1111; } ! phrase 8 ! [8: say ~ [title entry][line break]~] say__p=1;ParaContent(); print (PrintText) SC_209; ParaContent(); print (PrintText) TableLookUpEntry(ct_0,107,ct_1); ParaContent(); new_line; .L_Say1195; .L_SayX1112; ! phrase 9 ! [9: increase __index by 1] t_1 = t_1 + 1; ! phrase 10 ! [10: end repeat] } @pull ct_1; @pull ct_0; ! phrase 11 ! [11: say variable letter spacing] say__p=1;ParaContent(); font on; .L_Say1196; .L_SayX1113; rfalse; ]; ! Request 122: phrase nothing -> nothing ! From "Basic Screen Effects" by Emily Short ! To pause the/-- game: [ PHR_758_r122 ; ! phrase 1 ! [1: say ~[paragraph break]Please press SPACE to continue.~] say__p=1;ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1612; new_line; .L_Say1197; .L_SayX1114; ! phrase 2 ! [2: wait for the space key] SPACEPause(); ! phrase 3 ! [3: clear the screen] VM_ClearScreen(0); rfalse; ]; ! Request 123: phrase table name -> nothing ! From "Menus" by Emily Short ! To say known hints from ( hint booklet - table-name ): [ PHR_749_r123 t_0 ! Call parameter 'hint booklet' = table name t_1 ! Local variable e.g. '__index' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let __index be 0] t_1 = 0; ! phrase 2 ! [2: clear only the main screen] VM_ClearScreen(2); ! phrase 3 ! [3: repeat through hint booklet begin] @push ct_0; @push ct_1; for (t_2=t_0,t_3=1,ct_0=t_2,ct_1=t_3: t_3<=TableRows(t_2):t_3++,ct_0=t_2,ct_1=t_3) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 4 ! [4: increase __index by 1] t_1 = t_1 + 1; ! phrase 5 ! [5: if there is a used entry begin] if (( (ExistsTableLookUpEntry(ct_0,117,ct_1)) )) { ! phrase 6 ! [6: say ~[__index]/[number of rows in hint booklet]: [hint entry][paragraph break]~] say__p=1;ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_1613; ParaContent(); print (say__n= TableRows(t_0) ); ParaContent(); print (PrintText) SC_396; ParaContent(); print (PrintText) TableLookUpEntry(ct_0,116,ct_1); ParaContent(); DivideParagraphPoint(); new_line; .L_Say1198; .L_SayX1115; ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: if __index is 1 begin] if (((t_1 == 1))) { ! phrase 9 ! [9: now used entry is turn count] TableLookUpEntry(ct_0,117,ct_1,1,turns); ! phrase 10 ! [10: say ~[__index]/[number of rows in hint booklet]: [hint entry][paragraph break]~] say__p=1;ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_1613; ParaContent(); print (say__n= TableRows(t_0) ); ParaContent(); print (PrintText) SC_396; ParaContent(); print (PrintText) TableLookUpEntry(ct_0,116,ct_1); ParaContent(); DivideParagraphPoint(); new_line; .L_Say1199; .L_SayX1116; ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end repeat] } @pull ct_1; @pull ct_0; ! phrase 14 ! [14: say ~Press SPACE to return to the menu or H to reveal another hint.~] say__p=1;ParaContent(); print (PrintText) SC_1614; new_line; .L_Say1200; .L_SayX1117; rfalse; ]; ! Request 124: phrase table name -> nothing ! From "Menus" by Emily Short ! To say hints from ( hint booklet - table-name ): [ PHR_750_r124 t_0 ! Call parameter 'hint booklet' = table name t_1 ! Local variable e.g. '__index' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: let __index be 0] t_1 = 0; ! phrase 2 ! [2: clear only the main screen] VM_ClearScreen(2); ! phrase 3 ! [3: repeat through hint booklet begin] @push ct_0; @push ct_1; for (t_2=t_0,t_3=1,ct_0=t_2,ct_1=t_3: t_3<=TableRows(t_2):t_3++,ct_0=t_2,ct_1=t_3) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 4 ! [4: increase __index by 1] t_1 = t_1 + 1; ! phrase 5 ! [5: say ~[__index]/[number of rows in hint booklet]: [hint entry][paragraph break]~] say__p=1;ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_1613; ParaContent(); print (say__n= TableRows(t_0) ); ParaContent(); print (PrintText) SC_396; ParaContent(); print (PrintText) TableLookUpEntry(ct_0,116,ct_1); ParaContent(); DivideParagraphPoint(); new_line; .L_Say1201; .L_SayX1118; ! phrase 6 ! [6: if there is a used entry begin] if (( (ExistsTableLookUpEntry(ct_0,117,ct_1)) )) { ! phrase 7 ! [7: do nothing] ; ! phrase 8 ! [8: otherwise] } else { ! phrase 9 ! [9: now used entry is turn count] TableLookUpEntry(ct_0,117,ct_1,1,turns); ! phrase 10 ! [10: say ~Press SPACE to return to the menu[if __index < number of rows in hint booklet] or H to reveal another hint[end if].~] say__p=1;ParaContent(); print (PrintText) SC_1615; if (~~((((t_1 < TableRows(t_0) ))))) jump L_Say1202; ParaContent(); print (PrintText) SC_1616; .L_Say1202; .L_SayX1119; ParaContent(); print (PrintText) SC_310; new_line; .L_Say1203; .L_SayX1120; ! phrase 11 ! [11: make no decision] rfalse; ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: end repeat] } @pull ct_1; @pull ct_0; ! phrase 14 ! [14: say ~Press SPACE to return to the menu[if __index < number of rows in hint booklet] or H to reveal another hint[end if].~] say__p=1;ParaContent(); print (PrintText) SC_1615; if (~~((((t_1 < TableRows(t_0) ))))) jump L_Say1204; ParaContent(); print (PrintText) SC_1616; .L_Say1204; .L_SayX1121; ParaContent(); print (PrintText) SC_310; new_line; .L_Say1205; .L_SayX1122; rfalse; ]; ! Request 125: phrase nothing -> nothing ! From the Standard Rules ! To say no line break -- running on ( documented at phs_nolinebreak ): [ PHR_335_r125 ; ! phrase 1 ! [1: do nothing] ; rfalse; ]; ! Request 126: phrase object -> nothing ! From the Standard Rules ! To say contents of ( O - an object ) ( deprecated ) ( documented at phs_contents_dep ): [ PHR_357_r126 t_0 ! Call parameter 'O' = object ; ! phrase 1 ! [1: list the contents of o , as a sentence] WriteListFrom(child(t_0), 8); rfalse; ]; ! Request 127: phrase object -> nothing ! From the Standard Rules ! To say the contents of ( O - an object ) ( deprecated ) ( documented at phs_contents_dep ): [ PHR_358_r127 t_0 ! Call parameter 'O' = object ; ! phrase 1 ! [1: list the contents of o , as a sentence , using the definite article] WriteListFrom(child(t_0), 264); rfalse; ]; ! Request 128: phrase nothing -> nothing ! From "Inform ATTACK Core" by Victor Gijsbers ! To say take no time: [ PHR_854_r128 ; ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); rfalse; ]; ! Request 129: phrase object -> nothing ! From "Plurality" by Emily Short ! To decide whether ( item - an object ) acts plural: [ PHR_884_r129 t_0 ! Call parameter 'item' = object ; ! phrase 1 ! [1: if the item is plural-named or the item is ambiguously plural begin] if (((((Adj_48_t1_v9(t_0))))) || ((((Adj_101_t1_v9(t_0)))))) { ! phrase 2 ! [2: yes] rtrue; ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: no] rfalse; rfalse; ]; ! Request 130: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say is-are of ( item - a thing ): [ PHR_886_r130 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: if prior named noun acts plural or the prior named noun is the player , say ~are~] if ((((PHR_884_r129 ((Global_Vars-->39))))) || ((((Global_Vars-->39) == player)))) { say__p=1;ParaContent(); print (PrintText) SC_386; .L_Say1206; .L_SayX1123; } ! phrase 3 ! [3: otherwise say ~is~] else { say__p=1;ParaContent(); print (PrintText) SC_387; .L_Say1207; .L_SayX1124; } rfalse; ]; ! Request 131: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Cap is-are: [ PHR_887_r131 ; ! phrase 1 ! [1: say is-are of prior named noun] say__p=1;ParaContent(); (PHR_890_r134 ((Global_Vars-->39))); .L_Say1208; .L_SayX1125; rfalse; ]; ! Request 132: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap is-are of ( item - a thing ) ( deprecated ): [ PHR_888_r132 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: if prior named noun acts plural or the prior named noun is the player , say ~Are~] if ((((PHR_884_r129 ((Global_Vars-->39))))) || ((((Global_Vars-->39) == player)))) { say__p=1;ParaContent(); print (PrintText) SC_1617; .L_Say1209; .L_SayX1126; } ! phrase 3 ! [3: otherwise say ~Is~] else { say__p=1;ParaContent(); print (PrintText) SC_1618; .L_Say1210; .L_SayX1127; } rfalse; ]; ! Request 133: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Is-are: [ PHR_889_r133 ; ! phrase 1 ! [1: say is-are of prior named noun] say__p=1;ParaContent(); (PHR_890_r134 ((Global_Vars-->39))); .L_Say1211; .L_SayX1128; rfalse; ]; ! Request 134: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Is-are of ( item - a thing ): [ PHR_890_r134 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: if prior named noun acts plural or the prior named noun is the player , say ~Are~] if ((((PHR_884_r129 ((Global_Vars-->39))))) || ((((Global_Vars-->39) == player)))) { say__p=1;ParaContent(); print (PrintText) SC_1617; .L_Say1212; .L_SayX1129; } ! phrase 3 ! [3: otherwise say ~Is~] else { say__p=1;ParaContent(); print (PrintText) SC_1618; .L_Say1213; .L_SayX1130; } rfalse; ]; ! Request 135: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say has-have: [ PHR_891_r135 ; ! phrase 1 ! [1: say has-have of prior named noun] say__p=1;ParaContent(); (PHR_892_r136 ((Global_Vars-->39))); .L_Say1214; .L_SayX1131; rfalse; ]; ! Request 136: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say has-have of ( item - a thing ): [ PHR_892_r136 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: if the item acts plural or the item is the player begin] if ((((PHR_884_r129 (t_0)))) || (((t_0 == player)))) { ! phrase 2 ! [2: say ~have~] say__p=1;ParaContent(); print (PrintText) SC_365; .L_Say1215; .L_SayX1132; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~has~] say__p=1;ParaContent(); print (PrintText) SC_366; .L_Say1216; .L_SayX1133; ! phrase 5 ! [5: end if] } rfalse; ]; ! Request 137: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Has-have of ( item - a thing ): [ PHR_893_r137 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: if the item acts plural or the item is the player begin] if ((((PHR_884_r129 (t_0)))) || (((t_0 == player)))) { ! phrase 2 ! [2: say ~Have~] say__p=1;ParaContent(); print (PrintText) SC_1619; .L_Say1217; .L_SayX1134; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~Has~] say__p=1;ParaContent(); print (PrintText) SC_1620; .L_Say1218; .L_SayX1135; ! phrase 5 ! [5: end if] } rfalse; ]; ! Request 138: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Has-have: [ PHR_894_r138 ; ! phrase 1 ! [1: say has-have of prior named noun] say__p=1;ParaContent(); (PHR_893_r137 ((Global_Vars-->39))); .L_Say1219; .L_SayX1136; rfalse; ]; ! Request 139: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say 's-'re of ( item - a thing ): [ PHR_895_r139 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: if the item acts plural or the item is the player begin] if ((((PHR_884_r129 (t_0)))) || (((t_0 == player)))) { ! phrase 3 ! [3: say ~[']re~] say__p=1;ParaContent(); print "'"; ParaContent(); print (PrintText) SC_1621; .L_Say1220; .L_SayX1137; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: say ~[']s~] say__p=1;ParaContent(); print "'"; ParaContent(); print (PrintText) SC_1149; .L_Say1221; .L_SayX1138; ! phrase 6 ! [6: end if] } rfalse; ]; ! Request 140: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say 's-'re: [ PHR_896_r140 ; ! phrase 1 ! [1: say 's-'re of the prior named noun] say__p=1;ParaContent(); (PHR_895_r139 ((Global_Vars-->39))); .L_Say1222; .L_SayX1139; rfalse; ]; ! Request 141: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say es of ( item - a thing ): [ PHR_903_r141 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: if the item acts plural or the item is the player begin] if ((((PHR_884_r129 (t_0)))) || (((t_0 == player)))) { ! phrase 2 ! [2: say ~~] say__p=1;ParaContent(); print (PrintText) EMPTY_TEXT_VALUE; .L_Say1223; .L_SayX1140; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~es~] say__p=1;ParaContent(); print (PrintText) SC_1622; .L_Say1224; .L_SayX1141; ! phrase 5 ! [5: end if] } rfalse; ]; ! Request 142: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say ies of ( item - a thing ): [ PHR_905_r142 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: if the item acts plural or the item is the player begin] if ((((PHR_884_r129 (t_0)))) || (((t_0 == player)))) { ! phrase 2 ! [2: say ~y~] say__p=1;ParaContent(); print (PrintText) SC_1623; .L_Say1225; .L_SayX1142; ! phrase 3 ! [3: otherwise] } else { ! phrase 4 ! [4: say ~ies~] say__p=1;ParaContent(); print (PrintText) SC_1624; .L_Say1226; .L_SayX1143; ! phrase 5 ! [5: end if] } rfalse; ]; ! Request 143: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say that-those: [ PHR_906_r143 ; ! phrase 1 ! [1: say that-those prior named noun] say__p=1;ParaContent(); (PHR_910_r147 ((Global_Vars-->39))); .L_Say1227; .L_SayX1144; rfalse; ]; ! Request 144: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Cap that-those ( deprecated ): [ PHR_907_r144 ; ! phrase 1 ! [1: say that-those prior named noun] say__p=1;ParaContent(); (PHR_911_r148 ((Global_Vars-->39))); .L_Say1228; .L_SayX1145; rfalse; ]; ! Request 145: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say That-those: [ PHR_908_r145 ; ! phrase 1 ! [1: say that-those prior named noun] say__p=1;ParaContent(); (PHR_911_r148 ((Global_Vars-->39))); .L_Say1229; .L_SayX1146; rfalse; ]; ! Request 146: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap that-those ( item - a thing ) ( deprecated ): [ PHR_909_r146 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Those~] say__p=1;ParaContent(); print (PrintText) SC_1625; .L_Say1230; .L_SayX1147; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1231; .L_SayX1148; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~He~] say__p=1;ParaContent(); print (PrintText) SC_1627; .L_Say1232; .L_SayX1149; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~She~] say__p=1;ParaContent(); print (PrintText) SC_1628; .L_Say1233; .L_SayX1150; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~That~] say__p=1;ParaContent(); print (PrintText) SC_1629; .L_Say1234; .L_SayX1151; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 147: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say that-those ( item - a thing ): [ PHR_910_r147 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~those~] say__p=1;ParaContent(); print (PrintText) SC_1630; .L_Say1235; .L_SayX1152; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~you~] say__p=1;ParaContent(); print (PrintText) SC_284; .L_Say1236; .L_SayX1153; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~he~] say__p=1;ParaContent(); print (PrintText) SC_1631; .L_Say1237; .L_SayX1154; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~she~] say__p=1;ParaContent(); print (PrintText) SC_1632; .L_Say1238; .L_SayX1155; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~that~] say__p=1;ParaContent(); print (PrintText) SC_1633; .L_Say1239; .L_SayX1156; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 148: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say That-those ( item - a thing ): [ PHR_911_r148 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Those~] say__p=1;ParaContent(); print (PrintText) SC_1625; .L_Say1240; .L_SayX1157; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1241; .L_SayX1158; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~He~] say__p=1;ParaContent(); print (PrintText) SC_1627; .L_Say1242; .L_SayX1159; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~She~] say__p=1;ParaContent(); print (PrintText) SC_1628; .L_Say1243; .L_SayX1160; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~That~] say__p=1;ParaContent(); print (PrintText) SC_1629; .L_Say1244; .L_SayX1161; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 149: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap that-those of ( item - a thing ) ( deprecated ): [ PHR_912_r149 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Those~] say__p=1;ParaContent(); print (PrintText) SC_1625; .L_Say1245; .L_SayX1162; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1246; .L_SayX1163; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~He~] say__p=1;ParaContent(); print (PrintText) SC_1627; .L_Say1247; .L_SayX1164; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~She~] say__p=1;ParaContent(); print (PrintText) SC_1628; .L_Say1248; .L_SayX1165; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~That~] say__p=1;ParaContent(); print (PrintText) SC_1629; .L_Say1249; .L_SayX1166; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 150: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say that-those of ( item - a thing ): [ PHR_913_r150 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~those~] say__p=1;ParaContent(); print (PrintText) SC_1630; .L_Say1250; .L_SayX1167; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~you~] say__p=1;ParaContent(); print (PrintText) SC_284; .L_Say1251; .L_SayX1168; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~he~] say__p=1;ParaContent(); print (PrintText) SC_1631; .L_Say1252; .L_SayX1169; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~she~] say__p=1;ParaContent(); print (PrintText) SC_1632; .L_Say1253; .L_SayX1170; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~that~] say__p=1;ParaContent(); print (PrintText) SC_1633; .L_Say1254; .L_SayX1171; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 151: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say That-those of ( item - a thing ): [ PHR_914_r151 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Those~] say__p=1;ParaContent(); print (PrintText) SC_1625; .L_Say1255; .L_SayX1172; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1256; .L_SayX1173; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~He~] say__p=1;ParaContent(); print (PrintText) SC_1627; .L_Say1257; .L_SayX1174; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~She~] say__p=1;ParaContent(); print (PrintText) SC_1628; .L_Say1258; .L_SayX1175; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~That~] say__p=1;ParaContent(); print (PrintText) SC_1629; .L_Say1259; .L_SayX1176; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 152: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say it-they: [ PHR_915_r152 ; ! phrase 1 ! [1: say it-they of prior named noun] say__p=1;ParaContent(); (PHR_916_r153 ((Global_Vars-->39))); .L_Say1260; .L_SayX1177; rfalse; ]; ! Request 153: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say it-they of ( item - a thing ): [ PHR_916_r153 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~they~] say__p=1;ParaContent(); print (PrintText) SC_1634; .L_Say1261; .L_SayX1178; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~you~] say__p=1;ParaContent(); print (PrintText) SC_284; .L_Say1262; .L_SayX1179; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~he~] say__p=1;ParaContent(); print (PrintText) SC_1631; .L_Say1263; .L_SayX1180; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~she~] say__p=1;ParaContent(); print (PrintText) SC_1632; .L_Say1264; .L_SayX1181; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~it~] say__p=1;ParaContent(); print (PrintText) SC_1635; .L_Say1265; .L_SayX1182; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 154: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Cap it-they ( deprecated ): [ PHR_917_r154 ; ! phrase 1 ! [1: say it-they of prior named noun] say__p=1;ParaContent(); (PHR_920_r157 ((Global_Vars-->39))); .L_Say1266; .L_SayX1183; rfalse; ]; ! Request 155: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap it-they of ( item - a thing ) ( deprecated ): [ PHR_918_r155 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~They~] say__p=1;ParaContent(); print (PrintText) SC_1636; .L_Say1267; .L_SayX1184; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1268; .L_SayX1185; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~He~] say__p=1;ParaContent(); print (PrintText) SC_1627; .L_Say1269; .L_SayX1186; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~She~] say__p=1;ParaContent(); print (PrintText) SC_1628; .L_Say1270; .L_SayX1187; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~It~] say__p=1;ParaContent(); print (PrintText) SC_1637; .L_Say1271; .L_SayX1188; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 156: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say It-they: [ PHR_919_r156 ; ! phrase 1 ! [1: say it-they of prior named noun] say__p=1;ParaContent(); (PHR_920_r157 ((Global_Vars-->39))); .L_Say1272; .L_SayX1189; rfalse; ]; ! Request 157: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say It-they of ( item - a thing ): [ PHR_920_r157 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~They~] say__p=1;ParaContent(); print (PrintText) SC_1636; .L_Say1273; .L_SayX1190; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1274; .L_SayX1191; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~He~] say__p=1;ParaContent(); print (PrintText) SC_1627; .L_Say1275; .L_SayX1192; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~She~] say__p=1;ParaContent(); print (PrintText) SC_1628; .L_Say1276; .L_SayX1193; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~It~] say__p=1;ParaContent(); print (PrintText) SC_1637; .L_Say1277; .L_SayX1194; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 158: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say its-their: [ PHR_921_r158 ; ! phrase 1 ! [1: say its-their of prior named noun] say__p=1;ParaContent(); (PHR_922_r159 ((Global_Vars-->39))); .L_Say1278; .L_SayX1195; rfalse; ]; ! Request 159: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say its-their of ( item - a thing ): [ PHR_922_r159 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~their~] say__p=1;ParaContent(); print (PrintText) SC_1638; .L_Say1279; .L_SayX1196; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~your~] say__p=1;ParaContent(); print (PrintText) SC_805; .L_Say1280; .L_SayX1197; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~his~] say__p=1;ParaContent(); print (PrintText) SC_1639; .L_Say1281; .L_SayX1198; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~her~] say__p=1;ParaContent(); print (PrintText) SC_1640; .L_Say1282; .L_SayX1199; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~its~] say__p=1;ParaContent(); print (PrintText) SC_806; .L_Say1283; .L_SayX1200; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 160: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Cap its-their ( deprecated ): [ PHR_923_r160 ; ! phrase 1 ! [1: say its-their of prior named noun] say__p=1;ParaContent(); (PHR_926_r163 ((Global_Vars-->39))); .L_Say1284; .L_SayX1201; rfalse; ]; ! Request 161: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap its-their of ( item - a thing ) ( deprecated ): [ PHR_924_r161 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Their~] say__p=1;ParaContent(); print (PrintText) SC_1641; .L_Say1285; .L_SayX1202; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~Your~] say__p=1;ParaContent(); print (PrintText) SC_1642; .L_Say1286; .L_SayX1203; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~His~] say__p=1;ParaContent(); print (PrintText) SC_1643; .L_Say1287; .L_SayX1204; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~Her~] say__p=1;ParaContent(); print (PrintText) SC_1644; .L_Say1288; .L_SayX1205; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~Its~] say__p=1;ParaContent(); print (PrintText) SC_1645; .L_Say1289; .L_SayX1206; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 162: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Its-their: [ PHR_925_r162 ; ! phrase 1 ! [1: say its-their of prior named noun] say__p=1;ParaContent(); (PHR_926_r163 ((Global_Vars-->39))); .L_Say1290; .L_SayX1207; rfalse; ]; ! Request 163: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Its-their of ( item - a thing ): [ PHR_926_r163 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Their~] say__p=1;ParaContent(); print (PrintText) SC_1641; .L_Say1291; .L_SayX1208; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~Your~] say__p=1;ParaContent(); print (PrintText) SC_1642; .L_Say1292; .L_SayX1209; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~His~] say__p=1;ParaContent(); print (PrintText) SC_1643; .L_Say1293; .L_SayX1210; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~Her~] say__p=1;ParaContent(); print (PrintText) SC_1644; .L_Say1294; .L_SayX1211; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~Its~] say__p=1;ParaContent(); print (PrintText) SC_1645; .L_Say1295; .L_SayX1212; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 164: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say it-them: [ PHR_927_r164 ; ! phrase 1 ! [1: say it-them of prior named noun] say__p=1;ParaContent(); (PHR_928_r165 ((Global_Vars-->39))); .L_Say1296; .L_SayX1213; rfalse; ]; ! Request 165: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say it-them of ( item - a thing ): [ PHR_928_r165 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~them~] say__p=1;ParaContent(); print (PrintText) SC_1646; .L_Say1297; .L_SayX1214; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~you~] say__p=1;ParaContent(); print (PrintText) SC_284; .L_Say1298; .L_SayX1215; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~him~] say__p=1;ParaContent(); print (PrintText) SC_1647; .L_Say1299; .L_SayX1216; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~her~] say__p=1;ParaContent(); print (PrintText) SC_1640; .L_Say1300; .L_SayX1217; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~it~] say__p=1;ParaContent(); print (PrintText) SC_1635; .L_Say1301; .L_SayX1218; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 166: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Cap it-them ( deprecated ): [ PHR_929_r166 ; ! phrase 1 ! [1: say it-them of prior named noun] say__p=1;ParaContent(); (PHR_932_r169 ((Global_Vars-->39))); .L_Say1302; .L_SayX1219; rfalse; ]; ! Request 167: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap it-them of ( item - a thing ) ( deprecated ): [ PHR_930_r167 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Them~] say__p=1;ParaContent(); print (PrintText) SC_1648; .L_Say1303; .L_SayX1220; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1304; .L_SayX1221; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~Him~] say__p=1;ParaContent(); print (PrintText) SC_1649; .L_Say1305; .L_SayX1222; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~Her~] say__p=1;ParaContent(); print (PrintText) SC_1644; .L_Say1306; .L_SayX1223; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~It~] say__p=1;ParaContent(); print (PrintText) SC_1637; .L_Say1307; .L_SayX1224; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 168: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say It-them: [ PHR_931_r168 ; ! phrase 1 ! [1: say it-them of prior named noun] say__p=1;ParaContent(); (PHR_932_r169 ((Global_Vars-->39))); .L_Say1308; .L_SayX1225; rfalse; ]; ! Request 169: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say It-them of ( item - a thing ): [ PHR_932_r169 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Them~] say__p=1;ParaContent(); print (PrintText) SC_1648; .L_Say1309; .L_SayX1226; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~You~] say__p=1;ParaContent(); print (PrintText) SC_1626; .L_Say1310; .L_SayX1227; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~Him~] say__p=1;ParaContent(); print (PrintText) SC_1649; .L_Say1311; .L_SayX1228; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~Her~] say__p=1;ParaContent(); print (PrintText) SC_1644; .L_Say1312; .L_SayX1229; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~It~] say__p=1;ParaContent(); print (PrintText) SC_1637; .L_Say1313; .L_SayX1230; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 170: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say its-theirs: [ PHR_933_r170 ; ! phrase 1 ! [1: say its-theirs of prior named noun] say__p=1;ParaContent(); (PHR_934_r171 ((Global_Vars-->39))); .L_Say1314; .L_SayX1231; rfalse; ]; ! Request 171: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say its-theirs of ( item - a thing ): [ PHR_934_r171 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~theirs~] say__p=1;ParaContent(); print (PrintText) SC_1650; .L_Say1315; .L_SayX1232; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~yours~] say__p=1;ParaContent(); print (PrintText) SC_1651; .L_Say1316; .L_SayX1233; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~his~] say__p=1;ParaContent(); print (PrintText) SC_1639; .L_Say1317; .L_SayX1234; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~hers~] say__p=1;ParaContent(); print (PrintText) SC_1652; .L_Say1318; .L_SayX1235; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~its~] say__p=1;ParaContent(); print (PrintText) SC_806; .L_Say1319; .L_SayX1236; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 172: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Cap its-theirs ( deprecated ): [ PHR_935_r172 ; ! phrase 1 ! [1: say its-theirs of prior named noun] say__p=1;ParaContent(); (PHR_938_r175 ((Global_Vars-->39))); .L_Say1320; .L_SayX1237; rfalse; ]; ! Request 173: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap its-theirs of ( item - a thing ) ( deprecated ): [ PHR_936_r173 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Theirs~] say__p=1;ParaContent(); print (PrintText) SC_1653; .L_Say1321; .L_SayX1238; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~Yours~] say__p=1;ParaContent(); print (PrintText) SC_1654; .L_Say1322; .L_SayX1239; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~His~] say__p=1;ParaContent(); print (PrintText) SC_1643; .L_Say1323; .L_SayX1240; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~Hers~] say__p=1;ParaContent(); print (PrintText) SC_1655; .L_Say1324; .L_SayX1241; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~Its~] say__p=1;ParaContent(); print (PrintText) SC_1645; .L_Say1325; .L_SayX1242; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 174: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Its-theirs: [ PHR_937_r174 ; ! phrase 1 ! [1: say its-theirs of prior named noun] say__p=1;ParaContent(); (PHR_938_r175 ((Global_Vars-->39))); .L_Say1326; .L_SayX1243; rfalse; ]; ! Request 175: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Its-theirs of ( item - a thing ): [ PHR_938_r175 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item acts plural begin] if (((PHR_884_r129 (t_0)))) { ! phrase 4 ! [4: say ~Theirs~] say__p=1;ParaContent(); print (PrintText) SC_1653; .L_Say1327; .L_SayX1244; ! phrase 5 ! [5: otherwise if the item is the player] } else if (((t_0 == player))) { ! phrase 6 ! [6: say ~Yours~] say__p=1;ParaContent(); print (PrintText) SC_1654; .L_Say1328; .L_SayX1245; ! phrase 7 ! [7: otherwise if the item is male and item is not neuter] } else if (((((Adj_85_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 8 ! [8: say ~His~] say__p=1;ParaContent(); print (PrintText) SC_1643; .L_Say1329; .L_SayX1246; ! phrase 9 ! [9: otherwise if the item is female and item is not neuter] } else if (((((Adj_84_t1_v9(t_0))))) && (((~~(((Adj_86_t1_v9(t_0)))))))) { ! phrase 10 ! [10: say ~Hers~] say__p=1;ParaContent(); print (PrintText) SC_1655; .L_Say1330; .L_SayX1247; ! phrase 11 ! [11: otherwise] } else { ! phrase 12 ! [12: say ~Its~] say__p=1;ParaContent(); print (PrintText) SC_1645; .L_Say1331; .L_SayX1248; ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 176: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say possessive: [ PHR_939_r176 ; ! phrase 1 ! [1: say possessive of prior named noun] say__p=1;ParaContent(); (PHR_940_r42 ((Global_Vars-->39))); .L_Say1332; .L_SayX1249; rfalse; ]; ! Request 177: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Cap possessive ( deprecated ): [ PHR_941_r177 ; ! phrase 1 ! [1: say possessive of prior named noun] say__p=1;ParaContent(); (PHR_944_r180 ((Global_Vars-->39))); .L_Say1333; .L_SayX1250; rfalse; ]; ! Request 178: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Cap possessive of ( item - a thing ) ( deprecated ): [ PHR_942_r178 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item is the player begin] if (((t_0 == player))) { ! phrase 4 ! [4: say ~Your~] say__p=1;ParaContent(); print (PrintText) SC_1642; .L_Say1334; .L_SayX1251; ! phrase 5 ! [5: otherwise if the item acts plural] } else if (((PHR_884_r129 (t_0)))) { ! phrase 6 ! [6: say ~[The item][apostrophe]~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print "'"; .L_Say1335; .L_SayX1252; ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: say ~[The item][apostrophe]s~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print "'"; ParaContent(); print (PrintText) SC_1149; .L_Say1336; .L_SayX1253; ! phrase 9 ! [9: end if] } rfalse; ]; ! Request 179: phrase nothing -> nothing ! From "Plurality" by Emily Short ! To say Possessive: [ PHR_943_r179 ; ! phrase 1 ! [1: say possessive of prior named noun] say__p=1;ParaContent(); (PHR_944_r180 ((Global_Vars-->39))); .L_Say1337; .L_SayX1254; rfalse; ]; ! Request 180: phrase thing -> nothing ! From "Plurality" by Emily Short ! To say Possessive of ( item - a thing ): [ PHR_944_r180 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now the prior named noun is the item] (Global_Vars-->39) = t_0; ! phrase 2 ! [2: mark prior named noun in output] (PHR_881_r52 ((Global_Vars-->39))); ! phrase 3 ! [3: if the item is the player begin] if (((t_0 == player))) { ! phrase 4 ! [4: say ~Your~] say__p=1;ParaContent(); print (PrintText) SC_1642; .L_Say1338; .L_SayX1255; ! phrase 5 ! [5: otherwise if the item acts plural] } else if (((PHR_884_r129 (t_0)))) { ! phrase 6 ! [6: say ~[The item][apostrophe]~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print "'"; .L_Say1339; .L_SayX1256; ! phrase 7 ! [7: otherwise] } else { ! phrase 8 ! [8: say ~[The item][apostrophe]s~] say__p=1;ParaContent(); print (The) t_0; ParaContent(); print "'"; ParaContent(); print (PrintText) SC_1149; .L_Say1340; .L_SayX1257; ! phrase 9 ! [9: end if] } rfalse; ]; ! Request 181: phrase person -> nothing ! From "Inform ATTACK" by Victor Gijsbers ! To restore the health of ( patient - a person ): [ PHR_958_r181 t_0 ! Call parameter 'patient' = person ; ! phrase 1 ! [1: now the health of the patient is the permanent health of the patient] WriteGProperty(9, t_0,p14_health,GProperty(9, t_0,p17_permanent_health)); rfalse; ]; ! Request 182: phrase person -> nothing ! From "Inform ATTACK" by Victor Gijsbers ! To fully heal ( patient - a person ): [ PHR_959_r182 t_0 ! Call parameter 'patient' = person ; ! phrase 1 ! [1: if the permanent health of the patient is greater than the health of the patient begin] if (((GProperty(9, t_0,p17_permanent_health) > GProperty(9, t_0,p14_health)))) { ! phrase 2 ! [2: restore the health of the patient] (PHR_958_r181 (t_0)); ! phrase 3 ! [3: end if] } rfalse; ]; ! Request 183: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To approve the map: [ PHR_1082_r183 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room ; ! phrase 1 ! [1: now distance-1 is 0] (Global_Vars-->58) = 0; ! phrase 2 ! [2: now distance-2 is 0] (Global_Vars-->59) = 0; ! phrase 3 ! [3: repeat with place running through placed rooms begin] for (t_0=Prop_435(0), t_1=Prop_435(t_0): t_0: t_0=t_1, t_1=Prop_435(t_1)) { ! phrase 4 ! [4: if distance of place is 1 , increase distance-1 by 1] if ((((PHR_1081_r94 (t_0)) == 1))) { (Global_Vars-->58) = (Global_Vars-->58) + 1; } ! phrase 5 ! [5: if distance of place is 2 , increase distance-2 by 1] if ((((PHR_1081_r94 (t_0)) == 2))) { (Global_Vars-->59) = (Global_Vars-->59) + 1; } ! phrase 6 ! [6: end repeat] } ! phrase 7 ! [7: if distance-1 plus distance-2 is greater than 4 begin] if ((( ((Global_Vars-->58)+(Global_Vars-->59)) > 4))) { ! phrase 8 ! [8: now map approved is true] (Global_Vars-->49) = 1; ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: if generation info is true , say ~Map rejected. Regenerating.~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1656; new_line; .L_Say1341; .L_SayX1258; } ! phrase 11 ! [11: end if] } rfalse; ]; ! Request 184: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To fill the Table of Suitable Rooms: [ PHR_1083_r184 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: blank out the whole of the table of suitable rooms] TableBlankOutAll(T13_suitable_rooms); ! phrase 2 ! [2: repeat with place running through placeable not placed rooms begin] for (t_0=Prop_436(0), t_1=Prop_436(t_0): t_0: t_0=t_1, t_1=Prop_436(t_1)) { ! phrase 3 ! [3: now considered room is place] (Global_Vars-->50) = t_0; ! phrase 4 ! [4: consider the placement possible rules] ProcessRulebook(459); ! phrase 5 ! [5: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 6 ! [6: choose a blank row in the table of suitable rooms] ct_0 = T13_suitable_rooms; ct_1 = TableBlankRow(ct_0); ! phrase 7 ! [7: now the candidate entry is place] TableLookUpEntry(ct_0,126,ct_1,1,t_0); ! phrase 8 ! [8: now the room score entry is 0] TableLookUpEntry(ct_0,127,ct_1,1,0); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end repeat] } rfalse; ]; ! Request 185: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To score the suitable rooms: [ PHR_1086_r185 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through the table of suitable rooms begin] @push ct_0; @push ct_1; for (t_0=T13_suitable_rooms,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: now considered room is the candidate entry] (Global_Vars-->50) = TableLookUpEntry(ct_0,126,ct_1); if (~~((Global_Vars-->50) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->50), "now considered room is the Candidate entry", "room");; ! phrase 3 ! [3: now current room score is 0] (Global_Vars-->55) = 0; ! phrase 4 ! [4: consider the placement scoring rules] ProcessRulebook(460); ! phrase 5 ! [5: now the room score entry is current room score] TableLookUpEntry(ct_0,127,ct_1,1,(Global_Vars-->55)); ! phrase 6 ! [6: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! Request 186: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To place monsters: [ PHR_1099_r186 ; ! phrase 1 ! [1: clear all monsters] (PHR_1100_r187 ()); ! phrase 2 ! [2: set up table of monster rooms] (PHR_1101_r188 ()); ! phrase 3 ! [3: fill the table of monster rooms] (PHR_1102_r189 ()); ! phrase 4 ! [4: put monsters in the rooms] (PHR_1103_r190 ()); ! phrase 5 ! [5: consider the final monster placement rules] ProcessRulebook(461); rfalse; ]; ! Request 187: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To clear all monsters: [ PHR_1100_r187 t_0 ! Local variable e.g. '?-1,-1?' = monster t_1 ! Local variable e.g. '?-1,-1?' = monster ; ! phrase 1 ! [1: repeat with guy running through monsters begin] for (t_0=Prop_437(0), t_1=Prop_437(t_0): t_0: t_0=t_1, t_1=Prop_437(t_1)) { ! phrase 2 ! [2: remove guy from play] RemoveFromPlay(t_0); ! phrase 3 ! [3: end repeat] } rfalse; ]; ! Request 188: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To set up Table of Monster Rooms: [ PHR_1101_r188 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: blank out the whole of the table of monster rooms] TableBlankOutAll(T14_monster_rooms); ! phrase 2 ! [2: repeat with place running through placed habitable rooms begin] for (t_0=Prop_438(0), t_1=Prop_438(t_0): t_0: t_0=t_1, t_1=Prop_438(t_1)) { ! phrase 3 ! [3: choose a blank row in the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = TableBlankRow(ct_0); ! phrase 4 ! [4: now locale entry is place] TableLookUpEntry(ct_0,128,ct_1,1,t_0); ! phrase 5 ! [5: now distance entry is distance of place] TableLookUpEntry(ct_0,129,ct_1,1,(PHR_1081_r94 (t_0))); ! phrase 6 ! [6: now level entry is 0] TableLookUpEntry(ct_0,130,ct_1,1,0); ! phrase 7 ! [7: end repeat] } rfalse; ]; ! Request 189: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To fill the Table of Monster Rooms: [ PHR_1102_r189 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: if distance-1 is 1 begin] if ((((Global_Vars-->58) == 1))) { ! phrase 2 ! [2: if 1 is a distance listed in the table of monster rooms begin] if ((((ct_1=ExistsTableRowCorr(ct_0=T14_monster_rooms,129,1))))) { ! phrase 3 ! [3: choose a row with a distance of 1 in the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = TableRowCorr(ct_0, 129, 1); ! phrase 4 ! [4: blank out the whole row] TableBlankOutRow(ct_0, ct_1); ! phrase 5 ! [5: end if] } ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if distance-2 is 1 and at least eight habitable rooms are placed begin] if (((((Global_Vars-->59) == 1))) && ((Prop_439()))) { ! phrase 8 ! [8: if 1 is a distance listed in the table of monster rooms begin] if ((((ct_1=ExistsTableRowCorr(ct_0=T14_monster_rooms,129,1))))) { ! phrase 9 ! [9: choose a row with a distance of 1 in the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = TableRowCorr(ct_0, 129, 1); ! phrase 10 ! [10: blank out the whole row] TableBlankOutRow(ct_0, ct_1); ! phrase 11 ! [11: end if] } ! phrase 12 ! [12: end if] } ! phrase 13 ! [13: sort table of monster rooms in random order] TableShuffle(T14_monster_rooms); ! phrase 14 ! [14: sort table of monster rooms in distance order] TableSort(T14_monster_rooms, 129, 1); ! phrase 15 ! [15: while the number of filled rows in table of monster rooms is greater than 7 begin] while ((( TableFilledRows(T14_monster_rooms) > 7))) { ! phrase 16 ! [16: let n be the number of filled rows in table of monster rooms] t_0 = TableFilledRows(T14_monster_rooms) ; ! phrase 17 ! [17: let m be a random number between 2 and n - 1] t_1 = R_DecimalNumber(2, (t_0-1) ) ; ! phrase 18 ! [18: choose row m from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = t_1; ! phrase 19 ! [19: blank out the whole row] TableBlankOutRow(ct_0, ct_1); ! phrase 20 ! [20: sort table of monster rooms in distance order] TableSort(T14_monster_rooms, 129, 1); ! phrase 21 ! [21: end while] } ! phrase 22 ! [22: choose row 1 from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = 1; ! phrase 23 ! [23: now level entry is 1] TableLookUpEntry(ct_0,130,ct_1,1,1); ! phrase 24 ! [24: choose row 2 from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = 2; ! phrase 25 ! [25: now level entry is 2] TableLookUpEntry(ct_0,130,ct_1,1,2); ! phrase 26 ! [26: choose row 3 from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = 3; ! phrase 27 ! [27: now level entry is 1] TableLookUpEntry(ct_0,130,ct_1,1,1); ! phrase 28 ! [28: choose row 4 from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = 4; ! phrase 29 ! [29: now level entry is 3] TableLookUpEntry(ct_0,130,ct_1,1,3); ! phrase 30 ! [30: choose row 5 from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = 5; ! phrase 31 ! [31: now level entry is 2] TableLookUpEntry(ct_0,130,ct_1,1,2); ! phrase 32 ! [32: choose row 6 from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = 6; ! phrase 33 ! [33: now level entry is 4] TableLookUpEntry(ct_0,130,ct_1,1,4); ! phrase 34 ! [34: choose row 7 from the table of monster rooms] ct_0 = T14_monster_rooms; ct_1 = 7; ! phrase 35 ! [35: now level entry is 5] TableLookUpEntry(ct_0,130,ct_1,1,5); rfalse; ]; ! Request 190: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To put monsters in the rooms: [ PHR_1103_r190 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number t_2 ! Local variable e.g. '?-1,-1?' = number t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = number t_5 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through the table of monster rooms begin] @push ct_0; @push ct_1; for (t_0=T14_monster_rooms,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: now considered room is locale entry] (Global_Vars-->50) = TableLookUpEntry(ct_0,128,ct_1); if (~~((Global_Vars-->50) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->50), "now considered room is locale entry", "room");; ! phrase 3 ! [3: now global monster level is level entry] (Global_Vars-->60) = TableLookUpEntry(ct_0,130,ct_1); ! phrase 4 ! [4: fill the table of suitable monsters] (PHR_1104_r191 ()); ! phrase 5 ! [5: score the suitable monsters] (PHR_1108_r192 ()); ! phrase 6 ! [6: let max be the number of filled rows in table of suitable monsters] t_2 = TableFilledRows(T15_suitable_monsters) ; ! phrase 7 ! [7: if max is not 0 begin] if (((~~((t_2 == 0))))) { ! phrase 8 ! [8: sort table of suitable monsters in random order] TableShuffle(T15_suitable_monsters); ! phrase 9 ! [9: sort table of suitable monsters in reverse room score order] TableSort(T15_suitable_monsters, 127, -1); ! phrase 10 ! [10: let pos1 be a random number between 1 and max] t_3 = R_DecimalNumber(1, t_2) ; ! phrase 11 ! [11: let pos2 be a random number between 1 and max] t_4 = R_DecimalNumber(1, t_2) ; ! phrase 12 ! [12: let pos3 be a random number between 1 and max] t_5 = R_DecimalNumber(1, t_2) ; ! phrase 13 ! [13: if pos2 is less than pos1 , now pos1 is pos2] if (((t_4 < t_3))) { t_3 = t_4; } ! phrase 14 ! [14: if pos3 is less than pos1 , now pos1 is pos3] if (((t_5 < t_3))) { t_3 = t_5; } ! phrase 15 ! [15: choose row pos1 in the table of suitable monsters] ct_0 = T15_suitable_monsters; ct_1 = t_3; ! phrase 16 ! [16: if generation info is true , say ~* Placing [applicant entry] (level [global monster level]) in [considered room].[line break][run paragraph on]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); print (PrintText) SC_1657; ParaContent(); print (PrintShortName) TableLookUpEntry(ct_0,131,ct_1); ParaContent(); print (PrintText) SC_274; ParaContent(); print (say__n=(Global_Vars-->60)); ParaContent(); print (PrintText) SC_1486; ParaContent(); print (PrintShortName) (Global_Vars-->50); ParaContent(); print (PrintText) SC_310; ParaContent(); new_line; ParaContent(); RunParagraphOn(); .L_Say1342; .L_SayX1259; } ! phrase 17 ! [17: move applicant entry to considered room] MoveObject(TableLookUpEntry(ct_0,131,ct_1), (Global_Vars-->50), 0, false); ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! Request 191: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To fill the Table of Suitable Monsters: [ PHR_1104_r191 t_0 ! Local variable e.g. '?-1,-1?' = monster t_1 ! Local variable e.g. '?-1,-1?' = monster ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: blank out the whole of the table of suitable monsters] TableBlankOutAll(T15_suitable_monsters); ! phrase 2 ! [2: repeat with guy running through off-stage monsters begin] for (t_0=Prop_440(0), t_1=Prop_440(t_0): t_0: t_0=t_1, t_1=Prop_440(t_1)) { ! phrase 3 ! [3: now considered monster is guy] (Global_Vars-->61) = t_0; ! phrase 4 ! [4: consider the monster placement possible rules] ProcessRulebook(462); ! phrase 5 ! [5: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 6 ! [6: choose a blank row in the table of suitable monsters] ct_0 = T15_suitable_monsters; ct_1 = TableBlankRow(ct_0); ! phrase 7 ! [7: now the applicant entry is guy] TableLookUpEntry(ct_0,131,ct_1,1,t_0); ! phrase 8 ! [8: now the monster score entry is 0] TableLookUpEntry(ct_0,132,ct_1,1,0); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: end repeat] } rfalse; ]; ! Request 192: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To score the suitable monsters: [ PHR_1108_r192 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through the table of suitable monsters begin] @push ct_0; @push ct_1; for (t_0=T15_suitable_monsters,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: now considered monster is the applicant entry] (Global_Vars-->61) = TableLookUpEntry(ct_0,131,ct_1); if (~~((Global_Vars-->61) ofclass K19_monster)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->61), "now considered monster is the Applicant entry", "monster");; ! phrase 3 ! [3: now current monster score is 0] (Global_Vars-->62) = 0; ! phrase 4 ! [4: consider the monster placement scoring rules] ProcessRulebook(463); ! phrase 5 ! [5: now the monster score entry is current monster score] TableLookUpEntry(ct_0,132,ct_1,1,(Global_Vars-->62)); ! phrase 6 ! [6: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! Request 193: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To stock the dungeon: [ PHR_1109_r193 ; ! phrase 1 ! [1: consider the treasure placement rules] ProcessRulebook(464); ! phrase 2 ! [2: if generation info is true , say ~[paragraph break][paragraph break]~] if (((((Global_Vars-->135) && true) == (1 && true)))) { say__p=1;ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); DivideParagraphPoint(); new_line; .L_Say1343; .L_SayX1260; } rfalse; ]; ! Request 194: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To fill the Table of Suitable Rooms for treasure: [ PHR_1116_r194 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: blank out the whole of the table of suitable rooms] TableBlankOutAll(T13_suitable_rooms); ! phrase 2 ! [2: repeat with place running through treasurable placed rooms begin] for (t_0=Prop_441(0), t_1=Prop_441(t_0): t_0: t_0=t_1, t_1=Prop_441(t_1)) { ! phrase 3 ! [3: now considered room is place] (Global_Vars-->50) = t_0; ! phrase 4 ! [4: choose a blank row in the table of suitable rooms] ct_0 = T13_suitable_rooms; ct_1 = TableBlankRow(ct_0); ! phrase 5 ! [5: now the candidate entry is place] TableLookUpEntry(ct_0,126,ct_1,1,t_0); ! phrase 6 ! [6: now the room score entry is 0] TableLookUpEntry(ct_0,127,ct_1,1,0); ! phrase 7 ! [7: end repeat] } rfalse; ]; ! Request 195: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To score the suitable rooms for treasure: [ PHR_1117_r195 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through the table of suitable rooms begin] @push ct_0; @push ct_1; for (t_0=T13_suitable_rooms,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: now considered room is the candidate entry] (Global_Vars-->50) = TableLookUpEntry(ct_0,126,ct_1); if (~~((Global_Vars-->50) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->50), "now considered room is the Candidate entry", "room");; ! phrase 3 ! [3: now current room score is 0] (Global_Vars-->55) = 0; ! phrase 4 ! [4: consider the treasure scoring rules] ProcessRulebook(465); ! phrase 5 ! [5: now the room score entry is current room score] TableLookUpEntry(ct_0,127,ct_1,1,(Global_Vars-->55)); ! phrase 6 ! [6: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! Request 196: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To make the dungeon interesting: [ PHR_1119_r196 ; ! phrase 1 ! [1: consider the dungeon interest rules] ProcessRulebook(466); rfalse; ]; ! Request 197: phrase nothing -> nothing ! From "Kerkerkruip Dungeon Generation" by Victor Gijsbers ! To finish the dungeon: [ PHR_1120_r197 ; ! phrase 1 ! [1: consider the dungeon finish rules] ProcessRulebook(467); rfalse; ]; ! Request 198: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To do power transferral with ( guy - a person ): [ PHR_1160_r198 t_0 ! Call parameter 'guy' = person ;blockv_stack-->(blockv_sp+0) = BlkValueCreate(LIST_OF_TY,0,KD8_list_of_powers); blockv_sp = blockv_sp + 1; blockv_stack-->(blockv_sp++) = R_SHELL_80(blockv_sp-1, t_0 ); blockv_sp = blockv_sp - 2; BlkFree(blockv_stack-->(blockv_sp+0)); return blockv_stack-->(blockv_sp+1); ]; [ R_SHELL_80 I7BASPL t_0 ! Call parameter 'guy' = person t_1 ! Local variable e.g. '?-1,-1?' = power t_2 ! Local variable e.g. '?-1,-1?' = power t_3 ! Local variable e.g. '?-1,-1?' = number t_4 ! Local variable e.g. '?-1,-1?' = list of powers t_5 ! Local variable e.g. '?-1,-1?' = power t_6 ! Local variable e.g. '?-1,-1?' = power ; ! phrase 1 ! [1: repeat with x running through powers begin] for (t_1=Prop_442(0), t_2=Prop_442(t_1): t_1: t_1=t_2, t_2=Prop_442(t_2)) { ! phrase 2 ! [2: if guy grants x begin] if (((t_0 == (t_1.p157_granting)))) { ! phrase 3 ! [3: follow the absorbing rules for x] FollowRulebook(485, t_1, true); ! phrase 4 ! [4: now x is granted] (Adj_158_t2_v9(t_1)); ! phrase 5 ! [5: let n be the power level of x] t_3 = GProperty(9, t_1,p38_power_level); ! phrase 6 ! [6: let z be a list of powers] t_4 = (blockv_stack-->(I7BASPL+0)); ! phrase 7 ! [7: repeat with y running through granted powers begin] for (t_5=Prop_443(0), t_6=Prop_443(t_5): t_5: t_5=t_6, t_6=Prop_443(t_6)) { ! phrase 8 ! [8: unless x is y begin] if (~~(((t_1 == t_5)))) { ! phrase 9 ! [9: unless power level of y is greater than the power level of x begin] if (~~(((GProperty(9, t_5,p38_power_level) > GProperty(9, t_1,p38_power_level))))) { ! phrase 10 ! [10: add y to z] LIST_OF_TY_InsertItem(t_4, t_5, 0, 0, 0); ! phrase 11 ! [11: follow the repelling rules for y] FollowRulebook(486, t_5, true); ! phrase 12 ! [12: now y is not granted] (Adj_158_t3_v9(t_5)); ! phrase 13 ! [13: end unless] } ! phrase 14 ! [14: end unless] } ! phrase 15 ! [15: end repeat] } ! phrase 16 ! [16: if the number of entries in z is greater than 0 begin] if ((( LIST_OF_TY_GetLength(t_4) > 0))) { ! phrase 17 ! [17: say ~The violence of the absorption drives [Z with definite articles] out of your body. ~] say__p=1;ParaContent(); print (PrintText) SC_1658; ParaContent(); LIST_OF_TY_Say(t_4, 2); ParaContent(); print (PrintText) SC_1659; .L_Say1344; .L_SayX1261; ! phrase 18 ! [18: end if] } ! phrase 19 ! [19: end if] } ! phrase 20 ! [20: end repeat] } rfalse; ]; ! Request 199: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To heal fully because ( guy - a person ) is slain: [ PHR_1161_r199 t_0 ! Call parameter 'guy' = person t_1 ! Local variable e.g. '?-1,-1?' = number ; ! phrase 1 ! [1: if the level of guy is greater than 0 and the level of guy is not 10 begin] if ((((GProperty(9, t_0,p31_level) > 0))) && (((~~((GProperty(9, t_0,p31_level) == 10)))))) { ! phrase 2 ! [2: unless the player is undead begin] if (~~(((player.p111_faction == I158_undead)))) { ! phrase 3 ! [3: say ~Absorbing a soul has fully healed you.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1660; ParaContent(); DivideParagraphPoint(); new_line; .L_Say1345; .L_SayX1262; ! phrase 4 ! [4: fully heal the player] (PHR_959_r182 (player)); ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: say ~Absorbing a soul has restored some of your health.[paragraph break]~] say__p=1;ParaContent(); print (PrintText) SC_1661; ParaContent(); DivideParagraphPoint(); new_line; .L_Say1346; .L_SayX1263; ! phrase 7 ! [7: let n be 8 times level of guy] t_1 = (8*GProperty(9, t_0,p31_level)) ; ! phrase 8 ! [8: heal the player for n health] (PHR_960_r28 (player,t_1)); ! phrase 9 ! [9: end unless] } ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if the level of guy is 10 begin] if (((GProperty(9, t_0,p31_level) == 10))) { ! phrase 12 ! [12: do the level 10 victory with guy] (PHR_2148_r214 (t_0)); ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 200: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To have ( guy - a person ) disappear: [ PHR_1162_r200 t_0 ! Call parameter 'guy' = person t_1 ! Local variable e.g. 'X' = object t_2 ! Local variable e.g. '?-1,-1?' = thing t_3 ! Local variable e.g. '?-1,-1?' = thing ; ! phrase 1 ! [1: let x be the holder of guy] t_1 = (HolderOf(t_0)) ; ! phrase 2 ! [2: unless x is nothing begin] if (~~(((t_1 == nothing)))) { ! phrase 3 ! [3: repeat with y running through things had by guy begin] for (t_2=Prop_444(,t_0,0), t_3=Prop_444(,t_0,t_2): t_2: t_2=t_3, t_3=Prop_444(,t_0,t_3)) { ! phrase 4 ! [4: move y to x] MoveObject(t_2, t_1, 0, false); ! phrase 5 ! [5: if y is a weapon begin] if (((t_2 ofclass K17_weapon))) { ! phrase 6 ! [6: now y is not readied] (Adj_103_t3_v9(t_2)); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: end repeat] } ! phrase 9 ! [9: end unless] } ! phrase 10 ! [10: remove guy from play] RemoveFromPlay(t_0); rfalse; ]; ! Request 201: phrase person -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To do achievement awarding for ( guy - a person ): [ PHR_1163_r201 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: if level of guy is 1 begin] if (((GProperty(9, t_0,p31_level) == 1))) { ! phrase 2 ! [2: award achievement assistant dungeoneer] (PHR_2161_r13 (I529_assistant_dungeoneer)); ! phrase 3 ! [3: end if] } ! phrase 4 ! [4: if level of guy is 2 begin] if (((GProperty(9, t_0,p31_level) == 2))) { ! phrase 5 ! [5: award achievement adventurer] (PHR_2161_r13 (I530_adventurer)); ! phrase 6 ! [6: end if] } ! phrase 7 ! [7: if level of guy is 3 begin] if (((GProperty(9, t_0,p31_level) == 3))) { ! phrase 8 ! [8: award achievement hunter] (PHR_2161_r13 (I531_hunter)); ! phrase 9 ! [9: end if] } ! phrase 10 ! [10: if level of guy is 4 begin] if (((GProperty(9, t_0,p31_level) == 4))) { ! phrase 11 ! [11: award achievement destroyer] (PHR_2161_r13 (I532_destroyer)); ! phrase 12 ! [12: end if] } rfalse; ]; ! Request 202: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether absorption is stopped: [ PHR_1165_r202 ; ! phrase 1 ! [1: consider the absorption stopping rules] ProcessRulebook(487); ! phrase 2 ! [2: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 3 ! [3: decide yes] rtrue; ! phrase 4 ! [4: otherwise] } else { ! phrase 5 ! [5: decide no] rfalse; ! phrase 6 ! [6: end if] } rfalse; ]; ! Request 203: phrase thing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To decide whether ( item - a thing ) corrodes: [ PHR_1252_r203 t_0 ! Call parameter 'item' = thing ; ! phrase 1 ! [1: now test object is item] (Global_Vars-->81) = t_0; ! phrase 2 ! [2: consider the corroding rules] ProcessRulebook(505); ! phrase 3 ! [3: if rule succeeded begin] if (( (RulebookSucceeded()) )) { ! phrase 4 ! [4: decide yes] rtrue; ! phrase 5 ! [5: otherwise] } else { ! phrase 6 ! [6: decide no] rfalse; ! phrase 7 ! [7: end if] } rfalse; ]; ! Request 204: phrase nothing -> nothing ! From "Kerkerkruip Systems" by Victor Gijsbers ! To unvampirise the player: [ PHR_1283_r204 ; ! phrase 1 ! [1: now the faction of the player is friendly] WriteGProperty(9, player,p111_faction,I91_friendly); ! phrase 2 ! [2: now player form of the player is human-form] WriteGProperty(9, player,p201_player_form,I181_human_form); rfalse; ]; ! Request 205: phrase nothing -> nothing ! From "Kerkerkruip Locations" by Victor Gijsbers ! To say phantasmagoria show: [ PHR_1553_r205 t_0 ! Local variable e.g. 'N' = number t_1 ! Local variable e.g. '?-1,-1?' = object ; ! phrase 1 ! [1: let n be a random number between 1 and 10] t_0 = R_DecimalNumber(1, 10) ; ! phrase 2 ! [2: if n is begin] switch(t_0) { ! phrase 3 ! [3: -- 1] 1: ! phrase 4 ! [4: say ~vast armies of skeletons clash while their masters pray for the help of forbidden deities~] say__p=1;ParaContent(); print (PrintText) SC_1662; .L_Say1347; .L_SayX1264; ! phrase 5 ! [5: -- 2] ; 2: ! phrase 6 ! [6: say ~a heavily muscled barbarian succumbing to the fiery breath of a dragon~] say__p=1;ParaContent(); print (PrintText) SC_1663; .L_Say1348; .L_SayX1265; ! phrase 7 ! [7: -- 3] ; 3: ! phrase 8 ! [8: say ~two naked [one of]male[or]female[purely at random] slaves fighting to the death for the pleasure of their reptile [one of]master[or]mistress[purely at random]~] say__p=1;ParaContent(); print (PrintText) SC_1664; ParaContent(); I7_ST_say_one_of-->17 = i7_soo_par(I7_ST_say_one_of-->17, 2); switch((I7_ST_say_one_of-->17)%(2+1)-1) { 0: ParaContent(); print (PrintText) SC_1665; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1666; ParaContent(); } ParaContent(); print (PrintText) SC_1667; ParaContent(); I7_ST_say_one_of-->18 = i7_soo_par(I7_ST_say_one_of-->18, 2); switch((I7_ST_say_one_of-->18)%(2+1)-1) { 0: ParaContent(); print (PrintText) SC_1668; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1669; ParaContent(); } .L_Say1349; .L_SayX1266; ! phrase 9 ! [9: -- 4] ; 4: ! phrase 10 ! [10: say ~fountains of fire erupting in the middle of a contingent of archers~] say__p=1;ParaContent(); print (PrintText) SC_1670; .L_Say1350; .L_SayX1267; ! phrase 11 ! [11: -- 5] ; 5: ! phrase 12 ! [12: say ~flaming bolts, fired by huge ballistae, flying right over your head~] say__p=1;ParaContent(); print (PrintText) SC_1671; .L_Say1351; .L_SayX1268; ! phrase 13 ! [13: -- 6] ; 6: ! phrase 14 ! [14: say ~several knights in plate armour struggling to reach the shores of a swamp, while the land retreats before them as if it were alive~] say__p=1;ParaContent(); print (PrintText) SC_1672; .L_Say1352; .L_SayX1269; ! phrase 15 ! [15: -- 7] ; 7: ! phrase 16 ! [16: say ~shrieking ghosts being whipped into a frenzy by a necromancer thousands of years old~] say__p=1;ParaContent(); print (PrintText) SC_1673; .L_Say1353; .L_SayX1270; ! phrase 17 ! [17: -- 8] ; 8: ! phrase 18 ! [18: say ~an elated thief running towards a huge pile of treasure, which then opens a maw and devours him~] say__p=1;ParaContent(); print (PrintText) SC_1674; .L_Say1354; .L_SayX1271; ! phrase 19 ! [19: -- 9] ; 9: ! phrase 20 ! [20: say ~a hopeful party of sixteen year old adventurers getting slaughtered by [no dead property][a random monster][dead property]~] say__p=1;ParaContent(); print (PrintText) SC_1675; ParaContent(); (PHR_828_r43 ());ParaContent(); print (a) (Prop_445()) ; ParaContent(); (PHR_829_r44 ()); .L_Say1355; .L_SayX1272; ! phrase 21 ! [21: -- 10] ; 10: ! phrase 22 ! [22: if at least one monster is not alive begin] if ((Prop_446())) { ! phrase 23 ! [23: let guy be a random not alive monster] t_1 = (Prop_447()) ; ! phrase 24 ! [24: say ~yourself fighting [no dead property][the guy][dead property]~] say__p=1;ParaContent(); print (PrintText) SC_1676; ParaContent(); (PHR_828_r43 ());ParaContent(); print (the) t_1; ParaContent(); (PHR_829_r44 ()); .L_Say1356; .L_SayX1273; ! phrase 25 ! [25: otherwise] } else { ! phrase 26 ! [26: say ~three bull-men getting eaten by a horrendous swamp monster~] say__p=1;ParaContent(); print (PrintText) SC_1677; .L_Say1357; .L_SayX1274; ! phrase 27 ! [27: end if] } ! phrase 28 ! [28: end if] } rfalse; ]; ! Request 206: phrase nothing -> nothing ! From "Kerkerkruip Locations" by Victor Gijsbers ! To do a random step: [ PHR_1653_r206 t_0 ! Local variable e.g. 'q' = number ; ! phrase 1 ! [1: let q be a random number between 1 and 6] t_0 = R_DecimalNumber(1, 6) ; ! phrase 2 ! [2: if q is 1 , increase considered-x by 1] if (((t_0 == 1))) { (Global_Vars-->52) = (Global_Vars-->52) + 1; } ! phrase 3 ! [3: if q is 2 , decrease considered-x by 1] if (((t_0 == 2))) { (Global_Vars-->52) = (Global_Vars-->52) - 1; } ! phrase 4 ! [4: if q is 3 , increase considered-y by 1] if (((t_0 == 3))) { (Global_Vars-->53) = (Global_Vars-->53) + 1; } ! phrase 5 ! [5: if q is 4 , decrease considered-y by 1] if (((t_0 == 4))) { (Global_Vars-->53) = (Global_Vars-->53) - 1; } ! phrase 6 ! [6: if q is 5 , increase considered-z by 1] if (((t_0 == 5))) { (Global_Vars-->54) = (Global_Vars-->54) + 1; } ! phrase 7 ! [7: if q is 6 , decrease considered-z by 1] if (((t_0 == 6))) { (Global_Vars-->54) = (Global_Vars-->54) - 1; } rfalse; ]; ! Request 207: phrase nothing -> nothing ! From "Kerkerkruip Scenery" by Victor Gijsbers ! To fill the Table of Suitable Rooms for extra: [ PHR_1666_r207 t_0 ! Local variable e.g. '?-1,-1?' = room t_1 ! Local variable e.g. '?-1,-1?' = room ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: blank out the whole of the table of suitable rooms] TableBlankOutAll(T13_suitable_rooms); ! phrase 2 ! [2: repeat with place running through extra-accepting placed rooms begin] for (t_0=Prop_448(0), t_1=Prop_448(t_0): t_0: t_0=t_1, t_1=Prop_448(t_1)) { ! phrase 3 ! [3: now considered room is place] (Global_Vars-->50) = t_0; ! phrase 4 ! [4: choose a blank row in the table of suitable rooms] ct_0 = T13_suitable_rooms; ct_1 = TableBlankRow(ct_0); ! phrase 5 ! [5: now the candidate entry is place] TableLookUpEntry(ct_0,126,ct_1,1,t_0); ! phrase 6 ! [6: now the room score entry is 0] TableLookUpEntry(ct_0,127,ct_1,1,0); ! phrase 7 ! [7: end repeat] } rfalse; ]; ! Request 208: phrase nothing -> nothing ! From "Kerkerkruip Scenery" by Victor Gijsbers ! To score the suitable rooms for extra: [ PHR_1667_r208 t_0 ! Local variable e.g. '?-1,-1?' = number t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: repeat through the table of suitable rooms begin] @push ct_0; @push ct_1; for (t_0=T13_suitable_rooms,t_1=1,ct_0=t_0,ct_1=t_1: t_1<=TableRows(t_0):t_1++,ct_0=t_0,ct_1=t_1) if (TableRowIsBlank(ct_0,ct_1)==false) { ! phrase 2 ! [2: now considered room is the candidate entry] (Global_Vars-->50) = TableLookUpEntry(ct_0,126,ct_1); if (~~((Global_Vars-->50) ofclass K1_room)) RunTimeProblem(RTP_WRONGASSIGNEDKIND, (Global_Vars-->50), "now considered room is the Candidate entry", "room");; ! phrase 3 ! [3: now current room score is 0] (Global_Vars-->55) = 0; ! phrase 4 ! [4: consider the extra scoring rules] ProcessRulebook(538); ! phrase 5 ! [5: now the room score entry is current room score] TableLookUpEntry(ct_0,127,ct_1,1,(Global_Vars-->55)); ! phrase 6 ! [6: end repeat] } @pull ct_1; @pull ct_0; rfalse; ]; ! Request 209: phrase nothing -> nothing ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! To say powers of the player: [ PHR_2124_r209 t_0 ! Local variable e.g. 'n' = number t_1 ! Local variable e.g. '?-1,-1?' = power t_2 ! Local variable e.g. '?-1,-1?' = power ; ! phrase 1 ! [1: let n be 0] t_0 = 0; ! phrase 2 ! [2: repeat with stuff running through powers begin] for (t_1=Prop_449(0), t_2=Prop_449(t_1): t_1: t_1=t_2, t_2=Prop_449(t_2)) { ! phrase 3 ! [3: if stuff is granted begin] if ((((Adj_158_t1_v9(t_1))))) { ! phrase 4 ! [4: unless command text of stuff is ~~ begin] if (~~(((GProperty(9, t_1,p39_command_text) == EMPTY_TEXT_VALUE)))) { ! phrase 5 ! [5: say ~[if n is 1], [end if][command text of stuff][run paragraph on]~] say__p=1; if (~~((((t_0 == 1))))) jump L_Say1358; ParaContent(); print (PrintText) SC_592; .L_Say1358; .L_SayX1275; ParaContent(); @push self; print (PrintText) GProperty(9, self=t_1,p39_command_text); @pull self; ParaContent(); RunParagraphOn(); .L_Say1359; .L_SayX1276; ! phrase 6 ! [6: now n is 1] t_0 = 1; ! phrase 7 ! [7: end unless] } ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: end repeat] } ! phrase 10 ! [10: if n is 0 begin] if (((t_0 == 0))) { ! phrase 11 ! [11: say ~none~] say__p=1;ParaContent(); print (PrintText) SC_444; .L_Say1360; .L_SayX1277; ! phrase 12 ! [12: end if] } rfalse; ]; ! Request 210: phrase nothing -> nothing ! From "Kerkerkruip Actions and UI" by Victor Gijsbers ! To say act no time: [ PHR_2127_r210 ; ! phrase 1 ! [1: take no time] (PHR_853_r33 ()); rfalse; ]; ! Request 211: phrase person -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To buff ( guy - a person ): [ PHR_2139_r211 t_0 ! Call parameter 'guy' = person t_1 ! Local variable e.g. 'm' = number ; ! phrase 1 ! [1: let m be a random number between 1 and 5] t_1 = R_DecimalNumber(1, 5) ; ! phrase 2 ! [2: if m is 1 begin] if (((t_1 == 1))) { ! phrase 3 ! [3: increase melee of guy by 1] WriteGProperty(9, t_0,p18_melee,GProperty(9, t_0,p18_melee) + 1); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if m is 2 begin] if (((t_1 == 2))) { ! phrase 6 ! [6: increase defence of guy by 1] WriteGProperty(9, t_0,p19_defence,GProperty(9, t_0,p19_defence) + 1); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if m is 3 begin] if (((t_1 == 3))) { ! phrase 9 ! [9: increase dexterity of guy by 1] WriteGProperty(9, t_0,p34_dexterity,GProperty(9, t_0,p34_dexterity) + 1); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if m is 4 begin] if (((t_1 == 4))) { ! phrase 12 ! [12: increase willpower of guy by 1] WriteGProperty(9, t_0,p35_willpower,GProperty(9, t_0,p35_willpower) + 1); ! phrase 13 ! [13: end if] } ! phrase 14 ! [14: if m is 5 begin] if (((t_1 == 5))) { ! phrase 15 ! [15: increase perception of guy by 1] WriteGProperty(9, t_0,p33_perception,GProperty(9, t_0,p33_perception) + 1); ! phrase 16 ! [16: end if] } rfalse; ]; ! Request 212: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To give the player a stat bonus: [ PHR_2141_r212 t_0 ! Local variable e.g. 'i' = number ; ! phrase 1 ! [1: let i be a random number between 1 and 4] t_0 = R_DecimalNumber(1, 4) ; ! phrase 2 ! [2: if i is 1 begin] if (((t_0 == 1))) { ! phrase 3 ! [3: increase permanent health of the player by 1] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) + 1); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if i is 2 begin] if (((t_0 == 2))) { ! phrase 6 ! [6: increase perception of the player by 1] WriteGProperty(9, player,p33_perception,GProperty(9, player,p33_perception) + 1); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if i is 3 begin] if (((t_0 == 3))) { ! phrase 9 ! [9: increase dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) + 1); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if i is 4 begin] if (((t_0 == 4))) { ! phrase 12 ! [12: increase willpower of the player by 1] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) + 1); ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 213: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To give the player a stat penalty: [ PHR_2142_r213 t_0 ! Local variable e.g. 'i' = number ; ! phrase 1 ! [1: let i be a random number between 1 and 4] t_0 = R_DecimalNumber(1, 4) ; ! phrase 2 ! [2: if i is 1 begin] if (((t_0 == 1))) { ! phrase 3 ! [3: decrease permanent health of the player by 1] WriteGProperty(9, player,p17_permanent_health,GProperty(9, player,p17_permanent_health) - 1); ! phrase 4 ! [4: end if] } ! phrase 5 ! [5: if i is 2 begin] if (((t_0 == 2))) { ! phrase 6 ! [6: decrease perception of the player by 1] WriteGProperty(9, player,p33_perception,GProperty(9, player,p33_perception) - 1); ! phrase 7 ! [7: end if] } ! phrase 8 ! [8: if i is 3 begin] if (((t_0 == 3))) { ! phrase 9 ! [9: decrease dexterity of the player by 1] WriteGProperty(9, player,p34_dexterity,GProperty(9, player,p34_dexterity) - 1); ! phrase 10 ! [10: end if] } ! phrase 11 ! [11: if i is 4 begin] if (((t_0 == 4))) { ! phrase 12 ! [12: decrease willpower of the player by 1] WriteGProperty(9, player,p35_willpower,GProperty(9, player,p35_willpower) - 1); ! phrase 13 ! [13: end if] } rfalse; ]; ! Request 214: phrase person -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To do the level 10 victory with ( guy - a person ): [ PHR_2148_r214 t_0 ! Call parameter 'guy' = person ; ! phrase 1 ! [1: say ~In slaying [the guy], you have done the impossible. You absorb its soul, and though this process leaves little of your own personality intact, your powers increase a thousandfold. Even the gods bow to you.~] say__p=1;ParaContent(); print (PrintText) SC_1678; ParaContent(); print (the) t_0; ParaContent(); print (PrintText) SC_1679; new_line; .L_Say1361; .L_SayX1278; ! phrase 2 ! [2: end the story saying ~You reign eternally!~] deadflag=SC_1680; story_complete=false; rfalse; ]; ! Request 215: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To say system requirements text: [ PHR_2156_r215 ; ! phrase 1 ! [1: say ~[italic type]Kerkerkruip[roman type] is a much more computation intensive game than the average piece of interactive fiction. Both the random dungeon generation at the beginning of the game and the different systems that run every turn take some computing power. While [italic type]Kerkerkruip[roman type] runs well on all reasonably recent computers, including netbooks and even tablets and some phones, older hardware and smaller devices may not be able to run it.[paragraph break]If [italic type]Kerkerkruip[roman type] turns out to be too slow for your computer, there are a few things you can try. First, closing some other programs may help. Second, using another interpreter can make a difference: for instance, currently [italic type]Gargoyle[roman type] runs the game faster than [italic type]Spatterlight[roman type] and [italic type]Filfre[roman type] (but that may have changed when you read this). Using a mobile interpreter like [italic type]Glulxe[roman type] is not recommended! If neither of these strategies work, your device is not powerful enough to run [italic type]Kerkerkruip[roman type]. My apologies.~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1681; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1682; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1683; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1684; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1685; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1686; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1687; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1113; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1688; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1689; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1690; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1691; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1692; new_line; .L_Say1362; .L_SayX1279; rfalse; ]; ! Request 216: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To say credits text: [ PHR_2157_r216 ; ! phrase 1 ! [1: say ~Most of all, I would like to thank my alpha- and beta-testers: Matt Weiner, Michael Fransioli, Erik Temple, Michiel Hermes, Lance Camelot, Wasse Asmlash, Vyacheslav Dobranov, Dannii Willis, Captain Mikee, and Bora Bosna. (If I have forgotten you, let me know!) Any piece of interactive fiction needs testers, but one as complicated as [italic type]Kerkerkruip[roman type] doubly so.[paragraph break]I would also like to thank the makers of Inform 7, everyone whose extensions I have used or misused, and everyone who has helped me on the forums and the newsgroups -- there are a lot of you, and you may know who you are. Andrew Plotkin has answered perhaps more of my technical questions than anyone else, so a special thanks to him.[paragraph break]Thanks also to Captain Orange for allowing me to use his photo for the cover image.[paragraph break]This game has been inspired by many works of interactive fiction, computer roleplaying games and roguelikes. I want to single out [italic type]Desktop Dungeons[roman type] for special mention, since it was that game that gave me the idea of making a 'coffee break' roguelike -- finally a project I could finish! Apart from the fact that a roguelike is never finished, of course.~] say__p=1;ParaContent(); print (PrintText) SC_1693; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1694; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1695; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1696; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1697; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1698; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1699; new_line; .L_Say1363; .L_SayX1280; rfalse; ]; ! Request 217: phrase nothing -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To say copyright text: [ PHR_2158_r217 ; ! phrase 1 ! [1: say ~[italic type]Kerkerkruip[roman type] is copyright 2011 by Victor Gijsbers. It is released under the GPL version 3 or any later version; source code should be found wherever you found this game. (If you make a modified version, please do not call it [italic type]Kerkerkruip[roman type]; minor variations on that name are fine.) The extensions used are copyright by their respective authors; some of them were released under the Creative Commons Attribution license. The cover image is a photo by Captain Orange, modified by Victor Gijsbers. It is used with permission for this game, but should not be used for other games. (Unless you get permission yourself.)[paragraph break]You can contact me with comments, bug reports, and anything else at victor@@64lilith.cc.~] say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1700; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1701; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1702; new_line; .L_Say1364; .L_SayX1281; rfalse; ]; ! Request 218: phrase achievement -> nothing ! From "Kerkerkruip Start and Finish" by Victor Gijsbers ! To say achievement ( current achievement - an achievement ): [ PHR_2160_r218 t_0 ! Call parameter 'current achievement' = achievement t_1 ! Local variable e.g. '?-1,-1?' = number ct_0 ct_1 ! Used for table searches ; ! phrase 1 ! [1: if there is a held achievement of current achievement in the table of held achievements begin] if (( (ExistsTableLookUpCorr(T26_held_achievements,150,150,t_0)) )) { ! phrase 2 ! [2: choose row with a held achievement of current achievement in the table of held achievements] ct_0 = T26_held_achievements; ct_1 = TableRowCorr(ct_0, 150, t_0); ! phrase 3 ! [3: let m be held difficulty entry] t_1 = TableLookUpEntry(ct_0,151,ct_1); ! phrase 4 ! [4: if m is -1 begin] if (((t_1 == -1))) { ! phrase 5 ! [5: say ~ -- not yet achieved~] say__p=1;ParaContent(); print (PrintText) SC_1703; .L_Say1365; .L_SayX1282; ! phrase 6 ! [6: otherwise] } else { ! phrase 7 ! [7: say ~ -- achieved on [difficulty level m] ([m])~] say__p=1;ParaContent(); print (PrintText) SC_1704; ParaContent(); (PHR_2153_r7 (t_1));ParaContent(); print (PrintText) SC_893; ParaContent(); print (say__n=t_1); ParaContent(); print (PrintText) SC_275; .L_Say1366; .L_SayX1283; ! phrase 8 ! [8: end if] } ! phrase 9 ! [9: otherwise] } else { ! phrase 10 ! [10: say ~ -- not yet achieved~] say__p=1;ParaContent(); print (PrintText) SC_1703; .L_Say1367; .L_SayX1284; ! phrase 11 ! [11: end if] } rfalse; ]; [ text_routine_0; say__p=1;ParaContent(); print (PrintText) SC_1705; ParaContent(); RunParagraphOn(); .L_Say1368; .L_SayX1285; rtrue; ]; [ text_routine_1; say__p=1;ParaContent(); print (PrintText) SC_1706; if (~~(((Prop_450())))) jump L_Say1369; ParaContent(); print (PrintText) SC_1707; .L_Say1369; .L_SayX1286; ParaContent(); print (PrintText) SC_1708; if (~~(((Prop_451())))) jump L_Say1370; ParaContent(); print (PrintText) SC_1709; .L_Say1370; .L_SayX1287; ParaContent(); print (PrintText) SC_1710; .L_Say1371; .L_SayX1288; rtrue; ]; [ text_routine_2; say__p=1;ParaContent(); print (PrintText) SC_1711; if (~~(((((Global_Vars-->96) == 0))))) jump L_Say1372; ParaContent(); print (PrintText) SC_1712; .L_Say1372; .L_SayX1289; ParaContent(); print (PrintText) SC_310; .L_Say1373; .L_SayX1290; rtrue; ]; [ text_routine_3; say__p=1;ParaContent(); print (PrintText) SC_1713; ParaContent(); I7_ST_say_one_of-->19 = i7_soo_sti(I7_ST_say_one_of-->19, 3); switch((I7_ST_say_one_of-->19)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_1714; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1715; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1716; ParaContent(); } ParaContent(); print (PrintText) SC_1717; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1718; ParaContent(); style roman; .L_Say1374; .L_SayX1291; rtrue; ]; [ text_routine_4; say__p=1;ParaContent(); print (PrintText) SC_1719; ParaContent(); I7_ST_say_one_of-->20 = i7_soo_sti(I7_ST_say_one_of-->20, 2); switch((I7_ST_say_one_of-->20)%(2+1)-1) { 0: ParaContent(); print (PrintText) SC_1720; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1721; ParaContent(); } ParaContent(); print (PrintText) SC_1717; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1722; ParaContent(); style roman; .L_Say1375; .L_SayX1292; rtrue; ]; [ text_routine_5; say__p=1;ParaContent(); print (PrintText) SC_1723; ParaContent(); I7_ST_say_one_of-->21 = i7_soo_sti(I7_ST_say_one_of-->21, 2); switch((I7_ST_say_one_of-->21)%(2+1)-1) { 0: ParaContent(); print (PrintText) SC_1724; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1725; ParaContent(); } ParaContent(); print (PrintText) SC_1717; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1726; ParaContent(); style roman; .L_Say1376; .L_SayX1293; rtrue; ]; [ text_routine_6; say__p=1;ParaContent(); print (PrintText) SC_1727; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1728; ParaContent(); style roman; .L_Say1377; .L_SayX1294; rtrue; ]; [ text_routine_7; say__p=1;ParaContent(); print (PrintText) SC_1729; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1730; ParaContent(); style roman; .L_Say1378; .L_SayX1295; rtrue; ]; [ text_routine_8; say__p=1;ParaContent(); print (PrintText) SC_1731; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1732; ParaContent(); style roman; .L_Say1379; .L_SayX1296; rtrue; ]; [ text_routine_9; say__p=1;ParaContent(); print (PrintText) SC_1733; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1734; ParaContent(); style roman; .L_Say1380; .L_SayX1297; rtrue; ]; [ text_routine_10; say__p=1;ParaContent(); print (PrintText) SC_1735; ParaContent(); RunParagraphOn(); .L_Say1381; .L_SayX1298; rtrue; ]; [ text_routine_11; say__p=1;ParaContent(); print (PrintText) SC_1736; ParaContent(); RunParagraphOn(); .L_Say1382; .L_SayX1299; rtrue; ]; [ text_routine_12; say__p=1;ParaContent(); print (PrintText) SC_1737; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1738; ParaContent(); style roman; .L_Say1383; .L_SayX1300; rtrue; ]; [ text_routine_13; say__p=1;ParaContent(); print (PrintText) SC_1739; ParaContent(); style bold; ParaContent(); print (PrintText) SC_1740; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1741; .L_Say1384; .L_SayX1301; rtrue; ]; [ text_routine_14; say__p=1;ParaContent(); print (PrintText) SC_1742; ParaContent(); RunParagraphOn(); .L_Say1385; .L_SayX1302; rtrue; ]; [ text_routine_15; say__p=1;ParaContent(); print (PrintText) SC_1743; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1744; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1745; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1746; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1747; .L_Say1386; .L_SayX1303; rtrue; ]; [ text_routine_16; say__p=1;ParaContent(); print (PrintText) SC_1748; ParaContent(); @push self; print (PrintText) GProperty(50, self=(Global_Vars-->94),p176_material_adjective); @pull self; ParaContent(); print (PrintText) SC_1749; ParaContent(); print (T70) (Global_Vars-->95); ParaContent(); print (PrintText) SC_310; .L_Say1387; .L_SayX1304; rtrue; ]; [ text_routine_17; say__p=1; if (~~(((((PHR_1164_r109 ()) == 0))))) jump L_Say1388; ParaContent(); print (PrintText) SC_1750; ParaContent(); jump L_SayX1305; .L_Say1388; if (~~(((((PHR_1164_r109 ()) == 1))))) jump L_Say1389; ParaContent(); print (PrintText) SC_1751; ParaContent(); jump L_SayX1305; .L_Say1389; if (~~(((((PHR_1164_r109 ()) == 2))))) jump L_Say1390; ParaContent(); print (PrintText) SC_1752; ParaContent(); jump L_SayX1305; .L_Say1390; if (~~(((((PHR_1164_r109 ()) == 3))))) jump L_Say1391; ParaContent(); print (PrintText) SC_1753; ParaContent(); jump L_SayX1305; .L_Say1391; if (~~(((((PHR_1164_r109 ()) == 4))))) jump L_Say1392; ParaContent(); print (PrintText) SC_1754; .L_Say1392; .L_SayX1305; ParaContent(); print (PrintText) SC_310; .L_Say1393; .L_SayX1306; rtrue; ]; [ text_routine_18; say__p=1;ParaContent(); print (PrintText) SC_1755; ParaContent(); RunParagraphOn(); if ((((PHR_1169_r17 (player))))) jump L_Say1394; ParaContent(); print (PrintText) SC_1756; .L_Say1394; .L_SayX1307; ParaContent(); print (PrintText) SC_310; .L_Say1395; .L_SayX1308; rtrue; ]; [ text_routine_19; say__p=1;ParaContent(); print (PrintText) SC_1757; ParaContent(); RunParagraphOn(); if ((((PHR_1169_r17 (player))))) jump L_Say1396; ParaContent(); print (PrintText) SC_1758; ParaContent(); (PHR_1553_r205 ());ParaContent(); print (PrintText) SC_1759; ParaContent(); RunParagraphOn(); .L_Say1396; .L_SayX1309; .L_Say1397; .L_SayX1310; rtrue; ]; [ text_routine_20; say__p=1;ParaContent(); print (PrintText) SC_1760; ParaContent(); (PHR_1553_r205 ());ParaContent(); print (PrintText) SC_310; .L_Say1398; .L_SayX1311; rtrue; ]; [ text_routine_21; say__p=1;ParaContent(); print (PrintText) SC_1761; if (~~((((I391_temple_of_sul == ContainerOf(I392_statue_of_sul)))))) jump L_Say1399; ParaContent(); print (PrintText) SC_1762; jump L_SayX1312; .L_Say1399; ParaContent(); print (PrintText) SC_1763; .L_Say1400; .L_SayX1312; ParaContent(); print (PrintText) SC_310; .L_Say1401; .L_SayX1313; rtrue; ]; [ text_routine_22; say__p=1;ParaContent(); print (PrintText) SC_1764; if (~~(((((Adj_77_t1_v9(I398_sarcophagus))))))) jump L_Say1402; ParaContent(); print (PrintText) SC_1765; jump L_SayX1314; .L_Say1402; ParaContent(); print (PrintText) SC_1766; .L_Say1403; .L_SayX1314; ParaContent(); print (PrintText) SC_310; .L_Say1404; .L_SayX1315; rtrue; ]; [ text_routine_23; say__p=1;ParaContent(); print (PrintText) SC_1767; if (~~((((PHR_1612_r85 ()))))) jump L_Say1405; ParaContent(); print (PrintText) SC_1768; .L_Say1405; .L_SayX1316; ParaContent(); print (PrintText) SC_310; .L_Say1406; .L_SayX1317; rtrue; ]; [ text_routine_24; say__p=1;ParaContent(); print (PrintText) SC_1769; if (~~((((((Global_Vars-->111) && true) == (1 && true)))))) jump L_Say1407; ParaContent(); print (PrintText) SC_1770; jump L_SayX1318; .L_Say1407; ParaContent(); print (PrintText) SC_1771; .L_Say1408; .L_SayX1318; ParaContent(); print (PrintText) SC_1772; .L_Say1409; .L_SayX1319; rtrue; ]; [ text_routine_25; say__p=1;ParaContent(); print (PrintText) SC_1565; if (~~((((I410_portal_room == ContainerOf(I411_huge_magical_portal)))))) jump L_Say1410; ParaContent(); print (PrintText) SC_1773; jump L_SayX1320; .L_Say1410; ParaContent(); print (PrintText) SC_1774; .L_Say1411; .L_SayX1320; ParaContent(); print (PrintText) SC_1775; .L_Say1412; .L_SayX1321; rtrue; ]; [ text_routine_26; say__p=1;ParaContent(); print (PrintText) SC_1776; if (~~(((((Global_Vars-->112) > 0))))) jump L_Say1413; ParaContent(); print (PrintText) SC_1777; jump L_SayX1322; .L_Say1413; ParaContent(); print (PrintText) SC_1778; .L_Say1414; .L_SayX1322; ParaContent(); print (PrintText) SC_310; .L_Say1415; .L_SayX1323; rtrue; ]; [ text_routine_27; say__p=1;ParaContent(); print (PrintText) SC_1779; if (~~((((((Global_Vars-->116) && true) == (0 && true)))))) jump L_Say1416; ParaContent(); print (PrintText) SC_1780; .L_Say1416; .L_SayX1324; ParaContent(); print (PrintText) SC_1781; .L_Say1417; .L_SayX1325; rtrue; ]; [ text_routine_28; say__p=1;ParaContent(); print (PrintText) SC_1782; if (~~(((((Adj_153_t1_v9(I439_blood_ape))))))) jump L_Say1418; ParaContent(); print (PrintText) SC_1783; ParaContent(); jump L_SayX1326; .L_Say1418; if (~~(((((Adj_154_t1_v9(I439_blood_ape))))))) jump L_Say1419; ParaContent(); print (PrintText) SC_1784; ParaContent(); jump L_SayX1326; .L_Say1419; if (~~(((((Adj_155_t1_v9(I439_blood_ape))))))) jump L_Say1420; ParaContent(); print (PrintText) SC_1785; ParaContent(); jump L_SayX1326; .L_Say1420; if (~~(((((Adj_156_t1_v9(I439_blood_ape))))))) jump L_Say1421; ParaContent(); print (PrintText) SC_1786; ParaContent(); jump L_SayX1326; .L_Say1421; if (~~(((((Adj_157_t1_v9(I439_blood_ape))))))) jump L_Say1422; ParaContent(); print (PrintText) SC_1787; .L_Say1422; .L_SayX1326; ParaContent(); print (PrintText) SC_310; .L_Say1423; .L_SayX1327; rtrue; ]; [ text_routine_29; say__p=1;ParaContent(); print (PrintText) SC_324; if (~~((((~~((GProperty(9, I439_blood_ape,p154_size) == I153_medium))))))) jump L_Say1424; ParaContent(); @push self; print (T68) GProperty(9, self=I439_blood_ape,p154_size); @pull self; ParaContent(); print (PrintText) SC_209; .L_Say1424; .L_SayX1328; ParaContent(); print (PrintText) SC_1788; if (~~((((~~(((Adj_221_t1_v9(player))))))))) jump L_Say1425; ParaContent(); I7_ST_say_one_of-->22 = i7_soo_ran(I7_ST_say_one_of-->22, 3); switch((I7_ST_say_one_of-->22)%(3+1)-1) { 0: ParaContent(); print (PrintText) SC_1789; ParaContent(); @nop; 1: ParaContent(); print (PrintText) SC_1790; ParaContent(); @nop; 2: ParaContent(); print (PrintText) SC_1791; ParaContent(); } jump L_SayX1329; .L_Say1425; ParaContent(); print (PrintText) SC_1792; .L_Say1426; .L_SayX1329; ParaContent(); print (PrintText) SC_310; .L_Say1427; .L_SayX1330; rtrue; ]; [ text_routine_30; say__p=1;ParaContent(); print (PrintText) SC_1793; ParaContent(); print (say__n=(Global_Vars-->119)); ParaContent(); print (PrintText) SC_698; .L_Say1428; .L_SayX1331; rtrue; ]; [ text_routine_31; say__p=1;ParaContent(); print (PrintText) SC_1794; if (~~((((~~((GProperty(9, I451_chain_golem,p26_concentration) == 0))))))) jump L_Say1429; ParaContent(); print (PrintText) SC_1795; .L_Say1429; .L_SayX1332; if (~~((((GProperty(9, I451_chain_golem,p26_concentration) == 1))))) jump L_Say1430; ParaContent(); print (PrintText) SC_1796; ParaContent(); jump L_SayX1333; .L_Say1430; if (~~((((GProperty(9, I451_chain_golem,p26_concentration) == 2))))) jump L_Say1431; ParaContent(); print (PrintText) SC_1797; ParaContent(); jump L_SayX1333; .L_Say1431; if (~~((((GProperty(9, I451_chain_golem,p26_concentration) == 3))))) jump L_Say1432; ParaContent(); print (PrintText) SC_1798; .L_Say1432; .L_SayX1333; ParaContent(); print (PrintText) SC_310; .L_Say1433; .L_SayX1334; rtrue; ]; [ text_routine_32; say__p=1;ParaContent(); print (PrintText) SC_1799; if (~~((((GProperty(9, I454_jumping_bomb,p26_concentration) == 0))))) jump L_Say1434; ParaContent(); print (PrintText) SC_1800; ParaContent(); jump L_SayX1335; .L_Say1434; if (~~((((GProperty(9, I454_jumping_bomb,p26_concentration) == 1))))) jump L_Say1435; ParaContent(); print (PrintText) SC_1796; ParaContent(); jump L_SayX1335; .L_Say1435; if (~~((((GProperty(9, I454_jumping_bomb,p26_concentration) == 2))))) jump L_Say1436; ParaContent(); print (PrintText) SC_1801; ParaContent(); jump L_SayX1335; .L_Say1436; if (~~((((GProperty(9, I454_jumping_bomb,p26_concentration) == 3))))) jump L_Say1437; ParaContent(); print (PrintText) SC_1802; .L_Say1437; .L_SayX1335; ParaContent(); print (PrintText) SC_1803; if ((((GProperty(9, I454_jumping_bomb,p26_concentration) == 3)))) jump L_Say1438; ParaContent(); print (PrintText) SC_1804; .L_Say1438; .L_SayX1336; ParaContent(); print (PrintText) SC_1805; .L_Say1439; .L_SayX1337; rtrue; ]; [ text_routine_33; say__p=1;ParaContent(); print (PrintText) SC_1806; if (~~(((Prop_452())))) jump L_Say1440; ParaContent(); print (PrintText) SC_1807; .L_Say1440; .L_SayX1338; ParaContent(); print (PrintText) SC_1808; .L_Say1441; .L_SayX1339; rtrue; ]; [ text_routine_34; say__p=1;ParaContent(); print (PrintText) SC_1809; ParaContent(); RunParagraphOn(); .L_Say1442; .L_SayX1340; rtrue; ]; [ text_routine_35; say__p=1;ParaContent(); print (PrintText) SC_1810; ParaContent(); RunParagraphOn(); .L_Say1443; .L_SayX1341; rtrue; ]; [ text_routine_36; say__p=1;ParaContent(); print (PrintText) SC_1811; if (~~(((((Adj_273_t1_v9(I488_bodmall))))))) jump L_Say1444; ParaContent(); print (PrintText) SC_1812; jump L_SayX1342; .L_Say1444; ParaContent(); print (PrintText) SC_1813; .L_Say1445; .L_SayX1342; ParaContent(); print (PrintText) SC_310; .L_Say1446; .L_SayX1343; rtrue; ]; [ text_routine_37; say__p=1;ParaContent(); print (PrintText) SC_1814; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1815; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; .L_Say1447; .L_SayX1344; rtrue; ]; [ text_routine_38; say__p=1;ParaContent(); print (PrintText) SC_1816; ParaContent(); RunParagraphOn(); .L_Say1448; .L_SayX1345; rtrue; ]; [ text_routine_39; say__p=1;ParaContent(); print (PrintText) SC_1817; if (((((PHR_2006_r81 ()) == 5)))) jump L_Say1449; ParaContent(); print (PrintText) SC_616; .L_Say1449; .L_SayX1346; ParaContent(); print (PrintText) SC_209; if (~~((((~~((I501_rotting_corpse == (I508_rotting_head.component_parent)))))))) jump L_Say1450; ParaContent(); print (PrintText) SC_1818; .L_Say1450; .L_SayX1347; if (~~(((((PHR_2007_r65 ()) == 1))))) jump L_Say1451; ParaContent(); print (PrintText) SC_1819; .L_Say1451; .L_SayX1348; if (~~(((((PHR_2007_r65 ()) == 0))))) jump L_Say1452; ParaContent(); print (PrintText) SC_1820; .L_Say1452; .L_SayX1349; if (~~(((((PHR_2008_r66 ()) == 1))))) jump L_Say1453; ParaContent(); print (PrintText) SC_1821; .L_Say1453; .L_SayX1350; if (~~(((((PHR_2008_r66 ()) == 0))))) jump L_Say1454; ParaContent(); print (PrintText) SC_1822; .L_Say1454; .L_SayX1351; ParaContent(); print (PrintText) SC_1823; .L_Say1455; .L_SayX1352; rtrue; ]; [ text_routine_40; say__p=1;ParaContent(); print (PrintText) SC_1824; if (~~((((I501_rotting_corpse == (I504_rotting_left_leg.component_parent)))))) jump L_Say1456; ParaContent(); print (PrintText) SC_1825; jump L_SayX1353; .L_Say1456; ParaContent(); print (PrintText) SC_1826; .L_Say1457; .L_SayX1353; ParaContent(); print (PrintText) SC_1827; .L_Say1458; .L_SayX1354; rtrue; ]; [ text_routine_41; say__p=1;ParaContent(); print (PrintText) SC_1824; if (~~((((I501_rotting_corpse == (I505_rotting_right_leg.component_parent)))))) jump L_Say1459; ParaContent(); print (PrintText) SC_1825; jump L_SayX1355; .L_Say1459; ParaContent(); print (PrintText) SC_1826; .L_Say1460; .L_SayX1355; ParaContent(); print (PrintText) SC_1827; .L_Say1461; .L_SayX1356; rtrue; ]; [ text_routine_42; say__p=1;ParaContent(); print (PrintText) SC_1824; if (~~((((I501_rotting_corpse == (I506_rotting_left_arm.component_parent)))))) jump L_Say1462; ParaContent(); print (PrintText) SC_1825; jump L_SayX1357; .L_Say1462; ParaContent(); print (PrintText) SC_1826; .L_Say1463; .L_SayX1357; ParaContent(); print (PrintText) SC_1827; .L_Say1464; .L_SayX1358; rtrue; ]; [ text_routine_43; say__p=1;ParaContent(); print (PrintText) SC_1824; if (~~((((I501_rotting_corpse == (I507_rotting_right_arm.component_parent)))))) jump L_Say1465; ParaContent(); print (PrintText) SC_1825; jump L_SayX1359; .L_Say1465; ParaContent(); print (PrintText) SC_1826; .L_Say1466; .L_SayX1359; ParaContent(); print (PrintText) SC_1827; .L_Say1467; .L_SayX1360; rtrue; ]; [ text_routine_44; say__p=1;ParaContent(); print (PrintText) SC_1824; if (~~((((I501_rotting_corpse == (I508_rotting_head.component_parent)))))) jump L_Say1468; ParaContent(); print (PrintText) SC_1825; jump L_SayX1361; .L_Say1468; ParaContent(); print (PrintText) SC_1826; .L_Say1469; .L_SayX1361; ParaContent(); print (PrintText) SC_1827; .L_Say1470; .L_SayX1362; rtrue; ]; [ text_routine_45; say__p=1;ParaContent(); print (PrintText) SC_1828; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))))) jump L_Say1471; ParaContent(); print (PrintText) SC_1829; ParaContent(); jump L_SayX1363; .L_Say1471; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))))) jump L_Say1472; ParaContent(); print (PrintText) SC_1830; jump L_SayX1363; .L_Say1472; ParaContent(); print (PrintText) SC_1831; .L_Say1473; .L_SayX1363; ParaContent(); print (PrintText) SC_310; .L_Say1474; .L_SayX1364; rtrue; ]; [ text_routine_46; say__p=1;ParaContent(); print (PrintText) SC_1832; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))))) jump L_Say1475; ParaContent(); print (PrintText) SC_1833; ParaContent(); jump L_SayX1365; .L_Say1475; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))))) jump L_Say1476; ParaContent(); print (PrintText) SC_1834; jump L_SayX1365; .L_Say1476; ParaContent(); print (PrintText) SC_1835; .L_Say1477; .L_SayX1365; ParaContent(); print (PrintText) SC_310; .L_Say1478; .L_SayX1366; rtrue; ]; [ text_routine_47; say__p=1;ParaContent(); print (PrintText) SC_1836; ParaContent(); @push self; print (T68) GProperty(9, self=I515_abyss_of_the_soul,p154_size); @pull self; ParaContent(); print (PrintText) SC_1837; .L_Say1479; .L_SayX1367; rtrue; ]; [ text_routine_48; say__p=1;ParaContent(); print (PrintText) SC_1838; ParaContent(); @push self; print (T68) GProperty(9, self=I515_abyss_of_the_soul,p154_size); @pull self; ParaContent(); print (PrintText) SC_1839; .L_Say1480; .L_SayX1368; rtrue; ]; [ text_routine_49; say__p=1;ParaContent(); print (PrintText) (Global_Vars-->11); .L_Say1481; .L_SayX1369; rtrue; ]; [ text_routine_50; say__p=1;ParaContent(); print (PrintText) (Global_Vars-->11); .L_Say1482; .L_SayX1370; rtrue; ]; [ text_routine_51; say__p=1;ParaContent(); print (PrintText) SC_1840; if (~~(((((Global_Vars-->9) > 1))))) jump L_Say1483; ParaContent(); print (PrintText) SC_1841; jump L_SayX1371; .L_Say1483; ParaContent(); print (PrintText) SC_1842; .L_Say1484; .L_SayX1371; .L_Say1485; .L_SayX1372; rtrue; ]; [ text_routine_52; say__p=1;ParaContent(); print (PrintShortName) real_location; .L_Say1486; .L_SayX1373; rtrue; ]; [ text_routine_53; say__p=1;ParaContent(); print (say__n=score); ParaContent(); print (PrintText) SC_1613; ParaContent(); print (say__n=turns); .L_Say1487; .L_SayX1374; rtrue; ]; [ text_routine_54; say__p=1;ParaContent(); style bold; ParaContent(); print (PrintShortName) LocationOf(player) ; ParaContent(); style roman; .L_Say1488; .L_SayX1375; rtrue; ]; [ text_routine_55; say__p=1;ParaContent(); print (PrintText) SC_1843; ParaContent(); (PHR_2124_r209 ()); .L_Say1489; .L_SayX1376; rtrue; ]; [ text_routine_56; say__p=1;ParaContent(); print (PrintText) SC_1844; ParaContent(); print (say__n=(Global_Vars-->48)); .L_Say1490; .L_SayX1377; rtrue; ]; [ text_routine_57; say__p=1;ParaContent(); print (PrintText) SC_1845; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p14_health)); @pull self; ParaContent(); print (PrintText) SC_1613; ParaContent(); @push self; print (say__n=GProperty(9, self=player,p17_permanent_health)); @pull self; .L_Say1491; .L_SayX1378; rtrue; ]; [ text_routine_58; say__p=1;ParaContent(); (PHR_2156_r215 ()); .L_Say1492; .L_SayX1379; rtrue; ]; [ text_routine_59; say__p=1;ParaContent(); (PHR_2157_r216 ()); .L_Say1493; .L_SayX1380; rtrue; ]; [ text_routine_60; say__p=1;ParaContent(); (PHR_2158_r217 ()); .L_Say1494; .L_SayX1381; rtrue; ]; [ text_routine_61; say__p=1;ParaContent(); print (PrintText) SC_1846; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1847; .L_Say1495; .L_SayX1382; rtrue; ]; [ text_routine_62; say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1848; .L_Say1496; .L_SayX1383; rtrue; ]; [ text_routine_63; say__p=1;ParaContent(); print (PrintText) SC_1849; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1850; .L_Say1497; .L_SayX1384; rtrue; ]; [ text_routine_64; say__p=1;ParaContent(); print (PrintText) SC_1851; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1852; ParaContent(); style roman; ParaContent(); print (PrintText) SC_592; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1853; ParaContent(); style roman; ParaContent(); print (PrintText) SC_592; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1854; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1113; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1855; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1856; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1857; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1858; .L_Say1498; .L_SayX1385; rtrue; ]; [ text_routine_65; say__p=1;ParaContent(); print (PrintText) SC_1859; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1860; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1861; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1862; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1863; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1864; .L_Say1499; .L_SayX1386; rtrue; ]; [ text_routine_66; say__p=1;ParaContent(); print (PrintText) SC_1865; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1866; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1867; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1868; .L_Say1500; .L_SayX1387; rtrue; ]; [ text_routine_67; say__p=1;ParaContent(); print (PrintText) SC_1869; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1870; .L_Say1501; .L_SayX1388; rtrue; ]; [ text_routine_68; say__p=1;ParaContent(); print (PrintText) SC_1871; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1872; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1873; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1874; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1875; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1876; .L_Say1502; .L_SayX1389; rtrue; ]; [ text_routine_69; say__p=1;ParaContent(); print (PrintText) SC_1877; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1878; .L_Say1503; .L_SayX1390; rtrue; ]; [ text_routine_70; say__p=1;ParaContent(); print (PrintText) SC_1879; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1880; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1881; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1882; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1883; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1884; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1885; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1880; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1886; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1887; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1880; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1888; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1889; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1880; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1890; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1891; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1880; ParaContent(); style underline; ParaContent(); print (PrintText) SC_1892; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1893; .L_Say1504; .L_SayX1391; rtrue; ]; [ text_routine_71; say__p=1;ParaContent(); print (PrintText) SC_1894; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; .L_Say1505; .L_SayX1392; rtrue; ]; [ text_routine_72; say__p=1;ParaContent(); print (PrintText) SC_1895; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1896; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1897; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1898; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1899; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1900; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; .L_Say1506; .L_SayX1393; rtrue; ]; [ text_routine_73; say__p=1;ParaContent(); print (PrintText) SC_1901; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1902; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1903; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1904; .L_Say1507; .L_SayX1394; rtrue; ]; [ text_routine_74; say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1905; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1906; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1907; .L_Say1508; .L_SayX1395; rtrue; ]; [ text_routine_75; say__p=1;ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1908; ParaContent(); DivideParagraphPoint(); new_line; ParaContent(); print (PrintText) SC_1909; ParaContent(); style underline; ParaContent(); print (PrintText) SC_265; ParaContent(); style roman; ParaContent(); print (PrintText) SC_1910; .L_Say1509; .L_SayX1396; rtrue; ]; [ text_routine_76; say__p=1;ParaContent(); print (PrintText) SC_1911; ParaContent(); (PHR_2160_r218 (I529_assistant_dungeoneer)); .L_Say1510; .L_SayX1397; rtrue; ]; [ text_routine_77; say__p=1;ParaContent(); print (PrintText) SC_1912; ParaContent(); (PHR_2160_r218 (I530_adventurer)); .L_Say1511; .L_SayX1398; rtrue; ]; [ text_routine_78; say__p=1;ParaContent(); print (PrintText) SC_1913; ParaContent(); (PHR_2160_r218 (I531_hunter)); .L_Say1512; .L_SayX1399; rtrue; ]; [ text_routine_79; say__p=1;ParaContent(); print (PrintText) SC_1914; ParaContent(); (PHR_2160_r218 (I532_destroyer)); .L_Say1513; .L_SayX1400; rtrue; ]; [ text_routine_80; say__p=1;ParaContent(); print (PrintText) SC_1915; ParaContent(); (PHR_2160_r218 (I533_mageslayer)); .L_Say1514; .L_SayX1401; rtrue; ]; [ text_routine_81; say__p=1;ParaContent(); print (PrintText) SC_1916; ParaContent(); (PHR_2160_r218 (I534_deathblow)); .L_Say1515; .L_SayX1402; rtrue; ]; [ text_routine_82; say__p=1;ParaContent(); print (PrintText) SC_1917; ParaContent(); (PHR_2160_r218 (I535_i_return_to_serve)); .L_Say1516; .L_SayX1403; rtrue; ]; [ text_routine_83; say__p=1;ParaContent(); print (PrintText) SC_1918; ParaContent(); (PHR_2160_r218 (I536_from_the_shadows_i_come)); .L_Say1517; .L_SayX1404; rtrue; ]; [ text_routine_84; say__p=1;ParaContent(); print (PrintText) SC_1919; ParaContent(); (PHR_2160_r218 (I537_stunning_performance)); .L_Say1518; .L_SayX1405; rtrue; ]; [ text_routine_85; say__p=1;ParaContent(); print (PrintText) SC_1920; ParaContent(); (PHR_2160_r218 (I538_detox)); .L_Say1519; .L_SayX1406; rtrue; ]; [ text_routine_86; say__p=1;ParaContent(); print (PrintText) SC_1921; ParaContent(); (PHR_2160_r218 (I539_injury_to_insult)); .L_Say1520; .L_SayX1407; rtrue; ]; [ text_routine_87; say__p=1;ParaContent(); print (PrintText) SC_1922; ParaContent(); (PHR_2160_r218 (I540_unmoved)); .L_Say1521; .L_SayX1408; rtrue; ]; [ text_routine_88; say__p=1;ParaContent(); print (PrintText) SC_1923; ParaContent(); (PHR_2160_r218 (I541_nature_s_fragile_vessel)); .L_Say1522; .L_SayX1409; rtrue; ]; [ text_routine_89; say__p=1;ParaContent(); print (PrintText) SC_1924; ParaContent(); (PHR_2160_r218 (I542_durin_s_bane)); .L_Say1523; .L_SayX1410; rtrue; ]; [ text_routine_90; say__p=1;ParaContent(); (PHR_854_r128 ());ParaContent(); style underline; ParaContent(); print (PrintText) SC_1925; ParaContent(); print (say__n=(PHR_1164_r109 ())); ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; .L_Say1524; .L_SayX1411; rtrue; ]; [ text_routine_91; say__p=1;ParaContent(); (PHR_854_r128 ());ParaContent(); style underline; ParaContent(); print (PrintText) SC_1925; ParaContent(); print (say__n=(PHR_1164_r109 ())); ParaContent(); style roman; ParaContent(); print (PrintText) SC_310; .L_Say1525; .L_SayX1412; rtrue; ]; [ text_routine_92; say__p=1;ParaContent(); print (PrintText) SC_1926; if (~~((( (GenerateRandomNumber(1, 20) <= 1) )))) jump L_Say1526; ParaContent(); print (PrintText) SC_1927; ParaContent(); jump L_SayX1413; .L_Say1526; if (~~((( (GenerateRandomNumber(1, 50) <= 1) )))) jump L_Say1527; ParaContent(); print (PrintText) SC_1928; .L_Say1527; .L_SayX1413; ParaContent(); print (PrintText) SC_1929; ParaContent(); (PHR_2127_r210 ());ParaContent(); print (PrintText) SC_1206; .L_Say1528; .L_SayX1414; rtrue; ]; [ text_routine_93; say__p=1;ParaContent(); print (PrintText) SC_1930; ParaContent(); @push self; print (T68) GProperty(9, self=I439_blood_ape,p154_size); @pull self; ParaContent(); print (PrintText) SC_1931; .L_Say1529; .L_SayX1415; rtrue; ]; [ text_routine_94; say__p=1; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I510_as_witch))))) jump L_Say1530; ParaContent(); print (PrintText) SC_1932; ParaContent(); jump L_SayX1416; .L_Say1530; if (~~((((GProperty(9, I513_aswang,p242_as_shape) == I511_as_bird))))) jump L_Say1531; ParaContent(); print (PrintText) SC_1933; jump L_SayX1416; .L_Say1531; ParaContent(); print (PrintText) SC_1934; .L_Say1532; .L_SayX1416; .L_Say1533; .L_SayX1417; rtrue; ]; [ text_routine_95; say__p=1;ParaContent(); print (PrintText) SC_1935; ParaContent(); (PHR_828_r43 ());ParaContent(); print (the) (Global_Vars-->41); ParaContent(); (PHR_829_r44 ());ParaContent(); print (PrintText) SC_310; .L_Say1534; .L_SayX1418; rtrue; ]; [ ChronologyPoint pt; for (pt=0:ptpt = present_chronological_record-->pt; ]; [ UPDATE_CHRONOLOGICAL_RECORDS_R pt; for (pt=0: pt 0 0; Constant NO_PAST_TENSE_CONDS 0; Constant NO_PAST_TENSE_ACTIONS 0; [ TestSinglePastState past_flag pt turn_end wanted old new trips consecutives ct_0 ct_1 I7BASPL; if (past_flag) { new = (past_chronological_record-->pt) & 1; trips = ((past_chronological_record-->pt) & $$11111110)/2; consecutives = ((past_chronological_record-->pt) & $$111111100000000)/256; } else { old = (present_chronological_record-->pt) & 1; trips = ((present_chronological_record-->pt) & $$11111110)/2; consecutives = ((present_chronological_record-->pt) & $$111111100000000)/256; ! Test cases for conditions by PT number: each sets "new" to whether it is true or false now I7BASPL = blockv_sp; blockv_sp = blockv_sp + 16; switch(pt) { default: print "*** No such past tense condition ***^"; new = false; } blockv_sp = blockv_sp - 16; if (new == false) { consecutives = 0; } else { if (old == false) { trips++; if (trips > 127) trips = 127; } if (turn_end) { consecutives++; if (consecutives > 127) consecutives = 127; } } present_chronological_record-->pt = new + 2*trips + 256*consecutives; } ! print pt, ": old=", old, " new=", new, " trips=", trips, " consec=", consecutives, ! " wanted=", wanted, "^"; switch(wanted) { 0: if (new) return new; 1: if (new) return trips; 2: if (new) return consecutives+1; ! Plus one because we count the current turn 4: return new; 5: return trips; 6: return consecutives; } return 0; ]; [ TrackActions readjust oow ct_0 ct_1 i; for (i=0: PastActionsI6Routines-->i: i++) { if ((PastActionsI6Routines-->i).call()) { ! Yes, the current action matches action pattern i: if (readjust) continue; (TimesActionHasHappened-->i)++; if (LastTurnActionHappenedOn-->i ~= turns + 5) { LastTurnActionHappenedOn-->i = turns + 5; ActionCurrentlyHappeningFlag->i = 1; if (keep_silent == false) (TurnsActionHasBeenHappening-->i)++; } } else { ! No, the current action doesn't match action pattern i: if (oow == false) { if (keep_silent == false) { TurnsActionHasBeenHappening-->i = 0; } if (LastTurnActionHappenedOn-->i ~= turns + 5) ActionCurrentlyHappeningFlag->i = 0; } } } ]; Array TimesActionHasHappened-->(NO_PAST_TENSE_ACTIONS+1); Array TurnsActionHasBeenHappening-->(NO_PAST_TENSE_ACTIONS+1); Array LastTurnActionHappenedOn-->(NO_PAST_TENSE_ACTIONS+1); Array ActionCurrentlyHappeningFlag->(NO_PAST_TENSE_ACTIONS+1); Array past_chronological_record-->(NO_PAST_TENSE_CONDS+1); Array present_chronological_record-->(NO_PAST_TENSE_CONDS+1); Verb 'take' 'carry' 'hold' * 'inventory' -> Inv * multi -> Take * 'off' noun -> Disrobe * noun 'off' -> Disrobe * multiinside 'from' noun -> Remove * multiinside 'off' noun -> Remove ; Verb 'get' * 'out' / 'off' / 'down' / 'up' -> Exit * 'in' / 'on' -> Enter * multi -> Take * 'in' / 'into' / 'on' / 'onto' noun -> Enter * 'off' / 'down' noun -> GetOff * multiinside 'from' noun -> Remove ; Verb 'pick' * 'up' multi -> Take * multi 'up' -> Take ; Verb 'stand' * -> Exit * 'up' -> Exit * 'on' noun -> Enter ; Verb 'remove' * held -> Disrobe * multiinside 'from' noun -> Remove ; Verb 'shed' 'doff' 'disrobe' * held -> Disrobe ; Verb 'wear' 'don' * held -> Wear ; Verb 'put' * 'on' held -> Wear * held 'on' -> Wear * 'down' multiheld -> Drop * multiheld 'down' -> Drop * multiexcept 'in' / 'inside' / 'into' noun -> Insert * multiexcept 'on' / 'onto' noun -> PutOn ; Verb 'insert' * multiexcept 'in' / 'into' noun -> Insert ; Verb 'drop' 'discard' * multiheld -> Drop * held 'at' / 'against' noun -> ThrowAt * multiexcept 'in' / 'into' / 'down' noun -> Insert * multiexcept 'on' / 'onto' noun -> PutOn * noun 'in' noun -> Insert ; Verb 'give' 'pay' 'offer' 'feed' * creature held -> Give reverse * held 'to' creature -> Give ; Verb 'show' 'present' 'display' * 'commands' -> A135_showing_commands * creature held -> Show reverse * held 'to' creature -> Show ; Verb 'go' 'walk' 'run' * -> Go * 'to' -> A130_shorter_going_to * 'on' -> A130_shorter_going_to * noun=Noun_Filter_0 -> Go * noun -> Enter * scope=Scope_Filter_2 -> A129_going_to * 'into' / 'in' / 'inside' / 'through' noun -> Enter * 'to' scope=Scope_Filter_1 -> A129_going_to ; Verb 'inventory' 'i//' 'inv' * -> Inv ; Verb 'look' 'l//' * -> Look * noun -> Examine * 'at' noun -> Examine * 'inside' / 'in' / 'into' / 'through' noun -> Search * 'under' noun -> LookUnder * 'up' topic 'in' noun -> Consult reverse ; Verb 'consult' * noun 'on' / 'about' topic -> Consult ; Verb 'open' 'unwrap' 'uncover' * noun -> Open * noun 'with' held -> Unlock ; Verb 'close' 'shut' 'cover' * noun -> Close * 'up' noun -> Close * 'off' noun -> SwitchOff ; Verb 'enter' 'cross' * -> Enter * noun -> Enter ; Verb 'sit' * 'on' / 'in' / 'inside' noun -> Enter * 'on' 'top' 'of' noun -> Enter ; Verb 'exit' 'leave' 'out' * -> Exit ; Verb 'examine' 'x//' 'watch' 'describe' 'check' * noun -> Examine ; Verb 'read' * noun=Noun_Filter_4 -> Examine * noun=Noun_Filter_3 -> A102_reading ; Verb 'yes' 'y//' * -> Yes ; Verb 'no' * -> No ; Verb 'sorry' * -> Sorry ; Verb 'bother' 'curses' 'drat' 'darn' * -> Mild ; Verb 'shit' 'fuck' 'damn' * -> Strong ; Verb 'search' * noun -> Search ; Verb 'wave' * -> WaveHands * noun -> Wave ; Verb 'set' 'adjust' * noun 'to' topic -> SetTo ; Verb 'pull' 'drag' * noun -> Pull ; Verb 'push' 'move' 'shift' 'clear' 'press' * noun -> Push * noun noun=Noun_Filter_5 -> PushDir * noun 'to' noun=Noun_Filter_6 -> PushDir ; Verb 'turn' 'rotate' 'twist' 'unscrew' 'screw' * 'vampire' -> A97_turning_vampire * noun -> Turn * noun 'on' -> SwitchOn * 'on' noun -> SwitchOn * noun 'off' -> SwitchOff * 'off' noun -> SwitchOff ; Verb 'switch' * noun=Noun_Filter_7 -> SwitchOff * noun -> SwitchOn * 'on' noun -> SwitchOn * noun 'on' -> SwitchOn * noun 'off' -> SwitchOff * 'off' noun -> SwitchOff ; Verb 'lock' * noun 'with' held -> Lock ; Verb 'unlock' * noun 'with' held -> Unlock ; Verb 'attack' 'break' 'smash' 'hit' 'fight' 'torture' 'wreck' 'crack' 'destroy' 'murder' 'kill' 'punch' 'thump' * noun -> Attack ; Verb 'wait' 'z//' * -> Wait ; Verb 'answer' 'say' 'shout' 'speak' * 'to' noun=Noun_Filter_8 -> A139_talking_to * topic 'to' creature -> Answer reverse ; Verb 'tell' * creature 'about' topic -> Tell ; Verb 'ask' * creature 'for' noun -> AskFor * creature 'about' topic -> Ask ; Verb 'eat' * held -> Eat ; Verb 'sleep' 'nap' * -> Sleep ; Verb 'sing' * -> Sing ; Verb 'climb' 'scale' * Mistake_Token_318 -> MistakeAction * noun -> Climb * DECIMAL_TOKEN -> A106_scaling * 'up' / 'over' noun -> Climb ; Verb 'buy' 'purchase' * noun -> Buy ; Verb 'squeeze' 'squash' * noun -> Squeeze ; Verb 'swing' * noun -> Swing * 'on' noun -> Swing ; Verb 'wake' 'awake' 'awaken' * -> Wake * 'up' -> Wake * creature -> WakeOther * creature 'up' -> WakeOther * 'up' creature -> WakeOther ; Verb 'kiss' 'embrace' 'hug' * creature -> Kiss ; Verb 'think' * -> Think ; Verb 'smell' 'sniff' * -> Smell * noun=Noun_Filter_9 -> A103_snorting * noun -> Smell ; Verb 'listen' * -> Listen * 'to' noun -> Listen ; Verb 'hear' * noun -> Listen ; Verb 'taste' * noun -> Taste ; Verb 'touch' 'feel' * noun -> Touch ; Verb 'rub' 'shine' 'polish' 'sweep' 'clean' 'dust' 'wipe' 'scrub' * noun -> Rub * noun 'on' noun -> A100_applying_it_to ; Verb 'tie' 'attach' 'fasten' * noun 'to' noun -> Tie ; Verb 'burn' 'light' * noun -> Burn ; Verb 'drink' 'swallow' 'sip' * noun -> Drink ; Verb 'cut' 'slice' 'prune' 'chop' * noun -> Cut ; Verb 'jump' 'skip' 'hop' * -> Jump * noun=Noun_Filter_10 -> A137_direction_jumping * 'in' noun -> Enter * 'into' noun -> Enter ; Verb 'score' * -> Score ; Verb 'quit' * -> Quit ; Verb 'q//' * -> Quit ; Verb 'save' * -> Save ; Verb 'restart' * -> Restart ; Verb 'restore' * -> Restore ; Verb 'verify' * -> Verify ; Verb 'version' * -> Version ; Verb 'script' * -> ScriptOn * 'on' -> ScriptOn * 'off' -> ScriptOff ; Verb 'transcript' * -> ScriptOn * 'on' -> ScriptOn * 'off' -> ScriptOff ; Verb 'superbrief' * -> LMode3 ; Verb 'short' * -> LMode3 ; Verb 'verbose' * -> LMode2 ; Verb 'long' * -> LMode2 ; Verb 'brief' * -> LMode1 ; Verb 'normal' * -> LMode1 ; Verb 'nouns' * -> Pronouns ; Verb 'pronouns' * -> Pronouns ; Verb 'notify' * -> NotifyOn * 'on' -> NotifyOn * 'off' -> NotifyOff ; Verb 'epistat' * scope=Scope_Filter_11 -> A80_requesting_epistemic_sta ; Verb 'weightings' * 'on' -> A81_switching_weightings_on * 'off' -> A82_switching_weightings_off ; Verb 'numbers' * -> A83_checking_the_numbers_boo * 'off' -> A84_switching_the_numbers_of * 'on' -> A85_switching_the_numbers_on ; Verb 'ready' * noun=Noun_Filter_12 -> A87_readying ; Verb 'wield' * noun=Noun_Filter_13 -> A87_readying ; Verb 'use' * noun=Noun_Filter_14 -> A87_readying * noun=Noun_Filter_15 -> A103_snorting * noun=Noun_Filter_16 -> Wear * noun=Noun_Filter_17 -> A102_reading * noun=Noun_Filter_18 -> A99_throwing ; Verb 'a//' * noun=Noun_Filter_19 -> Attack ; Verb 'concentrate' * -> A88_concentrating ; Verb 'c//' * -> A88_concentrating ; Verb 'co' * -> A88_concentrating ; Verb 'parry' * -> A89_parrying ; Verb 'p//' * -> A89_parrying ; Verb 'pa' * -> A89_parrying ; Verb 'dodge' * -> A90_dodging ; Verb 'do' * -> A90_dodging ; Verb 'dig' * noun=Noun_Filter_20 -> A91_digging ; Verb 'collapse' * noun=Noun_Filter_21 -> A92_collapsing ; Verb 'bat' * -> A96_turning_bat * 'form' -> A96_turning_bat ; Verb 'vampire' * -> A97_turning_vampire * 'bat' -> A96_turning_bat ; Verb 'inhale' * noun=Noun_Filter_22 -> A98_inhaling ; Verb 'throw' * noun -> A99_throwing * noun 'in' noun -> Insert * noun 'into' noun -> Insert ; Verb 'apply' * noun 'to' noun -> A100_applying_it_to ; Verb 'spray' * noun -> A101_spraying ; Verb 'snort' * noun=Noun_Filter_23 -> A103_snorting ; Verb 'pierce' * noun=Noun_Filter_24 -> A104_piercing ; Verb 'scales' * Mistake_Token_317 -> MistakeAction * DECIMAL_TOKEN -> A106_scaling ; Verb 'stun' * noun=Noun_Filter_25 -> A107_stunning ; Verb 'lash' * -> A109_lashing * 'out' -> A109_lashing ; Verb 'reap' * scope=Scope_Filter_26 -> A110_reaping ; Verb 'dominate' * noun -> A112_dominating ; Verb 'dom' * noun -> A112_dominating ; Verb 'confuse' * -> A115_confusing ; Verb 'thorns' * -> A120_summoning_thorns ; Verb 'thorn' * -> A120_summoning_thorns ; Verb 'summon' * 'thorns' -> A120_summoning_thorns ; Verb 'retreat' * -> A128_retreating ; Verb 'flee' * -> A128_retreating ; Verb 'no.verb' * scope=Scope_Filter_27 -> A129_going_to ; Verb 'status' * -> A131_asking_status ; Verb 'stat' * -> A131_asking_status ; Verb 'stats' * -> A131_asking_status ; Verb 'memory' * -> A132_remembering ; Verb 'remember' * -> A132_remembering ; Verb 'r//' * -> A132_remembering ; Verb 'sense' * -> A133_sensing ; Verb 'trophy' * -> A134_trophylisting ; Verb 'trophies' * -> A134_trophylisting ; Verb 'list' * 'trophies' -> A134_trophylisting ; Verb 'commands' * -> A135_showing_commands ; Verb 'pray' * -> A136_praying ; Verb 'pr' * -> A136_praying ; Verb 'equip' * noun -> A138_equipping ; Verb 'activate' * noun -> SwitchOn ; Verb 'deactivate' * noun -> SwitchOff ; Verb 'talk' * 'to' noun=Noun_Filter_28 -> A139_talking_to ; Verb 'boast' * -> A139_talking_to ; Verb '*//' * Mistake_Token_415 topic -> MistakeAction ; Verb 'plunk' * noun -> A140_plunking ; Verb 'plonk' * -> A141_plonking ; Verb 'rambo' * -> A142_ramboing ; Verb 'meatboy' * -> A143_meatboying ; Verb 'reduce' * noun=Noun_Filter_29 -> A144_reducing ; Verb 'testready' * -> A145_testreadying ; Verb 'help' * -> A146_asking_for_help ; Verb 'hint' * -> A146_asking_for_help ; Verb 'hints' * -> A146_asking_for_help ; Verb 'about' * -> A146_asking_for_help ; Verb 'info' * -> A146_asking_for_help ; Verb 'menu' * -> A146_asking_for_help ; Verb 'achieve' * -> A147_achievemenuing ; Verb 'achievements' * -> A147_achievemenuing ; [ Parse_Name_GV1 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV2 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV3 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV4 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV5 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV6 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV7 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV8 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV9 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV10 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV11 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV12 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV96 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_2; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_2; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_2; } .pvp_pass_L_2; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_3; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_3; } .pvp_pass_L_3; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_274_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_274_1_2; jump group_274_1_end; .group_274_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_274_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_275_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_275_1_2; jump group_275_1_end; .group_275_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_275_1_3; jump group_275_1_end; .group_275_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_275_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_276_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_276_1_2; jump group_276_1_end; .group_276_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_276_1_3; jump group_276_1_end; .group_276_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_276_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_277_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_277_1_2; jump group_277_1_end; .group_277_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_277_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV114 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_4; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_4; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_4; } .pvp_pass_L_4; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_5; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_5; } .pvp_pass_L_5; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV116 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_6; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_6; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_6; } .pvp_pass_L_6; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_7; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_7; } .pvp_pass_L_7; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV119 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_8; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_8; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_8; } .pvp_pass_L_8; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_9; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_9; } .pvp_pass_L_9; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV120 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_10; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_10; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_10; } .pvp_pass_L_10; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_11; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_11; } .pvp_pass_L_11; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV125 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p218_scroll_parsable if (parser_one.p218_scroll_parsable ~= parser_two.p218_scroll_parsable) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_12; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_12; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_12; } .pvp_pass_L_12; ! Parsing property p218_scroll_parsable wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_55() == GPR_NUMBER) && (self.p218_scroll_parsable == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_13; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_13; } .pvp_pass_L_13; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (NextWordStopped() ~= 'scrolls') jump Fail_1; parser_action = ##PluralFound; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'very') jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'hot') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'blazingly') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'rusted') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV127 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_14; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_14; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_14; } .pvp_pass_L_14; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_15; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_15; } .pvp_pass_L_15; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV128 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_16; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_16; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_16; } .pvp_pass_L_16; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_17; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_17; } .pvp_pass_L_17; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV129 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_18; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_18; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_18; } .pvp_pass_L_18; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_19; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_19; } .pvp_pass_L_19; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV130 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { if (parser_action==##TheSame) { if (parser_trace >= 4) print "p1, p2 = ", parser_one, ", ", parser_two, "^"; ss = self; ! Distinguishing property p13_disambiguation_id if (parser_one.p13_disambiguation_id ~= parser_two.p13_disambiguation_id) return -2; ! Distinguishing property p180_material if (parser_one.p180_material ~= parser_two.p180_material) return -2; ! Distinguishing property p185_flaming if ((parser_one .p185_flaming == true) && (~~(parser_two .p185_flaming == true))) return -2; if ((parser_two .p185_flaming == true) && (~~(parser_one .p185_flaming == true))) return -2; ! Distinguishing property p222_cursed if ((parser_one .p222_cursed == true) && (~~(parser_two .p222_cursed == true))) return -2; if ((parser_two .p222_cursed == true) && (~~(parser_one .p222_cursed == true))) return -2; self = ss; return 0; } ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_20; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_20; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_20; } .pvp_pass_L_20; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_21; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_21; } .pvp_pass_L_21; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV131 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_22; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_22; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_22; } .pvp_pass_L_22; ! Parsing property p218_scroll_parsable wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_55() == GPR_NUMBER) && (self.p218_scroll_parsable == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_23; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_23; } .pvp_pass_L_23; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (NextWordStopped() ~= 'scrolls') jump Fail_1; parser_action = ##PluralFound; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'very') jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'hot') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'blazingly') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'rusted') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV132 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_24; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_24; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_24; } .pvp_pass_L_24; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_25; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_25; } .pvp_pass_L_25; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV133 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_26; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_26; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_26; } .pvp_pass_L_26; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_27; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_27; } .pvp_pass_L_27; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV134 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_28; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_28; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_28; } .pvp_pass_L_28; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_29; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_29; } .pvp_pass_L_29; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV135 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_30; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_30; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_30; } .pvp_pass_L_30; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_31; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_31; } .pvp_pass_L_31; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV137 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_32; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_32; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_32; } .pvp_pass_L_32; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_33; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_33; } .pvp_pass_L_33; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV138 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_34; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_34; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_34; } .pvp_pass_L_34; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_35; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_35; } .pvp_pass_L_35; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV139 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_36; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_36; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_36; } .pvp_pass_L_36; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_37; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_37; } .pvp_pass_L_37; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV140 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_38; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_38; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_38; } .pvp_pass_L_38; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_39; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_39; } .pvp_pass_L_39; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV141 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_40; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_40; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_40; } .pvp_pass_L_40; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_41; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_41; } .pvp_pass_L_41; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV142 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_42; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_42; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_42; } .pvp_pass_L_42; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_43; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_43; } .pvp_pass_L_43; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV143 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_44; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_44; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_44; } .pvp_pass_L_44; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_45; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_45; } .pvp_pass_L_45; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV144 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_46; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_46; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_46; } .pvp_pass_L_46; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_47; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_47; } .pvp_pass_L_47; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV145 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_48; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_48; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_48; } .pvp_pass_L_48; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_49; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_49; } .pvp_pass_L_49; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV146 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_50; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_50; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_50; } .pvp_pass_L_50; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_51; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_51; } .pvp_pass_L_51; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV147 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_52; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_52; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_52; } .pvp_pass_L_52; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_53; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_53; } .pvp_pass_L_53; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV148 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_54; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_54; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_54; } .pvp_pass_L_54; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_55; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_55; } .pvp_pass_L_55; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV149 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_56; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_56; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_56; } .pvp_pass_L_56; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_57; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_57; } .pvp_pass_L_57; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV150 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_58; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_58; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_58; } .pvp_pass_L_58; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_59; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_59; } .pvp_pass_L_59; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV151 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_60; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_60; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_60; } .pvp_pass_L_60; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_61; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_61; } .pvp_pass_L_61; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV152 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_62; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_62; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_62; } .pvp_pass_L_62; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_63; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_63; } .pvp_pass_L_63; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV153 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_64; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_64; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_64; } .pvp_pass_L_64; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_65; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_65; } .pvp_pass_L_65; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV154 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_66; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_66; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_66; } .pvp_pass_L_66; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_67; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_67; } .pvp_pass_L_67; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV155 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_68; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_68; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_68; } .pvp_pass_L_68; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_69; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_69; } .pvp_pass_L_69; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV157 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_70; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_70; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_70; } .pvp_pass_L_70; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_71; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_71; } .pvp_pass_L_71; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_416_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_416_1_2; jump group_416_1_end; .group_416_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_416_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_417_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_417_1_2; jump group_417_1_end; .group_417_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_417_1_3; jump group_417_1_end; .group_417_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_417_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_418_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_418_1_2; jump group_418_1_end; .group_418_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_418_1_3; jump group_418_1_end; .group_418_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_418_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_419_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_419_1_2; jump group_419_1_end; .group_419_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_419_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV159 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_72; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_72; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_72; } .pvp_pass_L_72; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_73; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_73; } .pvp_pass_L_73; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_424_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_424_1_2; jump group_424_1_end; .group_424_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_424_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_425_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_425_1_2; jump group_425_1_end; .group_425_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_425_1_3; jump group_425_1_end; .group_425_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_425_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_426_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_426_1_2; jump group_426_1_end; .group_426_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_426_1_3; jump group_426_1_end; .group_426_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_426_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_427_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_427_1_2; jump group_427_1_end; .group_427_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_427_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV160 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_74; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_74; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_74; } .pvp_pass_L_74; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_75; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_75; } .pvp_pass_L_75; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV163 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_76; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_76; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_76; } .pvp_pass_L_76; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_77; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_77; } .pvp_pass_L_77; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_436_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_436_1_2; jump group_436_1_end; .group_436_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_436_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_437_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_437_1_2; jump group_437_1_end; .group_437_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_437_1_3; jump group_437_1_end; .group_437_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_437_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_438_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_438_1_2; jump group_438_1_end; .group_438_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_438_1_3; jump group_438_1_end; .group_438_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_438_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_439_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_439_1_2; jump group_439_1_end; .group_439_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_439_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV164 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_78; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_78; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_78; } .pvp_pass_L_78; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_79; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_79; } .pvp_pass_L_79; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_444_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_444_1_2; jump group_444_1_end; .group_444_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_444_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_445_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_445_1_2; jump group_445_1_end; .group_445_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_445_1_3; jump group_445_1_end; .group_445_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_445_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_446_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_446_1_2; jump group_446_1_end; .group_446_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_446_1_3; jump group_446_1_end; .group_446_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_446_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_447_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_447_1_2; jump group_447_1_end; .group_447_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_447_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV166 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_80; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_80; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_80; } .pvp_pass_L_80; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_81; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_81; } .pvp_pass_L_81; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_452_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_452_1_2; jump group_452_1_end; .group_452_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_452_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_453_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_453_1_2; jump group_453_1_end; .group_453_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_453_1_3; jump group_453_1_end; .group_453_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_453_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_454_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_454_1_2; jump group_454_1_end; .group_454_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_454_1_3; jump group_454_1_end; .group_454_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_454_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_455_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_455_1_2; jump group_455_1_end; .group_455_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_455_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV170 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_82; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_82; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_82; } .pvp_pass_L_82; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_83; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_83; } .pvp_pass_L_83; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_460_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_460_1_2; jump group_460_1_end; .group_460_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_460_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_461_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_461_1_2; jump group_461_1_end; .group_461_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_461_1_3; jump group_461_1_end; .group_461_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_461_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_462_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_462_1_2; jump group_462_1_end; .group_462_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_462_1_3; jump group_462_1_end; .group_462_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_462_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_463_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_463_1_2; jump group_463_1_end; .group_463_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_463_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV171 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_84; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_84; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_84; } .pvp_pass_L_84; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_85; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_85; } .pvp_pass_L_85; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_468_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_468_1_2; jump group_468_1_end; .group_468_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_468_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_469_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_469_1_2; jump group_469_1_end; .group_469_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_469_1_3; jump group_469_1_end; .group_469_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_469_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_470_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_470_1_2; jump group_470_1_end; .group_470_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_470_1_3; jump group_470_1_end; .group_470_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_470_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_471_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_471_1_2; jump group_471_1_end; .group_471_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_471_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV172 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_86; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_86; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_86; } .pvp_pass_L_86; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_87; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_87; } .pvp_pass_L_87; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_476_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_476_1_2; jump group_476_1_end; .group_476_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_476_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_477_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_477_1_2; jump group_477_1_end; .group_477_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_477_1_3; jump group_477_1_end; .group_477_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_477_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_478_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_478_1_2; jump group_478_1_end; .group_478_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_478_1_3; jump group_478_1_end; .group_478_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_478_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_479_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_479_1_2; jump group_479_1_end; .group_479_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_479_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV173 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_88; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_88; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_88; } .pvp_pass_L_88; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_89; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_89; } .pvp_pass_L_89; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_484_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_484_1_2; jump group_484_1_end; .group_484_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_484_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_485_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_485_1_2; jump group_485_1_end; .group_485_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_485_1_3; jump group_485_1_end; .group_485_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_485_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_486_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_486_1_2; jump group_486_1_end; .group_486_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_486_1_3; jump group_486_1_end; .group_486_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_486_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_487_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_487_1_2; jump group_487_1_end; .group_487_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_487_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV174 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_90; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_90; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_90; } .pvp_pass_L_90; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_91; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_91; } .pvp_pass_L_91; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV175 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_92; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_92; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_92; } .pvp_pass_L_92; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_93; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_93; } .pvp_pass_L_93; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV179 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_94; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_94; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_94; } .pvp_pass_L_94; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_95; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_95; } .pvp_pass_L_95; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_500_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_500_1_2; jump group_500_1_end; .group_500_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_500_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_501_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_501_1_2; jump group_501_1_end; .group_501_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_501_1_3; jump group_501_1_end; .group_501_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_501_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_502_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_502_1_2; jump group_502_1_end; .group_502_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_502_1_3; jump group_502_1_end; .group_502_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_502_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_503_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_503_1_2; jump group_503_1_end; .group_503_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_503_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV180 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_96; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_96; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_96; } .pvp_pass_L_96; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_97; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_97; } .pvp_pass_L_97; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_508_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_508_1_2; jump group_508_1_end; .group_508_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_508_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_509_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_509_1_2; jump group_509_1_end; .group_509_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_509_1_3; jump group_509_1_end; .group_509_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_509_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_510_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_510_1_2; jump group_510_1_end; .group_510_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_510_1_3; jump group_510_1_end; .group_510_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_510_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_511_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_511_1_2; jump group_511_1_end; .group_511_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_511_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV181 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_98; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_98; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_98; } .pvp_pass_L_98; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_99; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_99; } .pvp_pass_L_99; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_516_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_516_1_2; jump group_516_1_end; .group_516_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_516_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_517_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_517_1_2; jump group_517_1_end; .group_517_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_517_1_3; jump group_517_1_end; .group_517_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_517_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_518_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_518_1_2; jump group_518_1_end; .group_518_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_518_1_3; jump group_518_1_end; .group_518_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_518_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_519_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_519_1_2; jump group_519_1_end; .group_519_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_519_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV182 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_100; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_100; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_100; } .pvp_pass_L_100; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_101; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_101; } .pvp_pass_L_101; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_524_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_524_1_2; jump group_524_1_end; .group_524_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_524_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_525_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_525_1_2; jump group_525_1_end; .group_525_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_525_1_3; jump group_525_1_end; .group_525_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_525_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_526_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_526_1_2; jump group_526_1_end; .group_526_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_526_1_3; jump group_526_1_end; .group_526_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_526_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_527_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_527_1_2; jump group_527_1_end; .group_527_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_527_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV183 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_102; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_102; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_102; } .pvp_pass_L_102; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_103; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_103; } .pvp_pass_L_103; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } group_wn = wn; .group_532_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_532_1_2; jump group_532_1_end; .group_532_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_1; .group_532_1_end; if (NextWordStopped() ~= 'of') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_163() == GPR_FAIL) jump Fail_2; group_wn = wn; .group_533_1_1; wn = group_wn; if (NextWordStopped() ~= 'dead') jump group_533_1_2; jump group_533_1_end; .group_533_1_2; wn = group_wn; if (NextWordStopped() ~= 'killed') jump group_533_1_3; jump group_533_1_end; .group_533_1_3; wn = group_wn; if (NextWordStopped() ~= 'corpse') jump Fail_2; .group_533_1_end; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_164() == GPR_FAIL) jump Fail_3; group_wn = wn; .group_534_1_1; wn = group_wn; if (NextWordStopped() ~= 'alive') jump group_534_1_2; jump group_534_1_end; .group_534_1_2; wn = group_wn; if (NextWordStopped() ~= 'live') jump group_534_1_3; jump group_534_1_end; .group_534_1_3; wn = group_wn; if (NextWordStopped() ~= 'living') jump Fail_3; .group_534_1_end; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; group_wn = wn; .group_535_1_1; wn = group_wn; if (NextWordStopped() ~= 'body') jump group_535_1_2; jump group_535_1_end; .group_535_1_2; wn = group_wn; if (NextWordStopped() ~= 'bodies') jump Fail_4; .group_535_1_end; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; if (Cond_Token_192() == GPR_FAIL) jump Fail_5; if (NextWordStopped() ~= 'very') jump Fail_5; if (NextWordStopped() ~= 'hot') jump Fail_5; try_from_wn = wn; f = true; continue; .Fail_5; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_6; if (NextWordStopped() ~= 'hot') jump Fail_6; try_from_wn = wn; f = true; continue; .Fail_6; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_7; if (NextWordStopped() ~= 'blazingly') jump Fail_7; try_from_wn = wn; f = true; continue; .Fail_7; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_8; if (NextWordStopped() ~= 'rusted') jump Fail_8; try_from_wn = wn; f = true; continue; .Fail_8; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV184 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; if (parser_trace >= 3) print "Parse_name called^"; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { ! Match any number of visible property values try_from_wn = wn; g = true; while (g) { g = false; ! Parsing property p13_disambiguation_id wn = try_from_wn; spn = parsed_number; if ((DECIMAL_TOKEN() == GPR_NUMBER) && (self.p13_disambiguation_id == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p180_material wn = try_from_wn; spn = parsed_number; if ((Kind_GPR_50() == GPR_NUMBER) && (self.p180_material == parsed_number)) { try_from_wn = wn; g = true; f = true; } parsed_number = spn; ! Parsing property p185_flaming wn = try_from_wn; if ((self .p185_flaming == true) && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_104; } wn = try_from_wn; if ((self .p185_flaming == true) && (PRN_PN_185() == GPR_PREPOSITION)) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_104; } wn = try_from_wn; if ((self .p185_flaming == false) && (NextWordStopped()=='not') && (NextWordStopped()=='flaming')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_104; } .pvp_pass_L_104; ! Parsing property p222_cursed wn = try_from_wn; if ((self .p222_cursed == true) && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_105; } wn = try_from_wn; if ((self .p222_cursed == false) && (NextWordStopped()=='not') && (NextWordStopped()=='cursed')) { try_from_wn = wn; g = true; f = true; jump pvp_pass_L_105; } .pvp_pass_L_105; } ! try_from_wn is now advanced past any visible property values wn = try_from_wn; } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_192() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'very') jump Fail_1; if (NextWordStopped() ~= 'hot') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_191() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'hot') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_193() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'blazingly') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_195() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'rusted') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Consult_Grammar_221 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'restart') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_222 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'restore') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_223 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'amusing') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_224 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'quit') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_225 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'undo') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_226 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'd//') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ PRN_PN_185 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'burning') jump Fail_1; return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; #IFTRUE (1 == 1); [ UnknownVerb; verb_wordnum = 0; return 'no.verb'; ]; [ PrintVerb v; if (v == 'no.verb') { print "do something to"; rtrue; } rfalse; ]; #Ifnot; [ UnknownVerb; rfalse; ]; [ PrintVerb v; rfalse; ]; #ENDIF; Array Rel_Record_63 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "leading-through relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_X_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND door_to KD9_relation_of_rooms_to_doors Rel_Handler_63 "Leading-through relates one room (called the other side) to various doors"; [ Rel_Handler_63 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if (X == (Y.door_to)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_63(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=nothing: false: ) { if (Rel_Handler_63(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_63(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=nothing: false: ) { if (Rel_Handler_63(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { for (Z3=nothing: false: ) { if (Rel_Handler_63(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { for (Z3=nothing: false: ) { if (Rel_Handler_63(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: Y.door_to = X; rtrue; RELS_ASSERT_FALSE: Relation_NowN1toV(Y,door_to,X); rtrue; RELS_SHOW: Relation_RShowOtoO(rr, false); rtrue; RELS_ROUTE_FIND: return OtoVRelRouteTo(rr-->RR_STORAGE, X, Y); RELS_ROUTE_FIND_COUNT: return RelFollowVector(OtoVRelRouteTo(rr-->RR_STORAGE, X, Y), X, Y); } rfalse; ]; Array Rel_Record_65 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "lock-fitting relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_X_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND with_key KD10_relation_of_things_to_thi Rel_Handler_65 "Lock-fitting relates one thing (called the matching key) to various things"; [ Rel_Handler_65 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if (X == (Y.with_key)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_65(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_65(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_65(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_65(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_65(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_65(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: Y.with_key = X; rtrue; RELS_ASSERT_FALSE: Relation_NowN1toV(Y,with_key,X); rtrue; RELS_SHOW: Relation_RShowOtoO(rr, false); rtrue; RELS_ROUTE_FIND: return OtoVRelRouteTo(rr-->RR_STORAGE, X, Y); RELS_ROUTE_FIND_COUNT: return RelFollowVector(OtoVRelRouteTo(rr-->RR_STORAGE, X, Y), X, Y); } rfalse; ]; Array Rel_Record_67 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "hating relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND V2V_Bitmap_67 KD11_relation_of_factions_to_f Rel_Handler_67 "Hating relates various factions to various factions"; [ Rel_Handler_67 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if ((Relation_TestVtoV(X,Rel_Record_67,Y,false))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=1: Z1<=7: Z1++) { if (Rel_Handler_67(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(44); } else { for (Z1=1: Z1<=7: Z1++) { if (Rel_Handler_67(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(44); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=1: Z1<=7: Z1++) { if (Rel_Handler_67(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=1: Z1<=7: Z1++) { if (Rel_Handler_67(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=1: Z1<=7: Z1++) { for (Z3=1: Z3<=7: Z3++) { if (Rel_Handler_67(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=1: Z1<=7: Z1++) { for (Z3=1: Z3<=7: Z3++) { if (Rel_Handler_67(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: (Relation_NowVtoV(X,Rel_Record_67,Y,false)); rtrue; RELS_ASSERT_FALSE: (Relation_NowNVtoV(X,Rel_Record_67,Y,false)); rtrue; RELS_SHOW: Relation_ShowVtoV(rr, false); rtrue; RELS_ROUTE_FIND: return VtoVRelRouteTo(rr, X, Y); RELS_ROUTE_FIND_COUNT: return VtoVRelRouteTo(rr, X, Y, true); } rfalse; ]; Array Rel_Record_69 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "opposing relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST Relation_69 KD12_relation_of_people_to_peo Rel_Handler_69 "Opposing relates a person (called X) to a person (called Y) when the faction of X hates the faction of Y"; [ Rel_Handler_69 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if ((Relation_69(X,Y))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_69(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_69(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; } rfalse; ]; Array Rel_Record_71 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "pressing relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND V2V_Bitmap_71 KD12_relation_of_people_to_peo Rel_Handler_71 "Pressing relates various people to various people"; [ Rel_Handler_71 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if ((Relation_TestVtoV(X,Rel_Record_71,Y,false))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_71(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_71(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_71(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_71(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_71(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_71(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: (Relation_NowVtoV(X,Rel_Record_71,Y,false)); rtrue; RELS_ASSERT_FALSE: (Relation_NowNVtoV(X,Rel_Record_71,Y,false)); rtrue; RELS_SHOW: Relation_ShowVtoV(rr, false); rtrue; RELS_ROUTE_FIND: return VtoVRelRouteTo(rr, X, Y); RELS_ROUTE_FIND_COUNT: return VtoVRelRouteTo(rr, X, Y, true); } rfalse; ]; Array Rel_Record_73 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "collapse relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_SYMMETRIC+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND V2V_Bitmap_73 KD13_relation_of_rooms_to_room Rel_Handler_73 "Collapse relates rooms to each other"; [ Rel_Handler_73 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if ((Relation_TestVtoV(X,Rel_Record_73,Y,true))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_73(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_73(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_73(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_73(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { for (Z3=IK1_First: Z3: Z3=Z3.IK1_Link) { if (Rel_Handler_73(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { for (Z3=IK1_First: Z3: Z3=Z3.IK1_Link) { if (Rel_Handler_73(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: (Relation_NowVtoV(X,Rel_Record_73,Y,true)); rtrue; RELS_ASSERT_FALSE: (Relation_NowNVtoV(X,Rel_Record_73,Y,true)); rtrue; RELS_SHOW: Relation_ShowVtoV(rr, true); rtrue; RELS_ROUTE_FIND: return VtoVRelRouteTo(rr, X, Y); RELS_ROUTE_FIND_COUNT: return VtoVRelRouteTo(rr, X, Y, true); } rfalse; ]; Array Rel_Record_75 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "granting relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_X_UNIQUE+RELS_Y_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND p157_granting KD14_relation_of_monsters_to_p Rel_Handler_75 "Granting relates one monster to one power"; [ Rel_Handler_75 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if (X == (Y.p157_granting)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK19_First: Z1: Z1=Z1.IK19_Link) { if (Rel_Handler_75(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=IK21_First: Z1: Z1=Z1.IK21_Link) { if (Rel_Handler_75(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK19_First: Z1: Z1=Z1.IK19_Link) { if (Rel_Handler_75(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK21_First: Z1: Z1=Z1.IK21_Link) { if (Rel_Handler_75(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK19_First: Z1: Z1=Z1.IK19_Link) { for (Z3=IK21_First: Z3: Z3=Z3.IK21_Link) { if (Rel_Handler_75(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK19_First: Z1: Z1=Z1.IK19_Link) { for (Z3=IK21_First: Z3: Z3=Z3.IK21_Link) { if (Rel_Handler_75(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: Relation_Now1to1(Y,p157_granting,X); rtrue; RELS_ASSERT_FALSE: Relation_NowN1toV(Y,p157_granting,X); rtrue; RELS_SHOW: Relation_RShowOtoO(rr, false); rtrue; RELS_ROUTE_FIND: return OtoVRelRouteTo(rr-->RR_STORAGE, X, Y); RELS_ROUTE_FIND_COUNT: return RelFollowVector(OtoVRelRouteTo(rr-->RR_STORAGE, X, Y), X, Y); } rfalse; ]; Array Rel_Record_79 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "having-knowledge-of relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_X_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND p217_having_knowledge_of KD15_relation_of_people_to_scr Rel_Handler_79 "Having-knowledge-of relates one person to various scroll-effect-values"; [ Rel_Handler_79 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if (X == (GProperty(54, Y, p217_having_knowledge_of))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_79(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=1: Z1<=13: Z1++) { if (Rel_Handler_79(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(54); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_79(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=1: Z1<=13: Z1++) { if (Rel_Handler_79(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=1: Z3<=13: Z3++) { if (Rel_Handler_79(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=1: Z3<=13: Z3++) { if (Rel_Handler_79(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: WriteGProperty(54, Y, p217_having_knowledge_of, X); rtrue; RELS_ASSERT_FALSE: Relation_NowN1toVV(Y,X,54,p217_having_knowledge_of); rtrue; RELS_SHOW: Relation_RShowOtoO(rr, false); rtrue; RELS_ROUTE_FIND: return OtoVRelRouteTo(rr-->RR_STORAGE, X, Y); RELS_ROUTE_FIND_COUNT: return RelFollowVector(OtoVRelRouteTo(rr-->RR_STORAGE, X, Y), X, Y); } rfalse; ]; Array Rel_Record_81 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "having-scroll-effect relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST Relation_81 KD16_relation_of_scrolls_to_sc Rel_Handler_81 "Having-scroll-effect relates a scroll (called item) to a scroll-effect-value (called effect) when effect is the scroll-effect of item"; [ Rel_Handler_81 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if ((Relation_81(X,Y))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK38_First: Z1: Z1=Z1.IK38_Link) { if (Rel_Handler_81(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=1: Z1<=13: Z1++) { if (Rel_Handler_81(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(54); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK38_First: Z1: Z1=Z1.IK38_Link) { if (Rel_Handler_81(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=1: Z1<=13: Z1++) { if (Rel_Handler_81(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK38_First: Z1: Z1=Z1.IK38_Link) { for (Z3=1: Z3<=13: Z3++) { if (Rel_Handler_81(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK38_First: Z1: Z1=Z1.IK38_Link) { for (Z3=1: Z3<=13: Z3++) { if (Rel_Handler_81(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; } rfalse; ]; Array Rel_Record_83 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "domination relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND V2V_Bitmap_83 KD12_relation_of_people_to_peo Rel_Handler_83 "Domination relates various people to various people"; [ Rel_Handler_83 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if ((Relation_TestVtoV(X,Rel_Record_83,Y,false))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_83(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_83(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_83(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_83(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_83(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_83(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: (Relation_NowVtoV(X,Rel_Record_83,Y,false)); rtrue; RELS_ASSERT_FALSE: (Relation_NowNVtoV(X,Rel_Record_83,Y,false)); rtrue; RELS_SHOW: Relation_ShowVtoV(rr, false); rtrue; RELS_ROUTE_FIND: return VtoVRelRouteTo(rr, X, Y); RELS_ROUTE_FIND_COUNT: return VtoVRelRouteTo(rr, X, Y, true); } rfalse; ]; Array Rel_Record_85 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "grappling relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_SYMMETRIC+RELS_X_UNIQUE+RELS_Y_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND p238_grappling KD12_relation_of_people_to_peo Rel_Handler_85 "Grappling relates one person to another"; [ Rel_Handler_85 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if (X == (Y.p238_grappling)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_85(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_85(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_85(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_85(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_85(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK8_First: Z3: Z3=Z3.IK8_Link) { if (Rel_Handler_85(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: Relation_NowS1to1(Y,p238_grappling,X); rtrue; RELS_ASSERT_FALSE: Relation_NowSN1to1(Y,p238_grappling,X); rtrue; RELS_SHOW: Relation_ShowOtoO(rr, true); rtrue; } rfalse; ]; Array Rel_Record_87 --> REL_BLOCK_HEADER RELATION_TY NULL NULL "list-membership relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST Relation_87 KD17_relation_of_things_to_lis Rel_Handler_87 "List-membership relates a thing (called T) to a list of things (called L) when T is listed in L"; [ Rel_Handler_87 rr task X Y Z1 Z2 Z3 Z4; switch (task) { RELS_TEST: if ((Relation_87(X,Y))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_87(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(9); } else { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(KD4_list_of_things); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_87(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { } else if (Y == RLIST_ALL_Y) { } return X; } rfalse; ]; [ CreateDynamicRelations i rel; ]; ! Routine to decide if opposing(t_0, t_1) [ Relation_69 t_0 ! Call parameter 'X' = object t_1 ! Call parameter 'Y' = object ; if (~~(t_0 ofclass K8_person)) rfalse; if (~~(t_1 ofclass K8_person)) rfalse; return ((((Relation_TestVtoV(GProperty(OBJECT_TY, t_0,p111_faction),Rel_Record_67,GProperty(OBJECT_TY, t_1,p111_faction),false))))); ]; ! Routine to decide if having-scroll-effect(t_0, t_1) [ Relation_81 t_0 ! Call parameter 'item' = object t_1 ! Call parameter 'effect' = scroll-effect-value ; if (~~(t_0 ofclass K38_scroll)) rfalse; return (((t_1 == GProperty(OBJECT_TY, t_0,p56_scroll_effect)))); ]; ! Routine to decide if list-membership(t_0, t_1) [ Relation_87 t_0 ! Call parameter 'T' = object t_1 ! Call parameter 'L' = list of things ; if (~~(t_0 ofclass K2_thing)) rfalse; return (( (LIST_OF_TY_FindItem(t_1, t_0)) )); ]; ! Find next x satisfying: ! [ scroll(x) ] [ Prop_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK38_First: x: x=x.IK38_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) ] [ Prop_1 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) ] [ Prop_2 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ DoesNotExist x IN[ weapon(x) & 'readied'(x) IN] : encloses(const_0, x) ] [ Prop_3 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(const_0,x))){ qcy_0++; } } } if (qcy_0 == 0){ rtrue; } rfalse; ]; ! True or false? ! [ Card>=1 x IN[ weapon(x) IN] : is(const_0, CarrierOf(x)) ] [ Prop_4 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ qcn_0++; if ((const_0 == CarrierOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ weapon(x) & is(const_0, CarrierOf(x)) ] [ Prop_5 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in const_0) if (CarrierOf(x)==parent(x)){ if ((x ofclass K17_weapon)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is(const_0, (x.component_parent)) ] [ Prop_6 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((const_0 == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_7 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_8 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('swarm of daggers', (x.component_parent)) ] [ Prop_9 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I436_swarm_of_daggers == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('blood ape', (x.component_parent)) ] [ Prop_10 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I439_blood_ape == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('ravenous armadillo', (x.component_parent)) ] [ Prop_11 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I442_ravenous_armadillo == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('chain golem', (x.component_parent)) ] [ Prop_12 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I451_chain_golem == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('jumping bomb', (x.component_parent)) ] [ Prop_13 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I454_jumping_bomb == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('reaper', (x.component_parent)) ] [ Prop_14 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I457_reaper == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('mindslug', (x.component_parent)) ] [ Prop_15 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I463_mindslug == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('fafhrd', (x.component_parent)) ] [ Prop_16 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I466_fafhrd == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('mouser', (x.component_parent)) ] [ Prop_17 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I469_mouser == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('giant', (x.component_parent)) ] [ Prop_18 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I473_giant_tentacle == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('healer of aite', (x.component_parent)) ] [ Prop_19 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I478_healer_of_aite == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('tormentor of aite', (x.component_parent)) ] [ Prop_20 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I481_tormentor_of_aite == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('defender of aite', (x.component_parent)) ] [ Prop_21 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I484_defender_of_aite == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('bodmall', (x.component_parent)) ] [ Prop_22 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I488_bodmall == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('malygris', (x.component_parent)) ] [ Prop_23 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I493_malygris == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('demonic assassin', (x.component_parent)) ] [ Prop_24 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I496_demonic_assassin == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('nameless horror', (x.component_parent)) ] [ Prop_25 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I499_nameless_horror == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('rotting corpse', (x.component_parent)) ] [ Prop_26 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I501_rotting_corpse == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('aswang', (x.component_parent)) ] [ Prop_27 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I513_aswang == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('smoke demon', (x.component_parent)) ] [ Prop_28 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I517_smoke_demon == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('imp', (x.component_parent)) ] [ Prop_29 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I519_imp == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('yourself', (x.component_parent)) ] [ Prop_30 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((selfobj == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ container(x) & 'rust-releasing'(x) IN] : NOT[ 'off-stage'(x) NOT] ] [ Prop_31 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_211_t1_v9(x)))){ qcn_0++; if (~~(((~~Adj_9_t1_v9(x))))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ container(x) & 'rust-releasing'(x) & not-'off-stage'(x) ] [ Prop_32 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_211_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is(const_0, ContainerOf(x)) ] [ Prop_33 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((const_0 == ContainerOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, ContainerOf(x)) ] [ Prop_34 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(const_0): x: x=TestContainmentRange(const_0,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ room(x) & 'placed'(x) IN] : 'rust-spored'(x) ] [ Prop_35 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ qcn_0++; if (((Adj_207_t1_v9(x)))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) & not-'rust-spored'(x) ] [ Prop_36 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && (~~((Adj_207_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ room(x) & 'rust-spored'(x) IN] : adjacent-to(const_0, x) ] [ Prop_37 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_207_t1_v9(x)))){ qcn_0++; if ((TestAdjacency(const_0,x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ room(x) & 'rust-spored-candidate'(x) ] [ Prop_38 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_209_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'alive'(x) IN] : 'hexed'(x) ] [ Prop_39 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x)))){ qcn_0++; if (((Adj_278_t1_v9(x)))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & 'hexed'(x) ] [ Prop_40 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Adj_278_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is('huge forge', ContainerOf(x)) ] [ Prop_41 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((I401_huge_forge == ContainerOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & encloses('huge forge', x) ] [ Prop_42 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(I401_huge_forge,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is('armadillo stomach', ContainerOf(x)) ] [ Prop_43 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((I444_armadillo_stomach == ContainerOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is('armadillo stomach', ContainerOf(x)) ] [ Prop_44 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(I444_armadillo_stomach): x: x=TestContainmentRange(I444_armadillo_stomach,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ room(x) IN] : adjacent-to(const_0, x) ] [ Prop_45 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ qcn_0++; if ((TestAdjacency(const_0,x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ room(x) & adjacent-to(const_0, x) ] [ Prop_46 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if ((TestAdjacency(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : rotting limb(x) & encloses('location', x) ] [ Prop_47 x x_ix ; for (x=IK53_First: x: x=x.IK53_Link){ if ((IndirectlyContains(real_location,x))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ rotting limb(x) & encloses('location', x) ] [ Prop_48 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK53_First: x: x=x.IK53_Link){ if ((IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'undead'(x) & not-'follower'(x) & is('location', ContainerOf(x)) ] [ Prop_49 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_174_t1_v9(x))) && (~~((Adj_172_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ weapon(x) & 'readied'(x) IN] : encloses('player', x) ] [ Prop_50 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(player,x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('player', x) ] [ Prop_51 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(player,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is('imp', CarrierOf(x)) ] [ Prop_52 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in I519_imp) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is('player', CarrierOf(x)) ] [ Prop_53 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in player) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is('location', ContainerOf(x)) ] [ Prop_54 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_55 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_56 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & encloses('location', x) ] [ Prop_57 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : container(x) & 'opaque'(x) & 'closed'(x) & encloses(x, const_0) ] [ Prop_58 const_0 x x_ix ; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_75_t1_v9(x))) && ((Adj_78_t1_v9(x))) && (IndirectlyContains(x,const_0))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'dead'(x) & not-'off-stage'(x) ] [ Prop_59 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((~~Adj_33_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'spontaneous teleporter'(x) & not-'off-stage'(x) ] [ Prop_60 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_166_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'teleport impossible aware'(x) ] [ Prop_61 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_170_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'off-stage'(x) & 'follower'(x) ] [ Prop_62 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x)))) && ((Adj_172_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & 'flaming'(x) & not-'off-stage'(x) & 'corruptible'(x) ] [ Prop_63 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_201_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x)))) && ((Adj_254_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & 'hot'(x) & not-'flaming'(x) & not-'off-stage'(x) & 'corruptible'(x) ] [ Prop_64 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_39_t1_v9(x))) && (~~((Adj_201_t1_v9(x)))) && (~~((~~Adj_9_t1_v9(x)))) && ((Adj_254_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) & 'rust-spored'(x) ] [ Prop_65 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_207_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & 'iron'(x) & not-'rusted'(x) & 'corruptible'(x) & encloses(const_0, x) ] [ Prop_66 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_184_t1_v9(x))) && (~~((Adj_205_t1_v9(x)))) && ((Adj_254_t1_v9(x))) && (IndirectlyContains(const_0,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : container(x) & 'closed'(x) & encloses(x, const_0) ] [ Prop_67 const_0 x x_ix ; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_78_t1_v9(x))) && (IndirectlyContains(x,const_0))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'visible'(x) ] [ Prop_68 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_3_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) ] [ Prop_69 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ person(x) & 'enslaved'(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_70 x x_ix counter; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_271_t1_v9(x))) && ((Adj_33_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ person(x) & 'enslaved'(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_71 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_271_t1_v9(x))) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : person(x) & is('giant tentacle', (x.p238_grappling)) ] [ Prop_72 x x_ix ; for (x=IK8_First: x: x=x.IK8_Link){ if ((I473_giant_tentacle == (x.p238_grappling))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is('giant tentacle', (x.p238_grappling)) ] [ Prop_73 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((I473_giant_tentacle == (x.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>1 x IN[ person(x) & 'alive'(x) IN] : encloses(const_0, x) ] [ Prop_74 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(const_0,x))){ qcy_0++; } } } if (qcy_0 > 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & 'alive'(x) & encloses(const_0, x) ] [ Prop_75 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ room(x) & 'smoke-demoned'(x) ] [ Prop_76 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_280_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & 'internally-heated'(x) ] [ Prop_77 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_40_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & 'hot'(x) & not-'flaming'(x) ] [ Prop_78 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_39_t1_v9(x))) && (~~((Adj_201_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('actor', x) ] [ Prop_79 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(actor,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('noun', x) ] [ Prop_80 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(noun,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is('player', CarrierOf(x)) ] [ Prop_81 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((player == CarrierOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ thing(x) & is('player', CarrierOf(x)) ] [ Prop_82 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'hostile'(x) & 'alive'(x) IN] : encloses('location', x) ] [ Prop_83 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && ((Adj_33_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(real_location,x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & 'hostile'(x) & encloses('location', x) ] [ Prop_84 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && (IndirectlyContains(real_location,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ room(x) IN] : adjacent-to(const_0, x) ] [ Prop_85 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ qcn_0++; if ((TestAdjacency(const_0,x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ room(x) & adjacent-to(const_0, x) ] [ Prop_86 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if ((TestAdjacency(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ thing(x) & 'cursed'(x) & 'corruptible'(x) IN] : is('player', OwnerOf(x)) ] [ Prop_87 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_256_t1_v9(x))) && ((Adj_254_t1_v9(x)))){ qcn_0++; if ((player == OwnerOf(x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & 'cursed'(x) & 'corruptible'(x) & is('player', OwnerOf(x)) ] [ Prop_88 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_256_t1_v9(x))) && ((Adj_254_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) & 'cursed'(x) IN] : is('player', OwnerOf(x)) ] [ Prop_89 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_256_t1_v9(x)))){ qcn_0++; if ((player == OwnerOf(x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) & 'corruptible'(x) & not-'cursed'(x) IN] : is('player', OwnerOf(x)) ] [ Prop_90 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_254_t1_v9(x))) && (~~((Adj_256_t1_v9(x))))){ qcn_0++; if ((player == OwnerOf(x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ thing(x) & 'corruptible'(x) & not-'cursed'(x) & is('player', OwnerOf(x)) ] [ Prop_91 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_254_t1_v9(x))) && (~~((Adj_256_t1_v9(x))))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ person(x) & encloses('location', x) ] [ Prop_92 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((IndirectlyContains(real_location,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ thing(x) & is('player', OwnerOf(x)) ] [ Prop_93 x x_ix counter; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is(const_0, OwnerOf(x)) ] [ Prop_94 const_0 x x_ix counter; objectloop (x in const_0) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ thing(x) & not-'readied'(x) & is('player', OwnerOf(x)) ] [ Prop_95 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing) && (~~((Adj_103_t1_v9(x))))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ thing(x) & not-'readied'(x) & is(const_0, OwnerOf(x)) ] [ Prop_96 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in const_0) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing) && (~~((Adj_103_t1_v9(x))))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('player', x) ] [ Prop_97 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(player,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ thing(x) & is('elemental plane of smoke', ContainerOf(x)) ] [ Prop_98 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(I521_elemental_plane_of_smok): x: x=TestContainmentRange(I521_elemental_plane_of_smok,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is('elemental plane of smoke storage', ContainerOf(x)) ] [ Prop_99 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(I522_elemental_plane_of_smok): x: x=TestContainmentRange(I522_elemental_plane_of_smok,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ person(x) & 'undead'(x) & is('location', ContainerOf(x)) ] [ Prop_100 x x_ix counter; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_174_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & 'undead'(x) & is('location', ContainerOf(x)) ] [ Prop_101 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x))) && ((Adj_174_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_102 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_103 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'off-stage'(x) ] [ Prop_104 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ person(x) & 'dead'(x) ] [ Prop_105 x x_ix counter; for (x=IK8_First: x: x=x.IK8_Link){ if (((~~Adj_33_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & is('player', CarrierOf(x)) ] [ Prop_106 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (CarrierOf(x)==parent(x)){ if ((x ofclass K17_weapon) && ((Adj_103_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_107 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & is('noun', CarrierOf(x)) ] [ Prop_108 x x_ix counter; objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Abstraction for set of x such that: ! [ thing(x) & is('noun', CarrierOf(x)) ] [ Prop_109 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K2_thing) && (noun == CarrierOf(x))){ rtrue; } rfalse; } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'off-stage'(x) ] [ Prop_110 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'off-stage'(x) ] [ Prop_111 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & called='box'(x) & 'enterable'(x) & is('location', ContainerOf(x)) ] [ Prop_112 x x_ix ; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K2_thing) && ((Adj_74_t1_v9(x)))){ deferred_calling_list-->0 = x; rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_113 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_114 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_115 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & 'marked for listing'(x) ] [ Prop_116 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_70_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ thing(x) & 'marked for listing'(x) ] [ Prop_117 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_70_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Abstraction for set of x such that: ! [ thing(x) & 'unmentioned'(x) ] [ Prop_118 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K2_thing) && ((Adj_73_t1_v9(x)))){ rtrue; } rfalse; } ]; ! True or false? ! [ Exists x : thing(x) & 'locale-supportable'(x) & is(const_0, SupporterOf(x)) ] [ Prop_119 const_0 x x_ix ; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_30_t1_v9(x)))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, SupporterOf(x)) ] [ Prop_120 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & 'locale-supportable'(x) & is(const_0, SupporterOf(x)) ] [ Prop_121 const_0 x x_ix ; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_30_t1_v9(x)))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, SupporterOf(x)) ] [ Prop_122 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_123 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_124 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ thing(x) & is('player', OwnerOf(x)) ] [ Prop_125 x x_ix counter; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ weapon(x) & encloses('player', x) ] [ Prop_126 x x_ix counter; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ natural weapon(x) & encloses('player', x) ] [ Prop_127 x x_ix counter; for (x=IK18_First: x: x=x.IK18_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Force this to be true via 'now': ! [ ForAll x IN[ thing(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_128 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ weapon(x) & encloses('player', x) IN] : 'marked for listing'(x) ] [ Prop_129 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_70_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ natural weapon(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_130 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! How many x satisfy this? ! [ clothing(x) & encloses('player', x) ] [ Prop_131 x x_ix counter; for (x=IK24_First: x: x=x.IK24_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Force this to be true via 'now': ! [ ForAll x IN[ thing(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_132 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ clothing(x) & encloses('player', x) IN] : 'marked for listing'(x) ] [ Prop_133 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK24_First: x: x=x.IK24_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_70_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! How many x satisfy this? ! [ scroll(x) & encloses('player', x) ] [ Prop_134 x x_ix counter; for (x=IK38_First: x: x=x.IK38_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Force this to be true via 'now': ! [ ForAll x IN[ thing(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_135 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ scroll(x) & encloses('player', x) IN] : 'marked for listing'(x) ] [ Prop_136 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK38_First: x: x=x.IK38_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_70_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! How many x satisfy this? ! [ grenade(x) & encloses('player', x) ] [ Prop_137 x x_ix counter; for (x=IK35_First: x: x=x.IK35_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Force this to be true via 'now': ! [ ForAll x IN[ thing(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_138 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ grenade(x) & encloses('player', x) IN] : 'marked for listing'(x) ] [ Prop_139 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK35_First: x: x=x.IK35_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_70_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! How many x satisfy this? ! [ thing(x) & encloses('player', x) ] [ Prop_140 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ weapon(x) & encloses('player', x) ] [ Prop_141 x x_ix counter; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ clothing(x) & encloses('player', x) ] [ Prop_142 x x_ix counter; for (x=IK24_First: x: x=x.IK24_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ scroll(x) & encloses('player', x) ] [ Prop_143 x x_ix counter; for (x=IK38_First: x: x=x.IK38_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ grenade(x) & encloses('player', x) ] [ Prop_144 x x_ix counter; for (x=IK35_First: x: x=x.IK35_Link){ if ((IndirectlyContains(player,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Force this to be true via 'now': ! [ ForAll x IN[ thing(x) & encloses('player', x) IN] : 'marked for listing'(x) ] [ Prop_145 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_70_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ weapon(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_146 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ clothing(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_147 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK24_First: x: x=x.IK24_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ scroll(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_148 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK38_First: x: x=x.IK38_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ grenade(x) & encloses('player', x) IN] : 'unmarked for listing'(x) ] [ Prop_149 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK35_First: x: x=x.IK35_Link){ if ((IndirectlyContains(player,x))){ qcn_0++; (Adj_71_t2_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! How many x satisfy this? ! [ thing(x) & is('actor', CarrierOf(x)) ] [ Prop_150 x x_ix counter; objectloop (x in actor) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Exists x : player's holdall(x) & called='current working sack'(x) & is('actor', HolderOf(x)) ] [ Prop_151 x x_ix ; for (x=nothing: false: ){ if ((actor == HolderOf(x))){ deferred_calling_list-->0 = x; rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is('actor', CarrierOf(x)) ] [ Prop_152 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in actor) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & is('actor', CarrierOf(x)) ] [ Prop_153 x x_ix counter; objectloop (x in actor) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_154 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_155 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ thing(x) & is(const_0, SupporterOf(x)) ] [ Prop_156 const_0 x x_ix counter; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is(const_0, ContainerOf(x)) ] [ Prop_157 const_0 x x_ix counter; for (x=TestContainmentRange(const_0): x: x=TestContainmentRange(const_0,x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is('second noun', SupporterOf(x)) ] [ Prop_158 x x_ix counter; objectloop (x in second) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is('second noun', ContainerOf(x)) ] [ Prop_159 x x_ix counter; for (x=TestContainmentRange(second): x: x=TestContainmentRange(second,x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Card>0 x IN[ grenade(x) IN] : 'off-stage'(x) ] [ Prop_160 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK35_First: x: x=x.IK35_Link){ qcn_0++; if (((~~Adj_9_t1_v9(x)))){ qcy_0++; } } if (qcy_0 > 0){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ flash grenade(x) ] [ Prop_161 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK45_First: x: x=x.IK45_Link){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ rust grenade(x) ] [ Prop_162 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK46_First: x: x=x.IK46_Link){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ fragmentation grenade(x) ] [ Prop_163 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK48_First: x: x=x.IK48_Link){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ smoke grenade(x) ] [ Prop_164 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK47_First: x: x=x.IK47_Link){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ scroll(x) & is('player', CarrierOf(x)) ] [ Prop_165 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in player) if (CarrierOf(x)==parent(x)){ if ((x ofclass K38_scroll)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_166 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_167 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & is('location', ContainerOf(x)) ] [ Prop_168 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_169 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_170 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_171 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_172 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_173 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_174 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ thing(x) & encloses('location', x) ] [ Prop_175 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : container(x) & 'opaque'(x) & 'closed'(x) & encloses(x, const_0) ] [ Prop_176 const_0 x x_ix ; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_75_t1_v9(x))) && ((Adj_78_t1_v9(x))) && (IndirectlyContains(x,const_0))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ direction(x) & 'cardinal'(x) ] [ Prop_177 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ direction(x) ] [ Prop_178 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK3_First: x: x=x.IK3_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ direction(x) ] [ Prop_179 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK3_First: x: x=x.IK3_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ direction(x) ] [ Prop_180 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK3_First: x: x=x.IK3_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('noun', ContainerOf(x)) ] [ Prop_181 x x_ix ; for (x=TestContainmentRange(noun): x: x=TestContainmentRange(noun,x)){ if ((x ofclass K2_thing) && ((Adj_68_t1_v9(x)))){ if (~~(((Adj_64_t1_v9(x))))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & NOT[ is(x, 'player') NOT] & is('noun', ContainerOf(x)) ] [ Prop_182 x x_ix ; for (x=TestContainmentRange(noun): x: x=TestContainmentRange(noun,x)){ if ((x ofclass K2_thing)){ if (~~((x == player))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('noun', SupporterOf(x)) ] [ Prop_183 x x_ix ; objectloop (x in noun) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_68_t1_v9(x)))){ if (~~(((Adj_64_t1_v9(x))))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & NOT[ is(x, 'player') NOT] & is('noun', SupporterOf(x)) ] [ Prop_184 x x_ix ; objectloop (x in noun) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ if (~~((x == player))){ rtrue; } } } rfalse; ]; ! How many x satisfy this? ! [ thing(x) & is('noun', CarrierOf(x)) ] [ Prop_185 x x_ix counter; objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is('noun', WearerOf(x)) ] [ Prop_186 x x_ix counter; objectloop (x in noun) if (WearerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('noun', ContainerOf(x)) ] [ Prop_187 x x_ix ; for (x=TestContainmentRange(noun): x: x=TestContainmentRange(noun,x)){ if ((x ofclass K2_thing) && ((Adj_68_t1_v9(x)))){ if (~~(((Adj_64_t1_v9(x))))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('noun', SupporterOf(x)) ] [ Prop_188 x x_ix ; objectloop (x in noun) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_68_t1_v9(x)))){ if (~~(((Adj_64_t1_v9(x))))){ rtrue; } } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & encloses('noun', x) ] [ Prop_189 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(noun,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card<1 x IN[ thing(x) IN] : is('sarcophagus', ContainerOf(x)) ] [ Prop_190 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((I398_sarcophagus == ContainerOf(x))){ qcy_0++; } } if (qcy_0 < 1){ rtrue; } rfalse; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : encloses('sarcophagus', x) ] [ Prop_191 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((IndirectlyContains(I398_sarcophagus,x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : encloses('sarcophagus', x) ] [ Prop_192 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((IndirectlyContains(I398_sarcophagus,x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! True or false? ! [ Card<1 x IN[ thing(x) IN] : is('sarcophagus', ContainerOf(x)) ] [ Prop_193 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((I398_sarcophagus == ContainerOf(x))){ qcy_0++; } } if (qcy_0 < 1){ rtrue; } rfalse; ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_194 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_195 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : necklace(x) & is('player', WearerOf(x)) ] [ Prop_196 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K25_necklace)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ necklace(x) & is('player', WearerOf(x)) ] [ Prop_197 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K25_necklace)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : hat(x) & is('player', WearerOf(x)) ] [ Prop_198 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K26_hat)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ hat(x) & is('player', WearerOf(x)) ] [ Prop_199 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K26_hat)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : shirt(x) & is('player', WearerOf(x)) ] [ Prop_200 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K27_shirt)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ shirt(x) & is('player', WearerOf(x)) ] [ Prop_201 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K27_shirt)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : cloak(x) & is('player', WearerOf(x)) ] [ Prop_202 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K28_cloak)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ cloak(x) & is('player', WearerOf(x)) ] [ Prop_203 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K28_cloak)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : shoes(x) & is('player', WearerOf(x)) ] [ Prop_204 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K29_shoes)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ shoes(x) & is('player', WearerOf(x)) ] [ Prop_205 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K29_shoes)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : trousers(x) & is('player', WearerOf(x)) ] [ Prop_206 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K30_trousers)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ trousers(x) & is('player', WearerOf(x)) ] [ Prop_207 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K30_trousers)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : belt(x) & is('player', WearerOf(x)) ] [ Prop_208 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K31_belt)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ belt(x) & is('player', WearerOf(x)) ] [ Prop_209 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K31_belt)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : gauntlets(x) & is('player', WearerOf(x)) ] [ Prop_210 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K32_gauntlets)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ gauntlets(x) & is('player', WearerOf(x)) ] [ Prop_211 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K32_gauntlets)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : mask(x) & is('player', WearerOf(x)) ] [ Prop_212 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K33_mask)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ mask(x) & is('player', WearerOf(x)) ] [ Prop_213 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K33_mask)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : shirt(x) & is('player', WearerOf(x)) ] [ Prop_214 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K27_shirt)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ shirt(x) & is('player', WearerOf(x)) ] [ Prop_215 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K27_shirt)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : cloak(x) & 'cursed'(x) & is('player', WearerOf(x)) ] [ Prop_216 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K28_cloak) && ((Adj_256_t1_v9(x)))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ cloak(x) & is('player', WearerOf(x)) ] [ Prop_217 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K28_cloak)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : trousers(x) & is('player', WearerOf(x)) ] [ Prop_218 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K30_trousers)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ trousers(x) & is('player', WearerOf(x)) ] [ Prop_219 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K30_trousers)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : belt(x) & 'cursed'(x) & is('player', WearerOf(x)) ] [ Prop_220 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K31_belt) && ((Adj_256_t1_v9(x)))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ belt(x) & is('player', WearerOf(x)) ] [ Prop_221 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K31_belt)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_222 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_223 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_224 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_225 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'passive'(x) & encloses('location', x) ] [ Prop_226 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) ] [ Prop_227 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ counter++; jump NextOuterLoop_5; .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'hostile'(x) & 'alive'(x) IN] : encloses('location', x) ] [ Prop_228 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && ((Adj_33_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(real_location,x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'passive'(x) & encloses('location', x) ] [ Prop_229 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_230 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_231 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_232 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ DoesNotExist x IN[ weapon(x) & 'readied'(x) IN] : encloses(const_0, x) ] [ Prop_233 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(const_0,x))){ qcy_0++; } } } if (qcy_0 == 0){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ natural weapon(x) & is(const_0, (x.component_parent)) ] [ Prop_234 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((const_0 == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_235 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_236 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_237 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & 'cautious'(x) & encloses('location', x) ] [ Prop_238 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Adj_260_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_239 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_240 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_241 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ person(x) & 'alive'(x) & encloses('location', x) & opposing(const_0, x) ] [ Prop_242 const_0 x x_ix counter; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x)) && ((Relation_69(const_0,x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) & opposing(const_0, x) ] [ Prop_243 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x)) && ((Relation_69(const_0,x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) & opposing(const_0, x) ] [ Prop_244 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x)) && ((Relation_69(const_0,x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card=1 x IN[ weapon(x) IN] : encloses(const_0, x) ] [ Prop_245 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ qcn_0++; if ((IndirectlyContains(const_0,x))){ qcy_0++; } } if (qcy_0 == 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ weapon(x) & encloses(const_0, x) ] [ Prop_246 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card=2 x IN[ weapon(x) IN] : encloses(const_0, x) ] [ Prop_247 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ qcn_0++; if ((IndirectlyContains(const_0,x))){ qcy_0++; } } if (qcy_0 == 2){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ weapon(x) & 'artificial'(x) & encloses(const_0, x) ] [ Prop_248 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_37_t1_v9(x))) && (IndirectlyContains(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ weapon(x) & encloses(const_0, x) ] [ Prop_249 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(const_0,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses(const_0, x) ] [ Prop_250 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('running ai', x) ] [ Prop_251 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains((Global_Vars-->36),x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses(const_0, x) ] [ Prop_252 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & thing('location') & opposing(const_0, 'location') & encloses('location', x) ] [ Prop_253 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (real_location ofclass K2_thing) && ((Relation_69(const_0,real_location))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is(const_0, OwnerOf(x)) ] [ Prop_254 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((const_0 == OwnerOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & thing('location') & NOT[ opposing(const_0, 'location') NOT] & encloses('location', x) ] [ Prop_255 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (real_location ofclass K2_thing)){ if (~~(((Relation_69(const_0,real_location))))){ if ((IndirectlyContains(real_location,x))){ return x; } } } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ weapon(x) & 'readied'(x) IN] : is('player', CarrierOf(x)) ] [ Prop_256 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x)))){ qcn_0++; if ((player == CarrierOf(x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & is('player', CarrierOf(x)) ] [ Prop_257 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (CarrierOf(x)==parent(x)){ if ((x ofclass K17_weapon) && ((Adj_103_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('chosen target', x) ] [ Prop_258 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains((Global_Vars-->37),x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=2 x IN[ person(x) & 'undead'(x) IN] : is('location', ContainerOf(x)) ] [ Prop_259 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_174_t1_v9(x)))){ qcn_0++; if ((real_location == ContainerOf(x))){ qcy_0++; } } } if (qcy_0 >= 2){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('main actor', x) ] [ Prop_260 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains((Global_Vars-->30),x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses(const_0, x) ] [ Prop_261 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is('armadillo stomach', ContainerOf(x)) ] [ Prop_262 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((I444_armadillo_stomach == ContainerOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! How many x satisfy this? ! [ person(x) & 'enslaved'(x) & is('location', ContainerOf(x)) ] [ Prop_263 x x_ix counter; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_271_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Exists x : suit(x) & 'iron'(x) & is('global defender', WearerOf(x)) ] [ Prop_264 x x_ix ; objectloop (x in (Global_Vars-->42)) if (WearerOf(x)==parent(x)){ if ((x ofclass K34_suit) && ((Adj_184_t1_v9(x)))){ rtrue; } } rfalse; ]; ! True or false? ! [ Exists x : suit(x) & 'silver'(x) & is('global defender', WearerOf(x)) ] [ Prop_265 x x_ix ; objectloop (x in (Global_Vars-->42)) if (WearerOf(x)==parent(x)){ if ((x ofclass K34_suit) && ((Adj_185_t1_v9(x)))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ suit(x) & is('global defender', WearerOf(x)) ] [ Prop_266 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in (Global_Vars-->42)) if (WearerOf(x)==parent(x)){ if ((x ofclass K34_suit)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Force this to be true via 'now': ! [ ForAll x IN[ weapon(x) & 'readied'(x) & encloses('global defender', x) IN] : NOT[ 'readied'(x) NOT] ] [ Prop_267 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains((Global_Vars-->42),x))){ qcn_0++; (Adj_103_t3_v9(x)); qcy_0++; } } if (qcy_0 == qcn_0){ } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('blood ape', (x.component_parent)) ] [ Prop_268 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I439_blood_ape == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=3 x IN[ person(x) IN] : 'sometime-stunned'(x) ] [ Prop_269 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if (((Adj_270_t1_v9(x)))){ qcy_0++; } } if (qcy_0 >= 3){ rtrue; } rfalse; ]; ! True or false? ! [ Exists x : person(x) & is('giant tentacle', (x.p238_grappling)) ] [ Prop_270 x x_ix ; for (x=IK8_First: x: x=x.IK8_Link){ if ((I473_giant_tentacle == (x.p238_grappling))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is('giant tentacle', (x.p238_grappling)) ] [ Prop_271 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((I473_giant_tentacle == (x.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ rotting limb(x) & is('rotting corpse', (x.component_parent)) ] [ Prop_272 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK53_First: x: x=x.IK53_Link){ if ((I501_rotting_corpse == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('rotting corpse', (x.component_parent)) ] [ Prop_273 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((I501_rotting_corpse == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : weapon(x) & 'readied'(x) & 'cursed'(x) & is('player', OwnerOf(x)) ] [ Prop_274 x x_ix ; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K17_weapon) && ((Adj_103_t1_v9(x))) && ((Adj_256_t1_v9(x)))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & 'cursed'(x) & is('player', OwnerOf(x)) ] [ Prop_275 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K17_weapon) && ((Adj_103_t1_v9(x))) && ((Adj_256_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ thing(x) & encloses('actor', x) ] [ Prop_276 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if ((IndirectlyContains(actor,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('chosen target', x) ] [ Prop_277 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains((Global_Vars-->37),x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ person(x) & 'enslaved'(x) & is('location', ContainerOf(x)) ] [ Prop_278 x x_ix counter; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_271_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ room(x) ] [ Prop_279 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ direction(x) & 'cardinal'(x) ] [ Prop_280 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) ] [ Prop_281 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ room(x) IN] : collapse(x, const_0) ] [ Prop_282 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ qcn_0++; if (((Relation_TestVtoV(x,Rel_Record_73,const_0,true)))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ room(x) & collapse(x, const_0) ] [ Prop_283 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Relation_TestVtoV(x,Rel_Record_73,const_0,true)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card<12 x IN[ room(x) IN] : 'placed'(x) ] [ Prop_284 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ qcn_0++; if (((Adj_111_t1_v9(x)))){ qcy_0++; } } if (qcy_0 < 12){ rtrue; } rfalse; ]; ! True or false? ! [ Card<8 x IN[ room(x) & 'habitable'(x) IN] : 'placed'(x) ] [ Prop_285 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_119_t1_v9(x)))){ qcn_0++; if (((Adj_111_t1_v9(x)))){ qcy_0++; } } } if (qcy_0 < 8){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ room(x) & 'placed'(x) ] [ Prop_286 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ direction(x) & 'cardinal'(x) ] [ Prop_287 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ direction(x) & 'cardinal'(x) ] [ Prop_288 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) & 'connectable'(x) ] [ Prop_289 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && ((Adj_113_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) & 'connectable'(x) ] [ Prop_290 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && ((Adj_113_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ direction(x) & 'cardinal'(x) ] [ Prop_291 x x_ix counter; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'minor'(x) ] [ Prop_292 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_233_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'minor'(x) ] [ Prop_293 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_233_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'major'(x) ] [ Prop_294 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_234_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'major'(x) ] [ Prop_295 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_234_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'epic'(x) ] [ Prop_296 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_235_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'epic'(x) ] [ Prop_297 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_235_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'special'(x) ] [ Prop_298 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_237_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & 'special'(x) ] [ Prop_299 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && ((Adj_237_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ person(x) & 'off-stage'(x) & 'undead'(x) ] [ Prop_300 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_174_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ clothing(x) & 'corruptible'(x) ] [ Prop_301 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK24_First: x: x=x.IK24_Link){ if (((Adj_254_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ weapon(x) & 'corruptible'(x) ] [ Prop_302 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_254_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : scroll(x) & is('considered treasure', ContainerOf(x)) ] [ Prop_303 x x_ix ; for (x=TestContainmentRange((Global_Vars-->63)): x: x=TestContainmentRange((Global_Vars-->63),x)){ if ((x ofclass K38_scroll)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ room(x) & 'placed'(x) ] [ Prop_304 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ extra(x) & 'off-stage'(x) ] [ Prop_305 x x_ix counter; for (x=IK51_First: x: x=x.IK51_Link){ if (((~~Adj_9_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ extra(x) & 'off-stage'(x) ] [ Prop_306 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK51_First: x: x=x.IK51_Link){ if (((~~Adj_9_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ thing(x) & 'off-stage'(x) & 'minor'(x) ] [ Prop_307 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_233_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'ethereal'(x) ] [ Prop_308 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_231_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ scroll(x) & 'plain'(x) & 'prototypical'(x) ] [ Prop_309 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_41_t1_v9(x))) && ((Adj_240_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ scroll(x) & 'obfuscated'(x) ] [ Prop_310 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK38_First: x: x=x.IK38_Link){ if (((~~Adj_41_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ scroll(x) & 'plain'(x) ] [ Prop_311 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_41_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ treasure pack(x) ] [ Prop_312 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK22_First: x: x=x.IK22_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ thing(x) & is(x, ContainerOf(const_0)) ] [ Prop_313 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if ((x == ContainerOf(const_0))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, ContainerOf(x)) ] [ Prop_314 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(const_0): x: x=TestContainmentRange(const_0,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ container(x) & 'closed'(x) & 'openable'(x) IN] : NOT[ 'off-stage'(x) NOT] ] [ Prop_315 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_78_t1_v9(x))) && ((Adj_79_t1_v9(x)))){ qcn_0++; if (~~(((~~Adj_9_t1_v9(x))))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ container(x) & 'closed'(x) & 'openable'(x) & not-'off-stage'(x) ] [ Prop_316 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_78_t1_v9(x))) && ((Adj_79_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ person(x) & 'alive'(x) & is('fragmentation-place', ContainerOf(x)) ] [ Prop_317 x x_ix counter; for (x=TestContainmentRange((Global_Vars-->68)): x: x=TestContainmentRange((Global_Vars-->68),x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('fragmentation-place', ContainerOf(x)) ] [ Prop_318 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange((Global_Vars-->68)): x: x=TestContainmentRange((Global_Vars-->68),x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & 'glass'(x) & encloses('fragmentation-place', x) ] [ Prop_319 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_191_t1_v9(x))) && (IndirectlyContains((Global_Vars-->68),x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : container(x) & 'closed'(x) & encloses(x, const_0) ] [ Prop_320 const_0 x x_ix ; for (x=IK5_First: x: x=x.IK5_Link){ if (((Adj_78_t1_v9(x))) && (IndirectlyContains(x,const_0))){ rtrue; } } rfalse; ]; ! True or false? ! [ Exists x : 'a digging tool'(x) & is('player', OwnerOf(x)) ] [ Prop_321 x x_ix ; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if (((Adj_143_t1_v9(x)))){ rtrue; } } rfalse; ]; ! True or false? ! [ Card>=1 x IN[ tunnel(x) & not-'placed'(x) IN] ] [ Prop_322 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK20_First: x: x=x.IK20_Link){ if ((~~((Adj_111_t1_v9(x))))){ qcn_0++; qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ tunnel(x) & not-'placed'(x) ] [ Prop_323 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK20_First: x: x=x.IK20_Link){ if ((~~((Adj_111_t1_v9(x))))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Exists x : 'a collapsing tool'(x) & is('player', OwnerOf(x)) ] [ Prop_324 x x_ix ; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if (((Adj_145_t1_v9(x)))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ monster(x) & is(x, (const_0.p157_granting)) ] [ Prop_325 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK19_First: x: x=x.IK19_Link){ if ((x == (const_0.p157_granting))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_326 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_327 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is(const_0, OwnerOf(x)) ] [ Prop_328 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((const_0 == OwnerOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ thing(x) & is(const_0, OwnerOf(x)) ] [ Prop_329 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in const_0) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>1 x IN[ person(x) & 'alive'(x) IN] : encloses(const_0, x) ] [ Prop_330 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(const_0,x))){ qcy_0++; } } } if (qcy_0 > 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_331 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_332 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ person(x) & is(x, (const_0.p238_grappling)) ] [ Prop_333 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (const_0.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ weapon(x) & encloses('player', x) ] [ Prop_334 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(player,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ clothing(x) & encloses('player', x) ] [ Prop_335 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK24_First: x: x=x.IK24_Link){ if ((IndirectlyContains(player,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ direction(x) & 'cardinal'(x) ] [ Prop_336 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ scroll(x) & 'prototypical'(x) & 'obfuscated'(x) ] [ Prop_337 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_240_t1_v9(x))) && ((~~Adj_41_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) & 'cursed'(x) & 'corruptible'(x) IN] : is('player', OwnerOf(x)) ] [ Prop_338 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_256_t1_v9(x))) && ((Adj_254_t1_v9(x)))){ qcn_0++; if ((player == OwnerOf(x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & 'cursed'(x) & 'corruptible'(x) & is('player', OwnerOf(x)) ] [ Prop_339 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_256_t1_v9(x))) && ((Adj_254_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'alive'(x) & 'undead'(x) IN] : 'off-stage'(x) ] [ Prop_340 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Adj_174_t1_v9(x)))){ qcn_0++; if (((~~Adj_9_t1_v9(x)))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & 'alive'(x) & 'off-stage'(x) & 'undead'(x) ] [ Prop_341 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((~~Adj_9_t1_v9(x))) && ((Adj_174_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ weapon(x) & encloses('player', x) ] [ Prop_342 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK17_First: x: x=x.IK17_Link){ if ((IndirectlyContains(player,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & not-'radiance'(x) & is('player', OwnerOf(x)) ] [ Prop_343 x x_ix ; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing) && (~~((Adj_194_t1_v9(x))))){ rtrue; } } rfalse; ]; ! How many x satisfy this? ! [ person(x) & 'alive'(x) & not-'undead'(x) & is('location', ContainerOf(x)) ] [ Prop_344 x x_ix counter; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x))) && (~~((Adj_174_t1_v9(x))))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'undead'(x) & is('location', ContainerOf(x)) ] [ Prop_345 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x))) && (~~((Adj_174_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=3 x IN[ package of ment(x) IN] : 'on-stage'(x) ] [ Prop_346 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK50_First: x: x=x.IK50_Link){ qcn_0++; if (((Adj_9_t1_v9(x)))){ qcy_0++; } } if (qcy_0 >= 3){ rtrue; } rfalse; ]; ! True or false? ! [ Exists x : symbol-extra(x) & encloses('considered room', x) ] [ Prop_347 x x_ix ; for (x=IK52_First: x: x=x.IK52_Link){ if ((IndirectlyContains((Global_Vars-->50),x))){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & is('noun', CarrierOf(x)) ] [ Prop_348 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in noun) if (CarrierOf(x)==parent(x)){ if ((x ofclass K17_weapon) && ((Adj_103_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ natural weapon(x) & is('noun', (x.component_parent)) ] [ Prop_349 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((noun == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & is('location', ContainerOf(x)) ] [ Prop_350 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ clothing(x) ] [ Prop_351 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK24_First: x: x=x.IK24_Link){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ clothing(x) & 'constriction-preventing'(x) IN] : is('chosen target', WearerOf(x)) ] [ Prop_352 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK24_First: x: x=x.IK24_Link){ if (((Adj_44_t1_v9(x)))){ qcn_0++; if (((Global_Vars-->37) == WearerOf(x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ clothing(x) & is('chosen target', WearerOf(x)) ] [ Prop_353 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in (Global_Vars-->37)) if (WearerOf(x)==parent(x)){ if ((x ofclass K24_clothing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses('chosen target', x) ] [ Prop_354 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains((Global_Vars-->37),x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ room(x) IN] : adjacent-to('location', x) ] [ Prop_355 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ qcn_0++; if ((TestAdjacency(real_location,x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ room(x) & adjacent-to('location', x) ] [ Prop_356 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if ((TestAdjacency(real_location,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ room(x) & adjacent-to('location', x) ] [ Prop_357 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if ((TestAdjacency(real_location,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_358 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is('player', CarrierOf(x)) ] [ Prop_359 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in player) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is('location', ContainerOf(x)) ] [ Prop_360 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & is('location', ContainerOf(x)) ] [ Prop_361 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Abstraction for set of x such that: ! [ room(x) & 'visited'(x) & 'safe'(x) ] [ Prop_362 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x))) && ((Adj_45_t1_v9(x)))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x))) && ((Adj_45_t1_v9(x)))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x))) && ((Adj_45_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x))) && ((Adj_45_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x))) && ((Adj_45_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K1_room) && ((Adj_56_t1_v9(x))) && ((Adj_45_t1_v9(x)))){ rtrue; } rfalse; } ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'alive'(x) IN] : domination('player', x) ] [ Prop_363 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x)))){ qcn_0++; if (((Relation_TestVtoV(player,Rel_Record_83,x,false)))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Abstraction for set of x such that: ! [ person(x) & 'alive'(x) & domination('player', x) ] [ Prop_364 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(player,Rel_Record_83,x,false)))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(player,Rel_Record_83,x,false)))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(player,Rel_Record_83,x,false)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(player,Rel_Record_83,x,false)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(player,Rel_Record_83,x,false)))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K8_person) && ((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(player,Rel_Record_83,x,false)))){ rtrue; } rfalse; } ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'alive'(x) IN] : domination(x, 'player') ] [ Prop_365 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x)))){ qcn_0++; if (((Relation_TestVtoV(x,Rel_Record_83,player,false)))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Abstraction for set of x such that: ! [ person(x) & 'alive'(x) & domination(x, 'player') ] [ Prop_366 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(x,Rel_Record_83,player,false)))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(x,Rel_Record_83,player,false)))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(x,Rel_Record_83,player,false)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(x,Rel_Record_83,player,false)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(x,Rel_Record_83,player,false)))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K8_person) && ((Adj_33_t1_v9(x))) && ((Relation_TestVtoV(x,Rel_Record_83,player,false)))){ rtrue; } rfalse; } ]; ! True or false? ! [ Card>=1 x IN[ person(x) IN] : is(x, ('player'.p238_grappling)) ] [ Prop_367 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; if ((x == (player.p238_grappling))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & is(x, ('player'.p238_grappling)) ] [ Prop_368 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if ((x == (player.p238_grappling))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ room(x) & 'unvisited'(x) & 'placed'(x) & 'placeable'(x) & 'notnogo'(x) ] [ Prop_369 x x_ix counter; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_57_t1_v9(x))) && ((Adj_111_t1_v9(x))) && ((Adj_117_t1_v9(x))) && ((Adj_126_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) & 'unvisited'(x) & 'notnogo'(x) ] [ Prop_370 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && ((Adj_57_t1_v9(x))) && ((Adj_126_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) & 'visited'(x) ] [ Prop_371 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && ((Adj_56_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ direction(x) & 'cardinal'(x) ] [ Prop_372 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ room(x) & 'visited'(x) ] [ Prop_373 x x_ix counter; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ tunnel(x) & 'visited'(x) ] [ Prop_374 x x_ix counter; for (x=IK20_First: x: x=x.IK20_Link){ if (((Adj_56_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ room(x) & 'visited'(x) ] [ Prop_375 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=2 x IN[ person(x) & 'seen'(x) IN] : 'alive'(x) ] [ Prop_376 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_91_t1_v9(x)))){ qcn_0++; if (((Adj_33_t1_v9(x)))){ qcy_0++; } } } if (qcy_0 >= 2){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & 'seen'(x) ] [ Prop_377 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && ((Adj_91_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & not-'off-stage'(x) & 'epic'(x) ] [ Prop_378 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if ((~~((~~Adj_9_t1_v9(x)))) && ((Adj_235_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ person(x) & 'dead'(x) ] [ Prop_379 x x_ix counter; for (x=IK8_First: x: x=x.IK8_Link){ if (((~~Adj_33_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ person(x) & 'dead'(x) & 'seen'(x) ] [ Prop_380 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((~~Adj_33_t1_v9(x))) && ((Adj_91_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_381 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & not-'off-stage'(x) ] [ Prop_382 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if ((~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ weapon(x) & 'readied'(x) & encloses(const_0, x) ] [ Prop_383 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x))) && (IndirectlyContains(const_0,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_384 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_385 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & 'marked for listing'(x) ] [ Prop_386 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_70_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ thing(x) & 'marked for listing'(x) ] [ Prop_387 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_70_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Abstraction for set of x such that: ! [ thing(x) & 'unmentioned'(x) ] [ Prop_388 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_73_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K2_thing) && ((Adj_73_t1_v9(x)))){ rtrue; } rfalse; } ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'hostile'(x) & 'alive'(x) IN] : encloses('location', x) ] [ Prop_389 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && ((Adj_33_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(real_location,x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & not-'passive'(x) & encloses('location', x) ] [ Prop_390 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_391 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : suit(x) & is('player', WearerOf(x)) ] [ Prop_392 x x_ix ; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K34_suit)){ rtrue; } } rfalse; ]; ! Find a random x satisfying: ! [ suit(x) & is('player', WearerOf(x)) ] [ Prop_393 x x_ix counter selection; selection = -1; while (true) { counter = 0; objectloop (x in player) if (WearerOf(x)==parent(x)){ if ((x ofclass K34_suit)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! How many x satisfy this? ! [ person(x) & 'alive'(x) & 'hater'(x) & is(const_0, ContainerOf(x)) ] [ Prop_394 const_0 x x_ix counter; for (x=TestContainmentRange(const_0): x: x=TestContainmentRange(const_0,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x))) && ((Adj_47_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ monster(x) ] [ Prop_395 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK19_First: x: x=x.IK19_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ monster(x) ] [ Prop_396 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK19_First: x: x=x.IK19_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & encloses(const_0, x) ] [ Prop_397 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if ((IndirectlyContains(const_0,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'hostile'(x) & 'alive'(x) IN] : encloses('location', x) ] [ Prop_398 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && ((Adj_33_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(real_location,x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ person(x) & 'hostile'(x) & 'alive'(x) & encloses('location', x) ] [ Prop_399 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && ((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ person(x) & 'hostile'(x) & 'alive'(x) IN] : encloses('location', x) ] [ Prop_400 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && ((Adj_33_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(real_location,x))){ qcy_0++; } } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ person(x) & 'hostile'(x) & 'alive'(x) & encloses('location', x) ] [ Prop_401 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_97_t1_v9(x))) && ((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ monster(x) & 'alive'(x) & not-'off-stage'(x) ] [ Prop_402 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK19_First: x: x=x.IK19_Link){ if (((Adj_33_t1_v9(x))) && (~~((~~Adj_9_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Force this to be true via 'now': ! [ DoesNotExist x IN[ person(x) IN] : pressing(const_0, x) ] [ Prop_403 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK8_First: x: x=x.IK8_Link){ qcn_0++; (Relation_NowNVtoV(const_0,Rel_Record_71,x,false)); qcy_0++; } if (qcy_0 == qcn_0){ } ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) ] [ Prop_404 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) ] [ Prop_405 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ scroll(x) & 'prototypical'(x) & 'obfuscated'(x) & having-scroll-effect(x, const_0) ] [ Prop_406 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_240_t1_v9(x))) && ((~~Adj_41_t1_v9(x))) && ((Relation_81(x,const_0)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ scroll(x) & 'prototypical'(x) & 'plain'(x) & having-scroll-effect(x, const_0) ] [ Prop_407 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_240_t1_v9(x))) && ((Adj_41_t1_v9(x))) && ((Relation_81(x,const_0)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ scroll(x) & 'prototypical'(x) & 'plain'(x) & having-scroll-effect(x, const_0) ] [ Prop_408 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_240_t1_v9(x))) && ((Adj_41_t1_v9(x))) && ((Relation_81(x,const_0)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ scroll(x) & 'actual'(x) & 'on-stage'(x) & 'obfuscated'(x) & having-scroll-effect(x, const_0) ] [ Prop_409 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_239_t1_v9(x))) && ((Adj_9_t1_v9(x))) && ((~~Adj_41_t1_v9(x))) && ((Relation_81(x,const_0)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Abstraction for set of x such that: ! [ person(x) & 'alive'(x) & not-'passive'(x) & encloses('location', x) ] [ Prop_410 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K8_person) && ((Adj_33_t1_v9(x))) && (~~((Adj_96_t1_v9(x)))) && (IndirectlyContains(real_location,x))){ rtrue; } rfalse; } ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, ContainerOf(x)) ] [ Prop_411 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(const_0): x: x=TestContainmentRange(const_0,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ rotting limb(x) ] [ Prop_412 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK53_First: x: x=x.IK53_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ direction(x) & 'cardinal'(x) ] [ Prop_413 x x_ix counter; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ direction(x) & 'cardinal'(x) ] [ Prop_414 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK3_First: x: x=x.IK3_Link){ if (((Adj_109_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) ] [ Prop_415 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & set-property(x, const_0) ] [ Prop_416 const_0 x x_ix counter; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && (x.p214_valuation == const_0)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find a random x satisfying: ! [ thing(x) & 'off-stage'(x) & 'not-too-difficult'(x) & set-property(x, const_0) ] [ Prop_417 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if (((~~Adj_9_t1_v9(x))) && ((Adj_38_t1_v9(x))) && (x.p214_valuation == const_0)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ room(x) & 'placed'(x) ] [ Prop_418 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ scroll(x) & 'prototypical'(x) & 'obfuscated'(x) & having-scroll-effect(x, const_0) ] [ Prop_419 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_240_t1_v9(x))) && ((~~Adj_41_t1_v9(x))) && ((Relation_81(x,const_0)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ scroll(x) & 'actual'(x) & 'plain'(x) & 'on-stage'(x) & having-scroll-effect(x, const_0) ] [ Prop_420 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK38_First: x: x=x.IK38_Link){ if (((Adj_239_t1_v9(x))) && ((Adj_41_t1_v9(x))) && ((Adj_9_t1_v9(x))) && ((Relation_81(x,const_0)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & is('location', ContainerOf(x)) ] [ Prop_421 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K8_person) && ((Adj_33_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ thing(x) IN] : is('armadillo stomach', ContainerOf(x)) ] [ Prop_422 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK2_First: x: x=x.IK2_Link){ qcn_0++; if ((I444_armadillo_stomach == ContainerOf(x))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is('armadillo stomach', ContainerOf(x)) ] [ Prop_423 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=TestContainmentRange(I444_armadillo_stomach): x: x=TestContainmentRange(I444_armadillo_stomach,x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ room(x) & 'placed'(x) & 'placeable'(x) & 'teleportable'(x) ] [ Prop_424 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && ((Adj_117_t1_v9(x))) && ((Adj_168_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find a random x satisfying: ! [ room(x) & 'placed'(x) & 'placeable'(x) & 'teleportable'(x) ] [ Prop_425 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && ((Adj_117_t1_v9(x))) && ((Adj_168_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ person(x) & 'alive'(x) & encloses('location', x) ] [ Prop_426 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK8_First: x: x=x.IK8_Link){ if (((Adj_33_t1_v9(x))) && (IndirectlyContains(real_location,x))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ DoesNotExist x IN[ weapon(x) & 'readied'(x) IN] : encloses(const_0, x) ] [ Prop_427 const_0 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK17_First: x: x=x.IK17_Link){ if (((Adj_103_t1_v9(x)))){ qcn_0++; if ((IndirectlyContains(const_0,x))){ qcy_0++; } } } if (qcy_0 == 0){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ natural weapon(x) & is(const_0, (x.component_parent)) ] [ Prop_428 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK18_First: x: x=x.IK18_Link){ if ((const_0 == (x.component_parent))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, OwnerOf(x)) ] [ Prop_429 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, WearerOf(x)) ] [ Prop_430 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (WearerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=1 x IN[ power(x) IN] : 'granted'(x) ] [ Prop_431 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK21_First: x: x=x.IK21_Link){ qcn_0++; if (((Adj_158_t1_v9(x)))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ power(x) & 'granted'(x) ] [ Prop_432 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK21_First: x: x=x.IK21_Link){ if (((Adj_158_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ thing(x) & is(const_0, ContainerOf(x)) ] [ Prop_433 const_0 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=TestContainmentRange(const_0): x: x=TestContainmentRange(const_0,x)){ if ((x ofclass K2_thing)){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Abstraction for set of x such that: ! [ room(x) & 'visited'(x) ] [ Prop_434 reason x x_ix total counter selection best best_with; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x)))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x)))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_56_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K1_room) && ((Adj_56_t1_v9(x)))){ rtrue; } rfalse; } ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) ] [ Prop_435 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) & 'placeable'(x) & not-'placed'(x) ] [ Prop_436 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_117_t1_v9(x))) && (~~((Adj_111_t1_v9(x))))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ monster(x) ] [ Prop_437 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK19_First: x: x=x.IK19_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) & 'placed'(x) & 'habitable'(x) ] [ Prop_438 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_111_t1_v9(x))) && ((Adj_119_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Card>=8 x IN[ room(x) & 'habitable'(x) IN] : 'placed'(x) ] [ Prop_439 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_119_t1_v9(x)))){ qcn_0++; if (((Adj_111_t1_v9(x)))){ qcy_0++; } } } if (qcy_0 >= 8){ rtrue; } rfalse; ]; ! Find next x satisfying: ! [ monster(x) & 'off-stage'(x) ] [ Prop_440 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK19_First: x: x=x.IK19_Link){ if (((~~Adj_9_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ room(x) & 'treasurable'(x) & 'placed'(x) ] [ Prop_441 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_121_t1_v9(x))) && ((Adj_111_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ power(x) ] [ Prop_442 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK21_First: x: x=x.IK21_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ power(x) & 'granted'(x) ] [ Prop_443 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK21_First: x: x=x.IK21_Link){ if (((Adj_158_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, OwnerOf(x)) ] [ Prop_444 const_0 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find a random x satisfying: ! [ monster(x) ] [ Prop_445 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK19_First: x: x=x.IK19_Link){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! True or false? ! [ Card>=1 x IN[ monster(x) IN] : NOT[ 'alive'(x) NOT] ] [ Prop_446 x x_ix qcy_0 qcn_0 ; qcy_0 = 0; qcn_0 = 0; for (x=IK19_First: x: x=x.IK19_Link){ qcn_0++; if (~~(((Adj_33_t1_v9(x))))){ qcy_0++; } } if (qcy_0 >= 1){ rtrue; } rfalse; ]; ! Find a random x satisfying: ! [ monster(x) & not-'alive'(x) ] [ Prop_447 x x_ix counter selection; selection = -1; while (true) { counter = 0; for (x=IK19_First: x: x=x.IK19_Link){ if ((~~((Adj_33_t1_v9(x))))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } ]; ! Find next x satisfying: ! [ room(x) & 'extra-accepting'(x) & 'placed'(x) ] [ Prop_448 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK1_First: x: x=x.IK1_Link){ if (((Adj_123_t1_v9(x))) && ((Adj_111_t1_v9(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ power(x) ] [ Prop_449 x x_ix ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK21_First: x: x=x.IK21_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : fragmentation grenade(x) & 'silver'(x) ] [ Prop_450 x x_ix ; for (x=IK48_First: x: x=x.IK48_Link){ if (((Adj_185_t1_v9(x)))){ rtrue; } } rfalse; ]; ! True or false? ! [ Exists x : fragmentation grenade(x) & 'silver'(x) ] [ Prop_451 x x_ix ; for (x=IK48_First: x: x=x.IK48_Link){ if (((Adj_185_t1_v9(x)))){ rtrue; } } rfalse; ]; ! True or false? ! [ Exists x : scythe(x) & 'readied'(x) & is('reaper', CarrierOf(x)) ] [ Prop_452 x x_ix ; objectloop (x in I457_reaper) if (CarrierOf(x)==parent(x)){ if ((x ofclass K43_scythe) && ((Adj_103_t1_v9(x)))){ rtrue; } } rfalse; ]; [ Resolver_0 t_0 t_1 filename line; if ((((t_1 ofclass K1_room)))) { return (PHR_1092_r12 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_1 t_0 t_1 t_2 filename line; if ((((t_0 ofclass K1_room)))) { (PHR_1122_r18 (t_0,t_1,t_2)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_2 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction)))) { return RoomOrDoorFrom(t_1,t_0) ; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_3 t_0 t_1 filename line; if ((((t_0 ofclass K4_door)))) { return OtherSideOfDoor(t_0,t_1) ; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_4 t_0 t_1 filename line; if ((((t_1 ofclass K8_person)))) { (PHR_866_r32 (t_0,t_1)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_5 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction))) && (((t_1 ofclass K1_room)))) { return (PHR_1096_r35 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_6 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction))) && (((t_1 ofclass K1_room)))) { return (PHR_1097_r36 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_7 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction))) && (((t_1 ofclass K1_room)))) { return (PHR_1098_r37 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_8 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction))) && (((t_1 ofclass K1_room)))) { return MapConnection(t_1,t_0) ; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_9 t_0 filename line; if ((((t_0 ofclass K1_room)))) { return (PHR_1316_r25 (t_0)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_10 t_0 filename line; if ((((t_0 ofclass K2_thing)))) { (PHR_940_r42 (t_0)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_11 t_0 t_1 t_2 filename line; if ((((t_0 ofclass K1_room))) && (((t_1 ofclass K2_thing)))) { (PHR_1122_r18 (t_0,t_1,t_2)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_12 t_0 t_1 filename line; if ((((t_0 ofclass K1_room)))) { return (PHR_1092_r12 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_13 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction))) && (((t_1 ofclass K1_room)))) { AssertMapConnection(t_1,t_0,nothing); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_14 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction)))) { return MapConnection(t_1,t_0) ; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_15 t_0 t_1 filename line; if ((((t_1 ofclass K1_room)))) { return RoomOrDoorFrom(t_1,t_0) ; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_16 t_0 t_1 filename line; if ((((t_1 ofclass K1_room)))) { return (PHR_1096_r35 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_17 t_0 t_1 filename line; if ((((t_1 ofclass K1_room)))) { return (PHR_1097_r36 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_18 t_0 t_1 filename line; if ((((t_1 ofclass K1_room)))) { return (PHR_1098_r37 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_19 t_0 t_1 filename line; if ((((t_1 ofclass K1_room)))) { return MapConnection(t_1,t_0) ; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_20 t_0 filename line; if ((((t_0 ofclass K17_weapon)))) { (PHR_1139_r59 (t_0)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_21 t_0 filename line; if ((((t_0 ofclass K8_person)))) { (PHR_861_r72 (t_0)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_22 t_0 t_1 t_2 t_3 filename line; if ((((t_0 ofclass K1_room)))) { return (PHR_1087_r87 (t_0,t_1,t_2,t_3)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_23 t_0 t_1 t_2 t_3 t_4 filename line; if ((((t_0 ofclass K1_room))) && (((t_1 ofclass K1_room)))) { (PHR_1088_r88 (t_0,t_1,t_2,t_3,t_4)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_24 t_0 t_1 t_2 filename line; if ((((t_0 ofclass K3_direction)))) { AssertMapConnection(t_1,t_0,t_2); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_25 t_0 t_1 t_2 t_3 t_4 filename line; if ((((t_0 ofclass K1_room)))) { (PHR_1088_r88 (t_0,t_1,t_2,t_3,t_4)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_26 t_0 t_1 t_2 filename line; if ((((t_0 ofclass K3_direction))) && (((t_2 ofclass K1_room)))) { AssertMapConnection(t_1,t_0,t_2); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_27 t_0 t_1 t_2 filename line; if ((((t_0 ofclass K3_direction))) && (((t_1 ofclass K1_room)))) { AssertMapConnection(t_1,t_0,t_2); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_28 t_0 t_1 t_2 filename line; if ((((t_0 ofclass K3_direction))) && (((t_1 ofclass K1_room))) && (((t_2 ofclass K1_room)))) { AssertMapConnection(t_1,t_0,t_2); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_29 t_0 t_1 filename line; if ((((t_0 ofclass K8_person)))) { (PHR_960_r28 (t_0,t_1)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_30 t_0 t_1 filename line; if ((((t_0 ofclass K8_person)))) { (PHR_1135_r61 (t_0,t_1)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_31 t_0 t_1 filename line; if ((((t_0 ofclass K8_person)))) { (PHR_1134_r60 (t_0,t_1)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_32 t_0 filename line; if ((((t_0 ofclass K17_weapon)))) { return ((PHR_1957_r112 (t_0))); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_33 t_0 filename line; if ((((t_0 ofclass K8_person)))) { (PHR_1016_r82 (t_0)); rtrue; } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_34 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction)))) { return (PHR_1096_r35 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_35 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction)))) { return (PHR_1097_r36 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; [ Resolver_36 t_0 t_1 filename line; if ((((t_0 ofclass K3_direction)))) { return (PHR_1098_r37 (t_0,t_1)); } ArgumentTypeFailed(filename, line); rfalse; ]; Array ConstantListPointers --> 0 0; Constant SC_279 = " : (SPACE)"; Constant SC_269 = " "; Constant SC_272 = " "; Constant SC_273 = " Current difficulty : "; Constant SC_282 = " Display help menu : M"; Constant SC_283 = " Quit : Q"; Constant SC_281 = " Skip to Normal difficulty : N"; Constant SC_280 = " Start a new game : S"; Constant SC_271 = " Your best winning streak : "; Constant SC_270 = " Your current winning streak : "; Constant SC_268 = " Your total victories : "; Constant SC_1611 = " "; Constant SC_209 = " "; Constant SC_893 = " ("; Constant SC_916 = " (blinding light)"; Constant SC_1689 = " (but that may have changed when you read this). Using a mobile interpreter like "; Constant SC_898 = " (concentration)"; Constant SC_882 = " (dagger benefits from tension)"; Constant SC_922 = " (defended by slaves)"; Constant SC_874 = " (defender dodging)"; Constant SC_871 = " (defender parrying)"; Constant SC_1597 = " (dexterity score)"; Constant SC_958 = " (executioner's axe benefits from tension)"; Constant SC_915 = " (feeling down)"; Constant SC_955 = " (golem spinning)"; Constant SC_947 = " (heat)"; Constant SC_896 = " (inherent bonus)"; Constant SC_897 = " (inherent penalty)"; Constant SC_274 = " (level "; Constant SC_887 = " (lower concentration bonus for jumping bomb)"; Constant SC_962 = " (ment makes you shrug off damage)"; Constant SC_913 = " (ment)"; Constant SC_890 = " (missing limbs)"; Constant SC_576 = " (now "; Constant SC_1593 = " (perception score)"; Constant SC_964 = " (power of the ape)"; Constant SC_577 = " (readied)"; Constant SC_881 = " (retreat covered by smoke)"; Constant SC_880 = " (running covered by smoke)"; Constant SC_966 = " (scales)"; Constant SC_879 = " (smoke)"; Constant SC_888 = " (speed of the jumping bomb)"; Constant SC_921 = " (stunned)"; Constant SC_899 = " (tension)"; Constant SC_963 = " (the law is with you)"; Constant SC_905 = " (the smoky blade is hard to see)"; Constant SC_904 = " (the smoky robe is hard to see)"; Constant SC_652 = " (to "; Constant SC_1133 = " (which breaks "; Constant SC_1131 = " (which is "; Constant SC_1605 = " (willpower score)"; Constant SC_914 = " (your defence increased by ment)"; Constant SC_667 = " + "; Constant SC_883 = " + 1 (defender is overconfident)"; Constant SC_919 = " + 1 (huge ape)"; Constant SC_867 = " + 1 (vampire)"; Constant SC_949 = " + 10 (curse of death)"; Constant SC_974 = " + 100% (robe of the dead mage)"; Constant SC_980 = " + 100% (smoke demon is extremely dense)"; Constant SC_918 = " + 2 (beloved of Aite)"; Constant SC_891 = " + 2 (corpse missing a leg)"; Constant SC_1154 = " + 2 (crown of the empire)"; Constant SC_901 = " + 2 (defender blind)"; Constant SC_923 = " + 2 (defender uninterested in own safety)"; Constant SC_920 = " + 2 (gargantuan ape)"; Constant SC_1151 = " + 2 (goggles of acuity)"; Constant SC_878 = " + 2 (hidden)"; Constant SC_951 = " + 2 (large size)"; Constant SC_907 = " + 2 (slowed down by plate mail)"; Constant SC_917 = " + 2 (the law is with you)"; Constant SC_886 = " + 2 (unholy symbols)"; Constant SC_1153 = " + 2 (vampire)"; Constant SC_868 = " + 2 (you are a vampire)"; Constant SC_944 = " + 2 (you are running)"; Constant SC_909 = " + 2 (you are slowed down by carrying a suit of plate mail)"; Constant SC_971 = " + 25% (robe of the dead mage)"; Constant SC_977 = " + 25% (smoke demon is somewhat dense)"; Constant SC_925 = " + 3 ("; Constant SC_906 = " + 3 (Nomos likes the executioner's axe)"; Constant SC_1152 = " + 3 (skilled)"; Constant SC_910 = " + 3 (you are a glass cannon)"; Constant SC_928 = " + 3 (you are slowed down by the thorny bushes)"; Constant SC_892 = " + 4 (corpse missing both legs)"; Constant SC_1155 = " + 4 (crown of Hargo)"; Constant SC_952 = " + 4 (huge size)"; Constant SC_946 = " + 4 (silver weapon)"; Constant SC_870 = " + 4 (you are running)"; Constant SC_927 = " + 5 ("; Constant SC_968 = " + 5 (slaying undead)"; Constant SC_876 = " + 6 (defender taking risky action)"; Constant SC_973 = " + 75% (robe of the dead mage)"; Constant SC_979 = " + 75% (smoke demon is very dense)"; Constant SC_953 = " + 8 (gargantuan size)"; Constant SC_972 = " +50% (robe of the dead mage)"; Constant SC_978 = " +50% (smoke demon is quite dense)"; Constant SC_775 = " - "; Constant SC_875 = " - 0 (cannot dodge)"; Constant SC_873 = " - 0 (cannot parry against "; Constant SC_872 = " - 0 (cannot parry with "; Constant SC_965 = " - 1 (armadillo)"; Constant SC_969 = " - 1 (barkskin)"; Constant SC_866 = " - 1 (ghoul)"; Constant SC_911 = " - 1 (robe of the dead mage)"; Constant SC_908 = " - 1 (slowed down by plate mail)"; Constant SC_950 = " - 1 (small size)"; Constant SC_943 = " - 1 (you are a ghoul)"; Constant SC_948 = " - 10 (blessing of life)"; Constant SC_982 = " - 100% (attacker ethereal)"; Constant SC_981 = " - 100% (defender ethereal)"; Constant SC_976 = " - 100% (no means of attack)"; Constant SC_970 = " - 100% (protection)"; Constant SC_924 = " - 2 (afraid of "; Constant SC_902 = " - 2 (bat form retreat bonus)"; Constant SC_869 = " - 2 (bat form)"; Constant SC_889 = " - 2 (confused)"; Constant SC_961 = " - 2 (dragon armour)"; Constant SC_903 = " - 2 (essence of caution)"; Constant SC_885 = " - 2 (holy symbols)"; Constant SC_959 = " - 2 (plate mail)"; Constant SC_912 = " - 2 (rod of the master builder)"; Constant SC_877 = " - 2 (rust)"; Constant SC_945 = " - 2 (silver weapon)"; Constant SC_967 = " - 2 (stunning)"; Constant SC_884 = " - 2 (your cowardice)"; Constant SC_929 = " - 2 (your retreat covered by the thorny bushes)"; Constant SC_956 = " - 3 ("; Constant SC_900 = " - 3 (blindness)"; Constant SC_954 = " - 3 (tough scales)"; Constant SC_960 = " - 4 (dragon armour)"; Constant SC_975 = " - 50% (rod of the master builder)"; Constant SC_1478 = " - the "; Constant SC_1704 = " -- achieved on "; Constant SC_1759 = " -- but the scene changes before you can focus on any details."; Constant SC_266 = " -- by Victor Gijsbers"; Constant SC_1703 = " -- not yet achieved"; Constant SC_1712 = " -- though you are a little hesitant to start your habit again"; Constant SC_738 = " -- threatening instant death upon contact."; Constant SC_509 = " -- unless the huge shadow behind him is a creature threatening to consume even him"; Constant SC_1315 = " --"; Constant SC_778 = " / "; Constant SC_930 = " = "; Constant SC_1610 = " >"; Constant SC_631 = " As you take back your scroll, something snaps within the analyser. It will probably never work again."; Constant SC_801 = " Confused by the mirrors, "; Constant SC_207 = " N = Next"; Constant SC_276 = " OPTIONS:"; Constant SC_704 = " One of the chains catches "; Constant SC_208 = " P = Previous"; Constant SC_267 = " SCORES:"; Constant SC_808 = " Seeing through the illusion created by the mirrors, "; Constant SC_1238 = " The decision to do this suddenly seems exceedingly rash."; Constant SC_694 = " The thorns deal "; Constant SC_1242 = " You feel very "; Constant SC_999 = " You frantically try to stay on the bridge, but to no avail. Your left foot slips, and you tumble down towards fiery death."; Constant SC_1000 = " You frantically try to stay on the bridge, slip, slide past the edge -- and then, somehow, manage to regain your footing at the last moment. That was some extraordinary luck."; Constant SC_1005 = " You frantically try to stay on the staircase, but to no avail. Your right foot slips, and you tumble down. "; Constant SC_1240 = " You relish the smell. There is no need to hurry."; Constant SC_1758 = " You see "; Constant SC_1241 = " You want to absorb souls. Lots of souls. Now."; Constant SC_1239 = " You will show them all that you are not to be toyed with!"; Constant SC_1555 = " achievement!"; Constant SC_957 = " acts as a Faraday cage)"; Constant SC_926 = " acts as a lightning rod)"; Constant SC_687 = " actually the "; Constant SC_1594 = " against a target number of "; Constant SC_1342 = " against the pressure."; Constant SC_1202 = " an enemy when you are attacked.)"; Constant SC_1451 = " an enemy, accepting one damage for a chance to deal one damage to the enemy. "; Constant SC_1198 = " an enemy.)"; Constant SC_1459 = " an enemy; this means you attack with a -2 damage penalty, but if you hit you will decrease the opponent's effectiveness for several rounds. "; Constant SC_1113 = " and "; Constant SC_706 = " and breaking "; Constant SC_708 = " and killing you."; Constant SC_597 = " and tiny brown spores of the "; Constant SC_1194 = " any non-undead person you have seen, instantly teleporting to their location.)"; Constant SC_1466 = " anyone you have seen, which will instantly teleport you to their location -- although Death will assert his power over you in the process. "; Constant SC_1260 = " appears before you!"; Constant SC_352 = " appears. "; Constant SC_449 = " are already balanced enough."; Constant SC_455 = " are well-balanced."; Constant SC_1506 = " are: attack (a), parry (p), dodge (do), concentrate (c), status, remember (r), sense, pray, equip, go to. Some of the standard interactive fiction commands are: look (l), inventory (i), go, take, drop, wear, take off, read, put A in B."; Constant SC_1037 = " around with "; Constant SC_1461 = " as a reaction. This counterattack will sometimes, but not always, happen before the enemy hits you. "; Constant SC_1470 = " as a reaction; the attacker may lose concentration and become confused. "; Constant SC_314 = " as suddenly as it appeared!"; Constant SC_1107 = " aside."; Constant SC_1446 = " attack bonus, "; Constant SC_1449 = " attack bonus, +"; Constant SC_671 = " attack modifier"; Constant SC_1420 = " attack, +"; Constant SC_1174 = " attack, +1 defence, +"; Constant SC_1428 = " attack, -"; Constant SC_804 = " attacking a reflection before realising "; Constant SC_810 = " attacks"; Constant SC_425 = " attempt to run "; Constant SC_702 = " attempt"; Constant SC_1580 = " await the consequences."; Constant SC_361 = " away."; Constant SC_997 = " balance"; Constant SC_931 = " beat"; Constant SC_381 = " becomes "; Constant SC_374 = " becomes less thick."; Constant SC_372 = " becomes thicker."; Constant SC_526 = " before you can crawl out again."; Constant SC_1334 = " before your imposing presence."; Constant SC_644 = " behind you!"; Constant SC_894 = " bonus)"; Constant SC_1583 = " buried between the body parts. It is slightly wet and smelly, but still usable."; Constant SC_1571 = " bursts out of the ground, impaling "; Constant SC_1566 = " bursts out of the ground, impaling you for "; Constant SC_1562 = " bursts out of the ground, skewering you for "; Constant SC_1437 = " by "; Constant SC_1441 = " by the aswang, which gives you an initiative penalty."; Constant SC_1439 = " by the giant tentacle, which gives you a -2 attack penalty on your next attack."; Constant SC_1435 = " by: "; Constant SC_664 = " carries "; Constant SC_1225 = " casts a ray of disintegration at "; Constant SC_1218 = " casts a spell of magical healing on "; Constant SC_362 = " catches fire!"; Constant SC_1166 = " collapses!"; Constant SC_1364 = " come out of the ground everywhere around you!"; Constant SC_1063 = " concentrate"; Constant SC_1134 = " concentration)"; Constant SC_707 = " concentration."; Constant SC_1348 = " confused."; Constant SC_1333 = " cower"; Constant SC_660 = " creature"; Constant SC_1311 = " currently resides."; Constant SC_556 = " cursed and cannot be removed with normal means."; Constant SC_563 = " cursed and that you cannot let go."; Constant SC_1448 = " damage bonus"; Constant SC_1430 = " damage bonus."; Constant SC_1129 = " damage from the fall."; Constant SC_1432 = " damage reduction."; Constant SC_1130 = " damage to "; Constant SC_698 = " damage"; Constant SC_1421 = " damage, -"; Constant SC_668 = " damage; "; Constant SC_942 = " deal"; Constant SC_319 = " decays completely."; Constant SC_1209 = " defence penalty."; Constant SC_932 = " defence rating of "; Constant SC_1423 = " defence, +"; Constant SC_1025 = " defensive reflexes, transferring them to "; Constant SC_367 = " detected you!"; Constant SC_1027 = " dexterity, transferring it to "; Constant SC_373 = " disappears completely."; Constant SC_1216 = " disappears into the deadly abyss, the world of the living is shattered."; Constant SC_1553 = " dissolve"; Constant SC_933 = " do"; Constant SC_1694 = " doubly so."; Constant SC_307 = " drift into the room."; Constant SC_626 = " drops on the ground."; Constant SC_1468 = " enemies, which will give them an attack penalty against you that only disappears when they successfully hit you. If the attempt fails, the enemy dominates you instead. Weaker enemies are easier to dominate. "; Constant SC_1422 = " enemy damage, +"; Constant SC_1479 = " exit of "; Constant SC_1321 = " fail"; Constant SC_336 = " falls away. You are left feeling empty and only half alive."; Constant SC_1030 = " falls off."; Constant SC_1908 = " features a system of permanent death, and as such some of the meta-game commands do not have the same effects they have in other interactive fiction. Undoing is simply disallowed: it would take all tension out of the game. Saving happens automatically every turn, and when you start the game again, you must continue the previous game. You can always restart, but this will reset your winning streak to 0."; Constant SC_599 = " fill the room."; Constant SC_1931 = " fists"; Constant SC_1036 = " fool"; Constant SC_1572 = " for "; Constant SC_1699 = " for special mention, since it was that game that gave me the idea of making a ~coffee break~ roguelike -- finally a project I could finish! Apart from the fact that a roguelike is never finished, of course."; Constant SC_1416 = " from damage dealt by attacks."; Constant SC_1481 = " from here"; Constant SC_1501 = " from here."; Constant SC_1110 = " get"; Constant SC_662 = " group and "; Constant SC_395 = " has cooled down completely."; Constant SC_1905 = " has infinitely many difficulty settings (well, as many as can be fitted into a single integer variable), one of which is automatically chosen at the start of the game based on your previous performance. If you have never won a game before, "; Constant SC_1251 = " has not been written in braille."; Constant SC_723 = " head"; Constant SC_452 = " health from "; Constant SC_451 = " health from you to "; Constant SC_994 = " health"; Constant SC_1208 = " health, but it also gives you a permanent -"; Constant SC_987 = " health."; Constant SC_1175 = " health; when you score a hit, your damage will increase for a short time.)"; Constant SC_609 = " here"; Constant SC_1534 = " hit"; Constant SC_1868 = " if you don't take any actions (except actions that take no time, like examining and looking), you can retreat without fear of being attacked. Use this to scout out the dungeon around you."; Constant SC_710 = " immediately dies."; Constant SC_1115 = " in "; Constant SC_627 = " in the curious machine, but when nothing happens, you take it out again."; Constant SC_625 = " in the curious machine. It starts clicking and beeping, and after a short while, "; Constant SC_414 = " instead."; Constant SC_633 = " into the lava."; Constant SC_655 = " is "; Constant SC_1681 = " is a much more computation intensive game than the average piece of interactive fiction. Both the random dungeon generation at the beginning of the game and the different systems that run every turn take some computing power. While "; Constant SC_692 = " is already dead."; Constant SC_1848 = " is an interactive fiction roguelike. (You can find more information about both interactive fiction and roguelikes in the previous menu.) You will be guiding a nameless adventurer through a randomly generated dungeon, which is different every time you play. There are treasures to be found, monsters to be fought, and powers to be gained, as you attempt to defeat your ultimate opponent: Malygris, the Wizard of Kerkerkruip. Combat is handled by a powerful combat system that is explained in other parts of this manual."; Constant SC_1700 = " is copyright 2011 by Victor Gijsbers. It is released under the GPL version 3 or any later version; source code should be found wherever you found this game. (If you make a modified version, please do not call it "; Constant SC_390 = " is freed from the mindslug's influence."; Constant SC_1119 = " is full of rust spores."; Constant SC_461 = " is imbalanced and needs a buff (permanent +1 attack bonus)."; Constant SC_462 = " is imbalanced and needs a nerf (permanent -1 attack bonus)."; Constant SC_701 = " is killed by the thorns!"; Constant SC_938 = " is killed instantly"; Constant SC_1141 = " is levelless and cannot heal you"; Constant SC_1910 = " is not cheat-proof: if you really wish to backup your saved positions or gain incredible winning streaks, you can. The restrictions are just there to protect honourable people from their worser selves."; Constant SC_1691 = " is not recommended! If neither of these strategies work, your device is not powerful enough to run "; Constant SC_713 = " is not your enemy."; Constant SC_1325 = " is now under the control of the mindslug."; Constant SC_1143 = " is quicker and far more powerful, swallowing yours and thus coming back to life. You, however, are destroyed for all eternity"; Constant SC_712 = " is your friend, not your enemy!"; Constant SC_1015 = " is"; Constant SC_1299 = " it coming in time, and manage"; Constant SC_534 = " it."; Constant SC_678 = " jumping out of it!"; Constant SC_675 = " jumps out!"; Constant SC_1537 = " kill"; Constant SC_1741 = " lose half of your health."; Constant SC_1538 = " lose"; Constant SC_1074 = " loses "; Constant SC_769 = " lung"; Constant SC_1002 = " manage"; Constant SC_1283 = " manages to evade the dagger."; Constant SC_484 = " massive marble fist breaks free and surrenders itself to the laws of gravity. Your body underneath is forced to surrender as well."; Constant SC_1535 = " miss"; Constant SC_807 = " mistake."; Constant SC_693 = " must move through the thorny bushes to reach "; Constant SC_1745 = " new tunnels and "; Constant SC_989 = " no longer confused."; Constant SC_1021 = " no longer fear"; Constant SC_1237 = " nostril, pressing the other side of your nose closed with your fingers. You inhale deeply -- and with a burning sensation, the magical essence flows up and into your brain."; Constant SC_934 = " not overcome "; Constant SC_1374 = " now "; Constant SC_1067 = " now maximally concentrated."; Constant SC_1065 = " now mildly concentrated."; Constant SC_1066 = " now quite concentrated."; Constant SC_481 = " objects have turned into "; Constant SC_1749 = " objects into "; Constant SC_560 = " of "; Constant SC_1282 = " of its own accord. "; Constant SC_1293 = " of your health."; Constant SC_1747 = " old passages; and it also allows its possessor to walk away from combat in relative safety."; Constant SC_998 = " on the edge of the bridge. "; Constant SC_1004 = " on the edge of the staircase. "; Constant SC_591 = " or "; Constant SC_1616 = " or H to reveal another hint"; Constant SC_1353 = " or smoke rise up from the ground."; Constant SC_1104 = " out of the way."; Constant SC_1659 = " out of your body. "; Constant SC_430 = " penalty on their attacks.)"; Constant SC_895 = " penalty)"; Constant SC_1028 = " perception, transferring it to "; Constant SC_1858 = " played on hardcore mode (which is the only mode that features permanent death) comes quite close to being a roguelike, although it is not turn-based."; Constant SC_1220 = " points of damage."; Constant SC_1775 = " portal dominates the room."; Constant SC_1457 = " power, which covers you in hard scales that reduce all damage done to you. Using this power costs you some health, and it expires when you attack. "; Constant SC_1805 = " preparing to launch itself at one of its enemies."; Constant SC_1341 = " protect"; Constant SC_1035 = " read"; Constant SC_1111 = " ready for quick evasive maneuvers."; Constant SC_1301 = " realise"; Constant SC_1128 = " receives "; Constant SC_1345 = " remain"; Constant SC_1319 = " resist"; Constant SC_1592 = " rolls"; Constant SC_1686 = " runs the game faster than "; Constant SC_1682 = " runs well on all reasonably recent computers, including netbooks and even tablets and some phones, older hardware and smaller devices may not be able to run it."; Constant SC_364 = " rust"; Constant SC_1123 = " rust-releasing."; Constant SC_1298 = " see"; Constant SC_1012 = " size!"; Constant SC_1179 = " skill, which gives you a temporary damage reduction that costs some health to use and expires as soon as you attack.)"; Constant SC_1170 = " skill.)"; Constant SC_1458 = " skill: you can try to "; Constant SC_1667 = " slaves fighting to the death for the pleasure of their reptile "; Constant SC_1006 = " slips and falls!"; Constant SC_1001 = " slips and falls, disappearing into the lava below."; Constant SC_1338 = " smashed in the process"; Constant SC_318 = " so vast as to be beyond comprehension."; Constant SC_1837 = " sphere of utter darkness is an abyss of the soul, one of the most fearsome of undead monsters. Not only does it sap the strength of all nearby living creatures, it also feeds on the souls of the recently departed."; Constant SC_1839 = " sphere of utter darkness."; Constant SC_1808 = " stands here. It is the Reaper, a serial killer who believes he is Death himself."; Constant SC_803 = " starts"; Constant SC_1085 = " strike"; Constant SC_326 = " suddenly appears!"; Constant SC_1296 = " suddenly launches several of its chains in an attempt to grab "; Constant SC_1567 = " suddenly looks "; Constant SC_1223 = " suddenly teleports away!"; Constant SC_1224 = " suddenly teleports into the room!"; Constant SC_323 = " summoning ritual that Malygris was attempting to perform."; Constant SC_1146 = " survives the blast."; Constant SC_1222 = " teleports away, but reappears in the exact same spot."; Constant SC_1475 = " that will impede most enemies. "; Constant SC_1377 = " the hex"; Constant SC_512 = " the individual creatures, if you wanted to."; Constant SC_1320 = " the mindslug's influence!"; Constant SC_811 = " the real "; Constant SC_1010 = " the swarm of daggers. They will need to spend one action regrouping themselves."; Constant SC_443 = " to "; Constant SC_1429 = " to all abilities"; Constant SC_1424 = " to all abilities."; Constant SC_703 = " to duck under the whirling chains. "; Constant SC_984 = " to escape unscathed."; Constant SC_1300 = " to keep the weapon out of the golem's reach."; Constant SC_637 = " to live? Never!"; Constant SC_1150 = " to pieces!"; Constant SC_1040 = " to ready "; Constant SC_1039 = " to ready it."; Constant SC_1322 = " to resist the mindslug's mental blast, and "; Constant SC_1003 = " to stay on the bridge."; Constant SC_1007 = " to stay on the staircase."; Constant SC_1472 = " to the goddess even when you are not in her temple. This power does not work in the temples of other gods. "; Constant SC_1827 = " to the rotting corpse."; Constant SC_1121 = " to the stomach of the armadillo."; Constant SC_1332 = " to try that!"; Constant SC_453 = " to you."; Constant SC_755 = " towards "; Constant SC_1361 = " transforms and toughens. It now looks like the bark of a tree."; Constant SC_1221 = " tries to teleport away, but something makes this impossible!"; Constant SC_434 = " turns from now. The law will be with you.~"; Constant SC_716 = " turns on you!"; Constant SC_1684 = " turns out to be too slow for your computer, there are a few things you can try. First, closing some other programs may help. Second, using another interpreter can make a difference: for instance, currently "; Constant SC_1086 = " up a defensive pose."; Constant SC_1297 = " weapon. "; Constant SC_665 = " wears "; Constant SC_1302 = " what is happening only when it is too late, and a chain has already wrapped itself around "; Constant SC_1190 = " when killed, giving you a last chance to defeat your enemy and perhaps absorb his soul in the process.)"; Constant SC_1906 = " will be in ~easy~ mode, which gives you substantial bonuses. In addition, some of the more confusing monsters, items and locations will not appear in the dungeon."; Constant SC_1850 = " will contain more information about interactive fictions and how to play them."; Constant SC_377 = " will wear off in five turns."; Constant SC_378 = " will wear off next turn."; Constant SC_1323 = " willpower decreases to "; Constant SC_1026 = " willpower, transferring it to "; Constant SC_711 = " with a loud smack, but it deals no damage"; Constant SC_705 = " with a loud smack, dealing "; Constant SC_725 = " with its fists ready to swing"; Constant SC_1389 = " with its thieving little claws."; Constant SC_1318 = " with psionic energy. "; Constant SC_603 = " you "; Constant SC_561 = " you also see "; Constant SC_1144 = "! As your soul swallows that of your enemy whole, you feel your body reconstituting itself"; Constant SC_426 = "!"; Constant SC_1491 = "~"; Constant SC_1522 = "~, you say"; Constant SC_852 = "~Aite be praised!~ These are the last words you hear as magical pain racks your body."; Constant SC_853 = "~Aite be praised!~ These are the last words you hear as the defender hacks you apart."; Constant SC_851 = "~Aite be praised!~ These are the last words you hear as the healer's sword penetrates your heart."; Constant SC_817 = "~But... my adventure was only just beginning!~ cries Miranda."; Constant SC_311 = "~Do not be afraid, for I will end your suffering!~ the Reaper exclaims."; Constant SC_389 = "~I knew we shouldn't have trusted Ningauble,~ Mouser states. ~Let's get out of here as quickly as possible.~"; Constant SC_1059 = "~I see your end!~ the Reaper announces as he finishes his contemplations."; Constant SC_830 = "~I will haunt you come Samhain!~, whispers Bodmall as her body returns to the earth."; Constant SC_1094 = "~Nobody can touch Death!~ says the Reaper as he ducks away."; Constant SC_846 = "~Now go to sleep, my child,~ says the Reaper. ~You have suffered enough.~"; Constant SC_1099 = "~Save me, great Aite!~ the healer exclaims as he attempts to duck away."; Constant SC_388 = "~Thanks, man,~ says Fafhrd. ~I guess you have earned yourself some help.~"; Constant SC_820 = "~This -- but this is impossible! Death is me!~ the Reaper shouts as the bony hands of disillusion pull him to the underworld."; Constant SC_1100 = "~You will never get me!~ the tormentor exclaims as she attempts to duck away."; Constant SC_1493 = "~look~, ~examine~ and ~inventory~ are free actions, so use them often"; Constant SC_582 = "'s "; Constant SC_1718 = "(+1 perception, +2 defence bonus when retreating, sometimes lose initiative.)"; Constant SC_1722 = "(+1 willpower, +1 attack, unable to retreat.)"; Constant SC_1732 = "(It grants a +2 bonus on willpower checks.)"; Constant SC_1452 = "(Level 1)"; Constant SC_1462 = "(Level 2)"; Constant SC_1469 = "(Level 3)"; Constant SC_1473 = "(Level 4)"; Constant SC_586 = "(Perhaps you wanted to dodge? The abbreviation for that is ~do~.)"; Constant SC_583 = "(Remember: Nomos has told you to attack this turn.)"; Constant SC_1734 = "(The crown grants a +4 bonus on willpower checks, but a -1 penalty to defence.)"; Constant SC_1730 = "(They grant a +2 bonus on perception checks.)"; Constant SC_1728 = "(This necklace lowers the initiative of anyone who gets hit -- including you -- thus increasing the probability that a successful attacker can immediately act again.)"; Constant SC_1738 = "(When absorbing a soul, the player receives much more health, but permanently loses one or more points of defence.)"; Constant SC_1726 = "(Whenever you wait, the tension is halved.)"; Constant SC_1926 = "(Your "; Constant SC_580 = "(copied and copied by mirrors)"; Constant SC_579 = "(mirrored all around you)"; Constant SC_581 = "(multiplied ad infinitum)"; Constant SC_578 = "(reflected thousandfold)"; Constant SC_197 = ") "; Constant SC_1486 = ") in "; Constant SC_1600 = ") is "; Constant SC_275 = ")"; Constant SC_1601 = ")."; Constant SC_1118 = "* "; Constant SC_1604 = "* Added "; Constant SC_1112 = "* Adding connection between "; Constant SC_1116 = "* Cursed "; Constant SC_1120 = "* Moved "; Constant SC_1602 = "* Placed "; Constant SC_1657 = "* Placing "; Constant SC_1603 = "* Putting "; Constant SC_1114 = "* placed "; Constant SC_1793 = "+ "; Constant SC_670 = "+"; Constant SC_1443 = "+2"; Constant SC_1444 = "+4"; Constant SC_1445 = "+8"; Constant SC_592 = ", "; Constant SC_555 = ", a chill goes through your body. You realise that "; Constant SC_1344 = ", aiming to confuse and confound."; Constant SC_1064 = ", and "; Constant SC_1569 = ", as if divinely inspired."; Constant SC_1041 = ", but cannot get a hold on it."; Constant SC_1709 = ", but especially to undead"; Constant SC_1038 = ", but fail"; Constant SC_1211 = ", but feel how it disappears into the "; Constant SC_420 = ", but find your body attacking itself instead!"; Constant SC_419 = ", but find yourself attacking "; Constant SC_1330 = ", but provoke no reaction at all."; Constant SC_1336 = ", but suddenly feel very afraid!"; Constant SC_1227 = ", but the object resists!"; Constant SC_1313 = ", but the strain is too much for your weak body."; Constant SC_1512 = ", but you're afraid your gods are too young to have power here."; Constant SC_357 = ", dealing "; Constant SC_1464 = ", dealing as much damage to your enemy as the enemy dealt to you. This gives you a last chance to kill your enemy, and perhaps absorb his soul and come back to life in the process. "; Constant SC_1226 = ", destroying the object!"; Constant SC_1598 = ", failing the dexterity check."; Constant SC_1595 = ", failing the perception check."; Constant SC_1606 = ", failing the willpower check."; Constant SC_768 = ", his tiny claws ready to strike."; Constant SC_1455 = ", hitting an enemy gives you a temporary damage bonus. "; Constant SC_728 = ", intent on stunning"; Constant SC_936 = ", it explodes with a terrible bang. "; Constant SC_1383 = ", killing "; Constant SC_748 = ", preparing a magical attack."; Constant SC_1303 = ", pulls sharply, and sends the weapon flying across the room."; Constant SC_1219 = ", removing "; Constant SC_1523 = ", revealing your presence"; Constant SC_741 = ", saying ~Et in Arcadia ego!~ in a booming voice"; Constant SC_1860 = ", so it is important to understand the basic concepts and commands. Every person in the game has a certain amount of health; you can see yours in the status bar above the normal game window. If someone's health drops to 0, that person is dead. Killing your enemies is your main goal, while the enemies want to kill you. (In some special circumstances, persons in the dungeon might team up with you, or may attack each other.)"; Constant SC_1599 = ", succeeding at the dexterity check."; Constant SC_1596 = ", succeeding at the perception check."; Constant SC_1607 = ", succeeding at the willpower check."; Constant SC_472 = ", turning it into a silver weapon."; Constant SC_473 = ", turning it into silver."; Constant SC_990 = ", weakened by being heated, is "; Constant SC_1807 = ", wielding a huge scythe,"; Constant SC_762 = ", with "; Constant SC_740 = ", with a skulllike grin"; Constant SC_714 = ", you are unable to attack anyone else."; Constant SC_683 = ", you are unable to fiddle with your clothing."; Constant SC_611 = ", you are unable to get a good look at your possessions!"; Constant SC_645 = ", you are unable to move."; Constant SC_621 = ", you are unable to reach "; Constant SC_634 = ", you are unable to run away!"; Constant SC_1679 = ", you have done the impossible. You absorb its soul, and though this process leaves little of your own personality intact, your powers increase a thousandfold. Even the gods bow to you."; Constant SC_1847 = ", you might prefer watching the series of short instruction videos or reading the 3-page Beginner's Guide. You can find everything you need at http://www.ifarchive.org/if-archive/games/competition2011/glulx/kerkerkruip/ ."; Constant SC_686 = ", your flesh crawls. You realise that "; Constant SC_590 = ","; Constant SC_1485 = "- "; Constant SC_669 = "-"; Constant SC_615 = "-clothing"; Constant SC_618 = "-grenades"; Constant SC_619 = "-other"; Constant SC_617 = "-scrolls"; Constant SC_614 = "-weapons"; Constant SC_506 = ". "; Constant SC_823 = ". ~Fafhrd!~ screams Mouser"; Constant SC_825 = ". ~Vengeance!~ screams Fafhrd"; Constant SC_1772 = ". A big wheel is attached to the pipes."; Constant SC_1856 = ". Among mainstream games, "; Constant SC_410 = ". However, you find yourself "; Constant SC_1768 = ". In a pinch, you would be able to jump down to the room below, although this might not be particularly healthy"; Constant SC_1356 = ". It immediately "; Constant SC_1803 = ". It is a jumping bomb, "; Constant SC_1692 = ". My apologies."; Constant SC_1756 = ". Myriad reflections follow your every movement -- though some, always in the corner of your eyes, seem to behave differently"; Constant SC_1355 = ". Nothing happens."; Constant SC_568 = ". Since there is no place to dodge to on the narrow bridge, your maneuver almost ends in a drop down into the lava -- but you manage to regain your balance almost miraculously. This is something you might not want to try again."; Constant SC_566 = ". Since there is no place to dodge to on the narrow bridge, your maneuver continues with an involuntary downward movement."; Constant SC_1213 = ". The abyss of the soul immediately grows to gigantic proportions, obliterating the entire dungeon"; Constant SC_1795 = ". The golem is spinning "; Constant SC_839 = ". Though there are still clouds of smoke here, they no longer seem to be sentient"; Constant SC_1140 = ". Unfortunately, "; Constant SC_1717 = ". When inhaled, it confers this mindset to the user. "; Constant SC_1710 = ". You cannot handle these items without a feeling of national pride; for it was this invention of Metastasio's that allowed the outnumbered forces of Louis VIII to defeat the Algirian hordes."; Constant SC_510 = ". You could further "; Constant SC_1142 = ". Your soul attempts to swallow that of your enemy, but "; Constant SC_310 = "."; Constant SC_1206 = ".)"; Constant SC_1613 = "/"; Constant SC_799 = "1 damage"; Constant SC_525 = "10 damage"; Constant SC_396 = ": "; Constant SC_1885 = ": ~attack ~ (~a~), ~concentrate~ (~c~), ~parry~ (~p~), ~dodge~ (~do~)."; Constant SC_1893 = ": ~help~, ~achievements~."; Constant SC_1889 = ": ~pray~."; Constant SC_1891 = ": ~ready ~, ~throw ~, ~read ~, ~wear ~, ~take off ~."; Constant SC_1887 = ": ~retreat~, ~go to ~."; Constant SC_1882 = ": ~status~, ~remember~ (~r~), ~sense~, ~trophies~."; Constant SC_1173 = ": +"; Constant SC_1178 = ": +1 attack, +1 damage resistance, +5 health, -1 dexterity, and the "; Constant SC_1182 = ": +1 attack, +1 defence, +5 health, +1 perception, and the "; Constant SC_1169 = ": +2 attack, +1 damage, -1 defence, +6 health, +1 dexterity, and the "; Constant SC_1185 = ": +2 attack, +2 damage, +1 defence, +12 health, and the "; Constant SC_1188 = ": +2 attack, +2 defence, +10 health, and you will now "; Constant SC_1193 = ": +2 attack, +2 defence, +10 health; and since Death attends on us all, you can now "; Constant SC_1412 = ": +2 defence, -2 attack, large bonus to hiding, bonus to running away, flying, cannot use weapons or clothing, can turn back into a "; Constant SC_1409 = ": +2 willpower, +1 attack, -2 defence, modest bonus to hiding, can turn into a "; Constant SC_1197 = ": +3 attack, +3 defence, +15 health, +4 willpower, and you can attempt to "; Constant SC_1201 = ": +3 attack, +3 defence, +15 health, and you can attempt to "; Constant SC_1418 = ": +3 bonus to perception, dexterity and willpower checks."; Constant SC_1205 = ": +4 attack, +4 defence, +20 health, +1 to all attributes, and you can summon "; Constant SC_393 = ": +4 attack, +4 defence, +20 health, +2 willpower, pray to Aite anywhere.)"; Constant SC_1427 = ": -"; Constant SC_1407 = ": -1 attack; +1 damage resistance."; Constant SC_1433 = ": -2 to attack, cannot concentrate."; Constant SC_1404 = ": other undead are your allies; potential living allies are your enemies instead; absorbing a soul may heal you only partially."; Constant SC_1414 = ": you cannot interact with most physical objects."; Constant SC_616 = ":"; Constant SC_1135 = "; "; Constant SC_1587 = "; bad at parrying"; Constant SC_1705 = "; benefits from tension"; Constant SC_1735 = "; better tension damage bonus"; Constant SC_677 = "; but also "; Constant SC_1816 = "; drains statistics"; Constant SC_1590 = "; easy to dodge"; Constant SC_1586 = "; easy to parry"; Constant SC_673 = "; good against undead"; Constant SC_1588 = "; good at parrying"; Constant SC_1589 = "; hard to dodge"; Constant SC_1585 = "; hard to parry"; Constant SC_1736 = "; leeches some health (works much better for vampires)"; Constant SC_1742 = "; makes you easier to hit; halves your health"; Constant SC_1809 = "; massive damage against undead"; Constant SC_1701 = "; minor variations on that name are fine.) The extensions used are copyright by their respective authors; some of them were released under the Creative Commons Attribution license. The cover image is a photo by Captain Orange, modified by Victor Gijsbers. It is used with permission for this game, but should not be used for other games. (Unless you get permission yourself.)"; Constant SC_672 = "; ranged"; Constant SC_1810 = "; rusts weapons"; Constant SC_1268 = "; your possessions drop to the ground"; Constant SC_593 = "> "; Constant SC_194 = ">"; Constant SC_589 = "?"; Constant SC_324 = "A "; Constant SC_183 = "A being summoned by Malygris from the depths of Hell, this demon has only one purpose: to stop you from reaching its master."; Constant SC_171 = "A black-robed mage stalks through the room."; Constant SC_127 = "A broken pipe continuously spews forth vapours."; Constant SC_688 = "A curse makes the item unmovable."; Constant SC_433 = "A deep voice inside your head speaks: ~You will attack "; Constant SC_4 = "A fairly nondescript tunnel."; Constant SC_1047 = "A final sweep of its tail club seems to indicate that the armadillo has made up its mind."; Constant SC_1558 = "A gigantic "; Constant SC_118 = "A gruesome collection of legs, arms, heads, intestines, and all other parts of the human body. If you really wanted to, you could search it for treasures."; Constant SC_184 = "A horned figure stalks through the room."; Constant SC_1565 = "A huge "; Constant SC_141 = "A huge armadillo is here, searching for anything it can eat."; Constant SC_148 = "A hulking form made of metal chains and animated by a soul bound to it through dark magics."; Constant SC_185 = "A jagged sword covered in evil-looking runes. It was never meant to be used by humans."; Constant SC_1165 = "A magical force prevents you from collapsing that passage."; Constant SC_1158 = "A magical force prevents you from digging."; Constant SC_1265 = "A magical sword formed of adamant suddenly appears in your hands -- and falls through them to the ground!"; Constant SC_1264 = "A magical sword formed of adamant suddenly appears in your hands!"; Constant SC_102 = "A marble monstrosity carved with skeletons and other symbols of death."; Constant SC_821 = "A mental oppression falls from your mind as the mindslug succumbs to its injuries, its evil intelligence snuffed."; Constant SC_177 = "A pale druidess stands here, murmuring to herself in a language you have never heard."; Constant SC_1806 = "A pale man in dark robes"; Constant SC_145 = "A plain and simple robe. You doubt it is useful for any purpose but modesty."; Constant SC_162 = "A relatively short sword."; Constant SC_1581 = "A sickening feeling, and then you find yourself in --"; Constant SC_165 = "A single giant tentacle guards against intruders."; Constant SC_1799 = "A skull-sized ball of gooish, undulating flesh jumps up and down "; Constant SC_144 = "A stunning young woman in a simple monk's robe awaits you."; Constant SC_138 = "A swarm of small daggers is flying through the air like a flock of birds, their sharp points eagerly seeking your flesh."; Constant SC_1350 = "A tentacle suddenly leaps out of your body and shakes "; Constant SC_800 = "A thorn kills a man, not by force, but by continuously pricking."; Constant SC_700 = "A thorn kills a man, not by force, but by pricking often."; Constant SC_186 = "A vast dark mass sprouting teeth and claws at random -- you cannot force yourself to look at it."; Constant SC_158 = "A vast slug covered in green ooze has positioned itself in this room."; Constant SC_1767 = "A vast staircase spirals up and down"; Constant SC_96 = "A vast statue made of razor sharp weapons. The goddess of chaos and destruction is a dangerous one to worship -- but it can be worth it."; Constant SC_1271 = "A wave of unholy energy is released, dealing "; Constant SC_130 = "A weird statue made of metal shards stands in one of the corners. It is ugly and slightly menacing."; Constant SC_168 = "A white-robed healer of Aite is chanting in praise of his goddess."; Constant SC_1660 = "Absorbing a soul has fully healed you."; Constant SC_1661 = "Absorbing a soul has restored some of your health."; Constant SC_228 = "Achievements"; Constant SC_198 = "Act>"; Constant SC_1883 = "Actions "; Constant SC_1880 = "Actions that "; Constant SC_65 = "Adorned with gold and a large emerald at the end of the hilt, this dagger is not only beautiful, but also perfect for precise attacks in tense situations. The decadence of its design proves it to be of Yahvinnean origin."; Constant SC_227 = "Advanced Concepts"; Constant SC_1912 = "Adventurer "; Constant SC_164 = "Aeons ago, the Knight of the Dawn fought and killed a great tentacled horror known as Tooloo. So great was Tooloo's tenacity, however, that each of his tentacles continued to live on separately -- and this is one of them."; Constant SC_154 = "Ages ago, the monks of Averoigne forged these weapons, imbuing them with powerful enchantments against the living dead."; Constant SC_1564 = "Aite is a dangerous mistress."; Constant SC_812 = "All life suddenly goes out of the daggers. For a moment they hang still in the air, but then the planet below pulls them inexorably downwards."; Constant SC_1476 = "All locations have been explored."; Constant SC_1138 = "All the mirrors are blown to pieces and fall down like a rain of ice and light. But after a few seconds, the shards of glass start moving up and reform the mirrors. Not a crack can be seen."; Constant SC_119 = "Although it smells terribly, this arm is actually quite sturdy. You could beat people with it."; Constant SC_143 = "Although she is currently working as one of Malygris's guards, Miranda dreams about a bright future as a famous adventurer."; Constant SC_2 = "An IF roguelike"; Constant SC_188 = "An animated corpse shambles around. Its smell is absolutely disgusting."; Constant SC_1832 = "An aswang is here, having taken the shape of "; Constant SC_651 = "An exit leads "; Constant SC_9 = "An expensive alchemical salve that can be rubbed on iron objects to turn them into silver."; Constant SC_316 = "An overwhelming scream seems to rip the world apart. An "; Constant SC_1854 = "Ancient Domains of Mystery"; Constant SC_636 = "And allow "; Constant SC_1853 = "Angband"; Constant SC_137 = "Animated by some dark magic, these daggers purposefully seek to undo you."; Constant SC_1870 = "Another thing you should realise is that not every action costs time. Examining, looking and taking inventory all take no time, and neither do the special Kerkerkruip actions ~remember~ and ~status~. Most actions that end in failure (like going in a direction you cannot go) don't take time either."; Constant SC_1245 = "Apparently, the programmer has forgotten to implement this type of grenade, because nothing happens!"; Constant SC_1617 = "Are"; Constant SC_1203 = "As Bodmall dies, you feel her soul absorbed into your own body. ("; Constant SC_1367 = "As Malygris casts a complex spell, and you feel your flesh "; Constant SC_1180 = "As Miranda dies, you feel her soul absorbed into your own body. ("; Constant SC_1871 = "As in other interactive fiction, you should examine everything. This will show you the levels of monsters, which is very useful, and it may allow you to find out what items in the dungeon -- either those you pick up or those that are situated in specific rooms -- do. Again as in other interactive fiction, you should experiment: try things out, and see what happens."; Constant SC_363 = "As rust spores whirl around the room, "; Constant SC_554 = "As soon as you put on "; Constant SC_562 = "As soon as you ready "; Constant SC_491 = "As soon as you strike the statue, it shatters into a thousand pieces."; Constant SC_334 = "As suddenly as it began, the rush given by the "; Constant SC_1191 = "As the Reaper dies, his twisted mind becomes one with yours. ("; Constant SC_815 = "As the armadillo dies, its body splits open, revealing "; Constant SC_1176 = "As the armadillo succumbs, you feel its soul absorbed into your own body. ("; Constant SC_1186 = "As the bomb deflates, you feel its insane, beastly soul absorbed into your own body. ("; Constant SC_1183 = "As the chain golem bursts apart into its constituent links, you feel the soul that animated it absorbed into your own body. ("; Constant SC_1029 = "As the corpse reels back from the blow, his "; Constant SC_1167 = "As the daggers fall down, you feel the soul that animated them absorbed into your own body. You are sharp. You are deadly. ("; Constant SC_1199 = "As the giant tentacle dies, you feel its soul absorbed into your own body. ("; Constant SC_476 = "As the grenade explodes you hear the singing of angels, several of whom swoop down from the heavens with huge swords and eviscerate "; Constant SC_475 = "As the grenade explodes you hear the singing of angels. But nothing further appears to happen."; Constant SC_819 = "As the last of its blood flows out of the jumping bomb, it goes limp and falls to the floor like a punctured balloon."; Constant SC_1195 = "As the mindslug dies, you feel its powerful intelligence absorbed into your own body. ("; Constant SC_140 = "As their name suggests, ravenous armadillos will eat anything. They may seem slow and easy to hit, but their tough scales ensures that they can shrug off most damage, and their bony tail club packs a considerable punch."; Constant SC_1254 = "As you are undead already, the scroll has no effect on you."; Constant SC_1899 = "As you can see, it would be advantageous to kill a level 4 monster first, and then a level 3, a level 2 and a level 1 monster: that way, you can face Malygris while you have the powers of four absorbed souls at you disposal. Unfortunately, killing a level 4 monster is hard, and should not be attempted lightly. You may also be thwarted by the lay-out of the dungeon."; Constant SC_1904 = "As you can see, the order in which you kill your enemies is exceedingly important."; Constant SC_849 = "As you fall down, Mouser shrugs somewhat apologetically."; Constant SC_479 = "As you gulp down the blood, you feel your whole body changing -- it becomes cold and fragile, but also swift and lean. Magical power courses through your veins. You have been turned into a vampire!"; Constant SC_681 = "As you open the container, a large cloud of rust spores drifts out of it."; Constant SC_674 = "As you open the sarcophagus, "; Constant SC_676 = "As you open the sarcophagus, you see "; Constant SC_1253 = "As you read the scroll, your flesh starts to rot and most of your vital functions cease. You have been turned into a ghoul!"; Constant SC_405 = "As you read the symbols of death, you feel an immense power surge through your body. It is either intensely hot or inhumanly cold; the difference is impossible to tell. You finish reading the spell, and wonder what you have been given, and whether it is a blessing or a curse."; Constant SC_401 = "As you read the symbols, your flesh starts to rot and most of your vital functions cease. You have been turned into a ghoul!"; Constant SC_515 = "As you search the pile, a rotting corpse jumps out!"; Constant SC_403 = "As you speak the spell, you blend into the shadows."; Constant SC_1911 = "Assistant Dungeoneer "; Constant SC_1739 = "At first sight this seems to be nothing but a foot-long tube of glass. However, it is a very powerful weapon, the shots of which can quickly destroy even the most powerful enemy. But be warned: not only does the glass cannon make you an easier target, it is also the case that when you ready the weapon, you "; Constant SC_1396 = "Attack"; Constant SC_690 = "Attacking is an action, not a reaction."; Constant SC_1546 = "BEYOND HELL"; Constant SC_1117 = "BUG: forgot to set mood of "; Constant SC_696 = "Because of damage reduction, the thorns deal "; Constant SC_131 = "Because of the constantly shifting patterns of light and shadows, it should be relatively easy to hide in this room."; Constant SC_423 = "Before you can do anything, the "; Constant SC_1838 = "Before you floats an abyss of the soul; it looks like a "; Constant SC_1359 = "Bodmall chants loudly, and her "; Constant SC_1351 = "Bodmall chants softly, and great "; Constant SC_1358 = "Bodmall chants softly."; Constant SC_855 = "Bodmall kneels over your corpse. ~Death is but a stage in the cycle of Nature,~ she says."; Constant SC_854 = "Bodmall kneels over your corpse. ~The undead are a blight on this world, and they will be destroyed,~ she says."; Constant SC_1362 = "Bodmall makes several complicated gestures, and "; Constant SC_1354 = "Bodmall screams several harsh syllables and points at "; Constant SC_750 = "Bodmall throws her hands forward, casting a lightning bolt at "; Constant SC_1811 = "Bodmall's skin looks "; Constant SC_101 = "Broken and useless."; Constant SC_1711 = "Carefully folded in paper, this is just enough ment to get you pumped up for combat. You could snort it whenever you wish"; Constant SC_610 = "Caught in "; Constant SC_108 = "Centuries ago, Malygris captured the great alchemist Metastasio and forced him to work in this laboratory. Most of his equipment is now gone, but one curious machine remains."; Constant SC_1049 = "Chanting softly, Miranda aligns her spirit with the ambient energies."; Constant SC_1721 = "Charles IV of Averoigne, who, at the moment of his greatest victory, was poisoned by the brother he had always cherished"; Constant SC_5 = "Clenched fists, kicking feet--that kind of stuff."; Constant SC_305 = "Clouds of "; Constant SC_1859 = "Combat is a large part of "; Constant SC_666 = "Combat statistics: 1d"; Constant SC_792 = "Combat-related numbers will be "; Constant SC_1442 = "Concentration"; Constant SC_150 = "Connoisseurs consider these jumping balls of red meat to be among the most exciting spectacles of Yahvinna's annual Feast of Flesh. To the slaves and convicts down in the arena, whose limbs the spectators hope to have blown into their lap, the jumping bombs also bring excitement, though of a wholly different type."; Constant SC_277 = "Continue the game"; Constant SC_231 = "Copyright and Contact"; Constant SC_785 = "Could not save the game."; Constant SC_230 = "Credits and Thanks"; Constant SC_1509 = "Crone"; Constant SC_822 = "Cursing his fate, Fafhrd falls down"; Constant SC_546 = "Darkness coalesces around the Nameless Horror"; Constant SC_256 = "Deal at least 20 damage with a single blow."; Constant SC_1916 = "Deathblow "; Constant SC_638 = "Deciding that discretion is the better part of valour, you bravely run away."; Constant SC_409 = "Deciding to break the command of Nomos, you plan on attacking "; Constant SC_1397 = "Defence"; Constant SC_1097 = "Deftly, Mouser rolls aside to avoid the attack."; Constant SC_1698 = "Desktop Dungeons"; Constant SC_1914 = "Destroyer "; Constant SC_1920 = "Detox "; Constant SC_1399 = "Dexterity"; Constant SC_1857 = "Diablo 2"; Constant SC_248 = "Difficulty and victory"; Constant SC_1876 = "Do not forget: ~status~ and ~remember~ (~r~) are your friends."; Constant SC_798 = "Dodging is dangerous with so many thorns around; the bushes deal "; Constant SC_80 = "Dominique, marquis of Savon, one of the great mages of his generation, was so fed up with losing his concentration when he was hit that he developed this robe. When the wearer is damaged in combat, he will not lose his concentration; but the protection comes from his life force, and the damage dealt to him is increased by 25% for every level of concentration. People say that nobody ever died with as much concentration as Dominique."; Constant SC_1855 = "Dungeon Crawl Stone Soup"; Constant SC_1924 = "Durin's bane "; Constant SC_1539 = "EASY"; Constant SC_210 = "ENTER = Select"; Constant SC_153 = "Enchanted with a spell of heat, this scythe always remains unnaturally hot."; Constant SC_174 = "Equipped with a small sword and a huge shield, a heavily armoured man awaits any attacks."; Constant SC_1061 = "Even more smoke is drawn into the smoke demon's form."; Constant SC_850 = "Even though Tooloo was slain in times immemorial, his appendages still claim victims today."; Constant SC_1898 = "Every dungeon contains seven monsters with a positive level: two level 1 monsters, two level 2 monsters, and one each of levels 3, 4 and 5. The level 5 monster is Malygris, and you win by killing him."; Constant SC_1895 = "Every monster in the game has a level, which you can see by examining the monster. Any monster with a non-zero level will trigger a special sequence of events when it is killed: you will absorb its soul, which fully heals you, increases your statistics (maximum health, attack bonus, and so on), and grants you a special power. You can review the powers you have been granted by using the ~status~ command."; Constant SC_1277 = "Everything becomes clear, sharp, easy. You feel strong. You feel focused."; Constant SC_99 = "Exactly half of the room is black, and exactly half of it is white. This is the temple of Isatzo, the god of balance, whose statue stands in the center, one arm stretched out to each side."; Constant SC_653 = "Exits lead "; Constant SC_1096 = "Fafhrd ducks aside."; Constant SC_1081 = "Fafhrd raises his weapon to stop the blow."; Constant SC_743 = "Fafhrd rushes towards "; Constant SC_1524 = "Fafhrd shrugs."; Constant SC_291 = "Fafhrd's fists"; Constant SC_786 = "Failed to delete the saved game. Please remove by hand."; Constant SC_784 = "Failed to restore existing game"; Constant SC_744 = "Fast as a snake, Mouser lashes out at "; Constant SC_1688 = "Filfre"; Constant SC_1875 = "Finally, and less importantly, the ~trophies~ command shows you a list of defeated enemies."; Constant SC_1874 = "Finally, there is the command ~sense~, which only becomes available when you have defeated some powerful monsters. First, it gives you an indication of the location of Malygris, the final enemy. (You'll find out why that is useful.) Later, it gives you a sense for the location of any very powerful items. Be warned, however, that you may not always be able to find those; and be warned also that sensing does take a turn."; Constant SC_1552 = "Finishing the dungeon..."; Constant SC_132 = "Flickering lamps hang suspended from the ceiling, casting weird shadows all across the room."; Constant SC_1753 = "Flushed with success, you go boldly through the dungeon"; Constant SC_226 = "For New Players"; Constant SC_1760 = "For a moment, you watch "; Constant SC_483 = "For aeons, warmth and coldness, air and water, and all the internal material tensions have wrought their slow changes on the atomic structure of the statue of Nomos. This is the exact moment when the critical limit is reached, and Nomos"; Constant SC_494 = "For every meter you climb, you glide one meter down."; Constant SC_490 = "For reasons that cannot be merely physical, you are unable to move the rubble"; Constant SC_382 = "From the beginning of time, all the Universe's constituent particles have traced their preordained paths, to arrive at their present constellation -- a rare constellation in which all the thermal energy of your body is suddenly transferred to the air and dissipates. Your blood freezes, and you die."; Constant SC_1918 = "From the shadows I come "; Constant SC_78 = "Functional rather than beautiful, this suit has been made for a true warrior. It will protect you from harm, although it also slows you down."; Constant SC_783 = "Game successfully restored."; Constant SC_1685 = "Gargoyle"; Constant SC_243 = "Generally, it should be obvious how you can use an item; if not, examining the item will often teach you the right verb. A special case are weapons, which you must ~ready~ or (equivalently) ~wield~ in order to use them. You can ~wear~ clothing, ~read~ scrolls, ~throw~ grenades, and so on. The fact that you have found an item does not mean that it is useful to you, so think carefully and observe the effects of the item on the game."; Constant SC_1548 = "Generating map..."; Constant SC_1690 = "Glulxe"; Constant SC_1102 = "Gracefully, Bodmall attempts to glide out of the way."; Constant SC_1262 = "Gratuitous purple fireworks fill the room, spelling the words "; Constant SC_1541 = "HARD"; Constant SC_1545 = "HELL"; Constant SC_1292 = "Hard scales appear all over your body; the power drains "; Constant SC_1620 = "Has"; Constant SC_257 = "Have an undead creature that is allied to you kill someone."; Constant SC_1619 = "Have"; Constant SC_1020 = "Having been hit with the scythe of oxidation, "; Constant SC_1017 = "Having been in contact with the scythe of oxidation, "; Constant SC_1019 = "Having hit the scythe of oxidation, "; Constant SC_152 = "He once used to be a man like any other, but his vocation has left him unnaturally pale and gaunt."; Constant SC_1627 = "He"; Constant SC_1902 = "Health bonuses belong to powers. If you lose a power, you will also lose the health bonus that comes with it. So if you have killed a level 1 creature which grants you a +5 health bonus, and you then kill another level 1 creature, you will lose the original power, including the health bonus. If the newly killed creature also grants +5 health, your maximum health will stay the same."; Constant SC_1395 = "Health"; Constant SC_1845 = "Health: "; Constant SC_1644 = "Her"; Constant SC_106 = "Here powerful sorcerers once tortured time to learn the secrets of eternity. Everything around you seems to happen either faster or slower than it should."; Constant SC_1655 = "Hers"; Constant SC_1649 = "Him"; Constant SC_1814 = "His white eyebrows are contracted to a single line on the umber parchment of his face, and beneath them his eyes are cold and green as the ice of ancient floes; his beard, half white, half of a black with glaucous gleams, falls nearly to his knees and hides many of the writhing serpentine characters inscribed in woven silver athwart the bosom of his violet robe. -- Clark Ashton Smith, "; Constant SC_1643 = "His"; Constant SC_1754 = "History will remember you as one of the greatest of warriors! If you kill Malygris and manage to find a historian, that is"; Constant SC_1270 = "Hm. Interesting."; Constant SC_179 = "Huge bushes, apparently dead but full of large and extremely sharp thorns, are everywhere."; Constant SC_123 = "Huge clouds of smoke pour forth from a magical portal. This must be an entrance to the elemental plane of smoke!"; Constant SC_114 = "Hundreds of books line the walls of this magnificent library, a bigger collection than the already legendary one of the marquis of Savon. Malygris even has a scroll analyser installed."; Constant SC_134 = "Hundreds of holy symbols cover the walls."; Constant SC_136 = "Hundreds of unholy symbols cover the walls."; Constant SC_1913 = "Hunter "; Constant SC_1520 = "I am immortal."; Constant SC_1917 = "I return to serve "; Constant SC_1519 = "I will defeat all my enemies!"; Constant SC_1695 = "I would also like to thank the makers of Inform 7, everyone whose extensions I have used or misused, and everyone who has helped me on the forums and the newsgroups -- there are a lot of you, and you may know who you are. Andrew Plotkin has answered perhaps more of my technical questions than anyone else, so a special thanks to him."; Constant SC_527 = "I'd love to give you a barbed compliment."; Constant SC_1518 = "I'll get back at the prince."; Constant SC_1547 = "IMPOSSIBLE"; Constant SC_1544 = "INSANE"; Constant SC_1683 = "If "; Constant SC_469 = "If only you could find that portal again!"; Constant SC_1866 = "If you decide the fight is too difficult for you, your best option is to ~retreat~. This lets you run back to the previous room, but the monster may attack you as you run. "; Constant SC_391 = "Impressed with your prowess in combat, Aite grants you her favour! ("; Constant SC_190 = "Imps are minor demons with unnaturally small wings. They rarely engage in combat, prefering to teleport or fly away from danger."; Constant SC_602 = "In "; Constant SC_1033 = "In bat form, you cannot use weapons."; Constant SC_682 = "In bat form, you cannot wear clothing."; Constant SC_1678 = "In slaying "; Constant SC_508 = "In the background, Malygris rises triumphant over all"; Constant SC_1921 = "Injury to insult "; Constant SC_232 = "Instruction video and Beginner's Guide"; Constant SC_196 = "Instructions"; Constant SC_1849 = "Interactive Fiction are games and stories that allow you to interact with an imaginary world by typing commands which get interpreted by a parser. A future release of "; Constant SC_236 = "Introduction to the combat system"; Constant SC_1618 = "Is"; Constant SC_460 = "Isatzo decides that your "; Constant SC_457 = "Isatzo decides to give "; Constant SC_456 = "Isatzo decides to give your "; Constant SC_448 = "Isatzo feels your health and that of "; Constant SC_454 = "Isatzo feels your items and those of "; Constant SC_384 = "Isatzo is available for prayer again."; Constant SC_442 = "Isatzo sets your concentration and that of "; Constant SC_450 = "Isatzo transfers "; Constant SC_1824 = "It "; Constant SC_630 = "It is a "; Constant SC_486 = "It is far too smooth for you to climb."; Constant SC_189 = "It is hard to say exactly which features of the smoky form show it to be sentient, but there is not the slightest doubt in your mind that it is."; Constant SC_518 = "It is horrible."; Constant SC_478 = "It is not weapon. You can use it without readying it."; Constant SC_157 = "It is of the dreaded race of mindslugs, abominations that use their telepathic powers to enslave others."; Constant SC_397 = "It is only a drawing."; Constant SC_1782 = "It looks like a gorilla, except that is has an intensely red fur and is perhaps even more muscular. "; Constant SC_160 = "It looks like a normal sword that has seen a lot of use."; Constant SC_129 = "It looks like some insane alchemist's practical joke."; Constant SC_1637 = "It"; Constant SC_1645 = "Its"; Constant SC_169 = "Just a plain sword."; Constant SC_1872 = "Kerkerkruip has three very important information-related actions. First, there is ~status~, which gives you an overview of your health, your attributes, any special effects that are active, and all the skills you have gained during the game. Use it often!"; Constant SC_1869 = "Kerkerkruip is a turn-based game, but that doesn't mean everyone gets their turn in an orderly fashion. It is possible for you, or for a monster, to get two (or even more) turns in a row. This is partly decided by the random generator, but also partly by actions and events that lower or raise your initiative. For instance, if you have high concentration, you will often be able to act sooner. If you attack and miss, or if you are hit by an attack, you will often be forced to act later. Some items in the dungeon may allow you to manipulate your initiative."; Constant SC_265 = "Kerkerkruip"; Constant SC_261 = "Kill Malygris with your bare hands."; Constant SC_255 = "Kill Malygris, the wizard of Kerkerkruip."; Constant SC_251 = "Kill a level 1 creature."; Constant SC_252 = "Kill a level 2 creature."; Constant SC_253 = "Kill a level 3 creature."; Constant SC_254 = "Kill a level 4 creature."; Constant SC_258 = "Kill an enemy at full health with one hit, while striking from the shadows."; Constant SC_1510 = "Knight"; Constant SC_1070 = "Knocked back by the hit, the jumping bomb "; Constant SC_239 = "Knowing the dungeon"; Constant SC_1841 = "Last Menu"; Constant SC_1896 = "Level 0 monsters never grant you health or powers. Some monsters form groups, and you will have to kill the entire group before the power transferal happens."; Constant SC_242 = "List of special verbs"; Constant SC_1122 = "Made "; Constant SC_100 = "Made of grey stone, the statue of Isatzo offers one healing and one punishing hand to the world. He looks on mankind with one auspicious and one dropping eye, in equal scale weighing delight and dole."; Constant SC_1915 = "Mageslayer "; Constant SC_1508 = "Maiden"; Constant SC_1214 = "Malygris is dead, and so are you. Technically, that counts as a victory."; Constant SC_1498 = "Malygris is right here."; Constant SC_327 = "Malygris speaks the words of a long and complicated spell."; Constant SC_298 = "Malygris's innate magical powers"; Constant SC_181 = "Malygris, perhaps the greatest of all living sorcerers, is standing here."; Constant SC_1656 = "Map rejected. Regenerating."; Constant SC_1549 = "Map rejected."; Constant SC_1900 = "Maximising the amount of souls you have at your disposal by choosing the right order in which to kill the monsters is one of the keys of success in "; Constant SC_1529 = "Meatboy!"; Constant SC_531 = "Ment has to be taken through the nose, not the mouth. Try snorting it."; Constant SC_245 = "Ment"; Constant SC_62 = "Metastasio envisioned whole armies that would lob grenades at the enemy and would then run away as fast as they could. This hat was meant as a prototype piece of equipment to help with the latter. But the generals of Averoigne did not share Metastasio's ideas, and Louis VIII expressly forbade further production of these hats, a decision the chroniclers have all lauded."; Constant SC_1079 = "Miranda attempts to ward off the attack."; Constant SC_844 = "Miranda dances on your corpse. ~This is my first step towards fame!~"; Constant SC_1050 = "Miranda finishes her meditations."; Constant SC_1091 = "Miranda jumps aside."; Constant SC_727 = "Miranda jumps towards "; Constant SC_1048 = "Miranda seeks the calm within."; Constant SC_1755 = "Mirrors surround you on all sides in an impossible geometry"; Constant SC_92 = "Molten rock -- whether heated by natural or by unnatural means you cannot say."; Constant SC_1903 = "More dramatically, assume you have killed a level 3, a level 2 and a level 1 creature, in that order, for a total health bonus of 15 + 10 + 5 = 30. (Creatures generally grant 5 times their level in health, though there is some variation.) If you now kill another level 3 creature, you will lose all the previously granted powers. Your maximum health may drop by as many as 15 points!"; Constant SC_1693 = "Most of all, I would like to thank my alpha- and beta-testers: Matt Weiner, Michael Fransioli, Erik Temple, Michiel Hermes, Lance Camelot, Wasse Asmlash, Vyacheslav Dobranov, Dannii Willis, Captain Mikee, and Bora Bosna. (If I have forgotten you, let me know!) Any piece of interactive fiction needs testers, but one as complicated as "; Constant SC_519 = "Mostly sulphur, but you'd recognise this smell anywhere -- you used to have a pet imp when you were an apprentice."; Constant SC_161 = "Mouser is a small, fast man. You know his type from the alleys and alehouses of Montenoir."; Constant SC_1525 = "Mouser raises one his eyebrows."; Constant SC_824 = "Mouser staggers backwards, mortally wounded. He tries to say something, but no sound ever passes his lips again"; Constant SC_1082 = "Mouser tries to parry the blow."; Constant SC_292 = "Mouser's fists"; Constant SC_240 = "Moving around"; Constant SC_178 = "Moving through these bushes is possible, but it is certainly going to hurt. Neither attacking nor dodging will be truly safe."; Constant SC_1543 = "NIGHTMARE"; Constant SC_1540 = "NORMAL"; Constant SC_1923 = "Nature's fragile vessel "; Constant SC_1852 = "Nethack"; Constant SC_1503 = "Nobody has died yet."; Constant SC_421 = "Nomos is not to be toyed with."; Constant SC_937 = "Not even all the king's horses and all the king's men will be able to put the thousand pieces of your body back together"; Constant SC_468 = "Nothing appears to change, no matter how long you run"; Constant SC_1246 = "Nothing particular seems to happen."; Constant SC_1733 = "Of all the emperors of Yahvinna, Hargo was the most arrogant and the most obstinate. This was both the foundation of his military successes and the cause of his eventual downfall. "; Constant SC_1909 = "Of course "; Constant SC_604 = "On "; Constant SC_121 = "On a raised portion of the floor stands a huge chest, beautifully inlaid with gems and precious metals. It must have been full of treasure once."; Constant SC_647 = "On a whim, you jump down into the lava."; Constant SC_557 = "On the "; Constant SC_1907 = "Once you have won at least one game, the difficulty is determined by your current winning streak: the number of games you have won in a row. Every time you win the game, your winning streak will increase by 1; but it will be reset to 0 when you lose. As your winning streak goes up, the monsters in the game get progressively bigger bonuses, and winning becomes harder and harder. Getting a high winning streak is a challenge for experts!"; Constant SC_250 = "One important circumstance influencing combat is the tension, which goes up as the fight takes longer, but decreases when a hit is scored. The current tension is always visible in the status line. Every 2 points of tension give the attacker a +1 bonus, while every 3 points of tension add +1 to the damage dealt. Thus, if the tension is 10, an attack would happen with a +5 attack bonus and a +3 damage bonus."; Constant SC_496 = "One should not joke with death."; Constant SC_649 = "Only a little carbon remains of you."; Constant SC_1233 = "Only magical essences can be consumed through inhaling."; Constant SC_1398 = "Perception"; Constant SC_1550 = "Placing monsters..."; Constant SC_1551 = "Placing treasures..."; Constant SC_1612 = "Please press SPACE to continue."; Constant SC_1204 = "Power of Bodmall"; Constant SC_1181 = "Power of Miranda"; Constant SC_1192 = "Power of the Reaper"; Constant SC_1172 = "Power of the ape"; Constant SC_1177 = "Power of the armadillo"; Constant SC_1187 = "Power of the bomb"; Constant SC_1184 = "Power of the chains"; Constant SC_1168 = "Power of the daggers"; Constant SC_392 = "Power of the fanatics of Aite"; Constant SC_1196 = "Power of the mindslug"; Constant SC_1200 = "Power of the tentacle"; Constant SC_246 = "Powers and levels"; Constant SC_435 = "Praying has little effect, now that the statue has been destroyed."; Constant SC_1614 = "Press SPACE to return to the menu or H to reveal another hint."; Constant SC_1615 = "Press SPACE to return to the menu"; Constant SC_192 = "Presumably, this is the portal back to Kerkerkruip."; Constant SC_1521 = "Pride cometh before the fall."; Constant SC_1084 = "Protective layers of smoke appear in front of the smoke demon."; Constant SC_1840 = "Q = "; Constant SC_203 = "QUIT"; Constant SC_1842 = "Quit Menu"; Constant SC_1528 = "RAMBO!"; Constant SC_200 = "RESTART"; Constant SC_201 = "RESTORE a saved game"; Constant SC_742 = "Raising its hideous body, the mindslug bears down on "; Constant SC_199 = "React>"; Constant SC_46 = "Reading this scroll will deal damage to all non-undead creatures in the room."; Constant SC_43 = "Reading this scroll will give you a temporary bonus to all perception, willpower and dexterity checks."; Constant SC_16 = "Reading this scroll will grant you knowledge about all other scrolls."; Constant SC_13 = "Reading this scroll will instantaneously transport the reader to another location."; Constant SC_34 = "Reading this scroll will make a temporary adamantine blade appear in your hands."; Constant SC_25 = "Reading this scroll will make you hidden, though it may fail if enemies are nearby."; Constant SC_37 = "Reading this scroll will protect you against all damage from the next one or two attacks."; Constant SC_28 = "Reading this scroll will summon an undead monster. Be careful, for it does not make the creature friendly."; Constant SC_40 = "Reading this scroll will temporarily turn you ethereal."; Constant SC_22 = "Reading this scroll will turn you into an undead ghoul."; Constant SC_19 = "Reading this scroll will uncurse any items you are carrying."; Constant SC_289 = "Reaper's knuckles"; Constant SC_1022 = "Recoiling in pain, the giant tentacle "; Constant SC_996 = "Reeling from the blow, "; Constant SC_338 = "Respiration becomes more difficult by the second. Your heartbeat feels very irregular."; Constant SC_237 = "Retreat!"; Constant SC_1514 = "Right now, you cannot move."; Constant SC_330 = "Rock is stronger than flesh."; Constant SC_1851 = "Roguelikes are games that feature turn-based tactical combat in a randomly generated environment. In addition, death is final: if your character dies, there is no way to play on, not even by loading an earlier save. Permanent death makes for very tense games, where the stakes are high, while the random generation ensures that replaying the earlier parts of the game remains interesting. Famous roguelikes are "; Constant SC_865 = "Rolling "; Constant SC_465 = "Running through the smoke, you stumble across "; Constant SC_211 = "Sample Hint"; Constant SC_249 = "Save, restore, quit, undo"; Constant SC_187 = "Screams rip from your throat as soon as you become aware of the mindbogglingly hideous monster that resides here, an abomination referred to only as the Nameless Horror."; Constant SC_1013 = "Sensing perhaps that it cannot grow further in its current confines, the ape does not lick of the blood."; Constant SC_1530 = "Set to 1 HP."; Constant SC_507 = "Several figures seem to have been smudged out. "; Constant SC_1769 = "Several large pipes "; Constant SC_729 = "Several of the "; Constant SC_1076 = "Several of the daggers float out to stop the attack."; Constant SC_1628 = "She"; Constant SC_1453 = "Since you are strengthened by "; Constant SC_1764 = "Skulls and bones lie scattered amongst the ruined tombs. One big sarcophagus is still intact, and currently "; Constant SC_845 = "Smashed by the chains, your broken body is slowly dragged towards the core of the golem -- where an unmentionable fate awaits it."; Constant SC_1511 = "Smith"; Constant SC_126 = "Smoke comes from a small iron pipe that is sticking out of the wall. Perhaps it went somewhere useful once, but whatever was attached to it seems to have been forcibly removed."; Constant SC_500 = "Smoke immediately starts pouring forth from the pipes"; Constant SC_191 = "Smoke is everywhere. You are completely disoriented."; Constant SC_501 = "Smoke stops coming from the pipes"; Constant SC_1878 = "So if you remember that you want to kill the chain golem, say, you first type ~r~ (for ~remember~) to see in what room the chain golem was; and then you type ~go to Temple of Sul~ or something like that, and press enter until you are there."; Constant SC_155 = "Some entropic demon or deity has given this scythe the ability to rust the opponent's weapons in combat."; Constant SC_105 = "Some say the Blademaster sold his soul for this forge. Whether infernal or simply magical, it is continually heated by ever-burning sulphur unconsumed, and has been used to craft wonders. Even someone as unskilled as you can insert weapons into it in order to heat them up."; Constant SC_1316 = "Something prevents you from teleporting."; Constant SC_89 = "Something seems to be wrong, but you cannot find positive evidence."; Constant SC_1865 = "Sometimes, you will find yourself in a fight you cannot handle. To check whether this is so, you can examine the monsters -- examining is always a free action, which does not cost you a turn. When you examine a monster, you will be told its level. In general, you don't want to attack a level 2 monster until you have killed a level 1 monster; you don't want to attack a level 3 monster until you have killed a level 2 monster; and so on."; Constant SC_1687 = "Spatterlight"; Constant SC_1843 = "Special powers: "; Constant SC_278 = "Start a new game "; Constant SC_259 = "Stun three different creatures in a single game."; Constant SC_1919 = "Stunning performance "; Constant SC_737 = "Suddenly changing its direction, the jumping bomb launches itself towards "; Constant SC_340 = "Suddenly, "; Constant SC_439 = "Sul is displeased with your spurious prayer!"; Constant SC_437 = "Sul uncurses "; Constant SC_229 = "System Requirements"; Constant SC_1385 = "TEST: "; Constant SC_244 = "Tension"; Constant SC_1844 = "Tension: "; Constant SC_1783 = "Thankfully, the ape is somewhat smaller than you are"; Constant SC_1696 = "Thanks also to Captain Orange for allowing me to use his photo for the cover image."; Constant SC_1247 = "That cannot be sprayed."; Constant SC_1513 = "That passage no longer exists."; Constant SC_1294 = "That transformation was more than your body could handle."; Constant SC_1629 = "That"; Constant SC_371 = "The "; Constant SC_1815 = "The Last Incantation"; Constant SC_545 = "The Nameless Horror emits a maddening shriek"; Constant SC_739 = "The Reaper advances towards "; Constant SC_1057 = "The Reaper contemplates the meaning of Death."; Constant SC_1058 = "The Reaper immerses himself further into his meditations on mortality."; Constant SC_837 = "The abyss of the soul collapses in on itself and disappears with a soft ~plop~."; Constant SC_771 = "The abyss of the soul hovers in the air, nearly motionless."; Constant SC_1380 = "The abyss of the soul pulsates, "; Constant SC_312 = "The adamantine blade "; Constant SC_315 = "The adamantine blade suddenly vanishes."; Constant SC_600 = "The air is full of the tiny brown spores of the "; Constant SC_1011 = "The ape immediately licks the blood of its enemy from its knuckles. Nourished by this substance, it grows to "; Constant SC_1286 = "The armadillo gobbles up "; Constant SC_1090 = "The armadillo lumbers aside."; Constant SC_1046 = "The armadillo makes a few thoughtful movements with its tail."; Constant SC_1045 = "The armadillo narrows its eyes. You assume it is concentrating."; Constant SC_726 = "The armadillo raises its tail threateningly towards "; Constant SC_1285 = "The armadillo sniffs along the ground, searching for food."; Constant SC_1288 = "The armadillo suddenly becomes deathly pale!"; Constant SC_1078 = "The armadillo tries to ward off the attack with its tail."; Constant SC_513 = "The artist has skillfully drawn a battle scene between you and Malygris, where you are evidently being crushed by the mighty wizard. Large portions of the drawing have been wiped out."; Constant SC_505 = "The artist has skillfully drawn a battle scene involving "; Constant SC_856 = "The assassin's laugh as you fall down is the most evil thing you have ever heard. It is also the last."; Constant SC_833 = "The aswang "; Constant SC_1373 = "The aswang attempts to hex "; Constant SC_1378 = "The aswang flies up in the air and flees "; Constant SC_761 = "The aswang rushes at "; Constant SC_1379 = "The aswang searches for a way to flee, but finds none."; Constant SC_1369 = "The aswang suddenly transforms into "; Constant SC_522 = "The beacon is already off."; Constant SC_520 = "The beacon is already on."; Constant SC_95 = "The black stones have been scratched in a million fights, and will nevermore lose the faint colour of blood. This is the temple of Aite, whose laughing statue rises above all."; Constant SC_721 = "The blood ape "; Constant SC_1077 = "The blood ape attempts to stop the attack with its hairy forearms."; Constant SC_814 = "The blood ape crashes down with a huge smack"; Constant SC_1787 = "The blood ape has grown to colossal proportions, hardly fitting in the room. You fear it could easily crush you"; Constant SC_1784 = "The blood ape has grown to the proportion of a very broad-chested human"; Constant SC_1785 = "The blood ape now stands taller than you, and its fists have grown bigger than your head"; Constant SC_842 = "The blood ape pounds you into a pulp with its fists, then feasts on your body."; Constant SC_813 = "The blood ape topples over with a small grunt"; Constant SC_1089 = "The blood ape tries to jump out of the way."; Constant SC_1171 = "The blood-hungry soul that animated the ape is absorbed into your own body. You are strong. You hunger for blood. ("; Constant SC_1092 = "The chain golem attempts to squirm out of the way."; Constant SC_1080 = "The chain golem lashes out with a heavy iron chain, trying to stop the attack."; Constant SC_1052 = "The chain golem speeds up, its chains whirling through the air."; Constant SC_1053 = "The chain golem spins even faster, audibly slashing the air with its whip-like metal appendages."; Constant SC_1051 = "The chain golem starts rotating slowly, spinning its chains around its core."; Constant SC_818 = "The chains lash out one final time, blindly seeking prey -- but fall down limply before they can hit anyone. With thousands of hard metal clicks they start falling asunder."; Constant SC_848 = "The contemplative northern barbarian ends your life, with what seems to be a hint of sadness in his face."; Constant SC_1103 = "The corpse "; Constant SC_1284 = "The dagger hits, dealing 1 damage and reducing "; Constant SC_829 = "The defender falls to the ground with a smash, never to stand up again."; Constant SC_749 = "The defender starts lumbering towards "; Constant SC_333 = "The dragon armour has claimed your life."; Constant SC_93 = "The exactly elliptical room is dominated by a towering statue of Nomos, built out of harsh geometrical forms."; Constant SC_104 = "The famous workshop of the master of Algir has been transported here in all its glory. A huge forge dominates the room."; Constant SC_1504 = "The following creatures have been vanquished:"; Constant SC_774 = "The game is saved and loaded automatically. There is no need to restore your game manually."; Constant SC_773 = "The game is saved and loaded automatically. There is no need to save it manually."; Constant SC_535 = "The gaseous essence is no fluid, and cannot be drunk. You could, however, "; Constant SC_940 = "The giant tentacle "; Constant SC_826 = "The giant tentacle crashes down, never to rise again."; Constant SC_745 = "The giant tentacle moves in to grab "; Constant SC_1340 = "The giant tentacle tightens its muscles, but the "; Constant SC_1337 = "The giant tentacle tightens its muscles, dealing "; Constant SC_1098 = "The giant tentacle tries to avoid the blow."; Constant SC_1343 = "The giant tentacle vigourously shakes "; Constant SC_541 = "The grenade explodes, dealing "; Constant SC_746 = "The healer pokes his sword at "; Constant SC_827 = "The healer stares in disbelief at his fatal wounds before he topples over."; Constant SC_354 = "The illusions do not affect anyone"; Constant SC_1387 = "The imp "; Constant SC_1386 = "The imp cackles in a loud, shrieking voice."; Constant SC_840 = "The imp dies with a sad screech."; Constant SC_767 = "The imp dives at "; Constant SC_1109 = "The imp tries to fly away."; Constant SC_863 = "The imp's claws open your jugular vein, and hot blood spurts all around."; Constant SC_1008 = "The impact of the blow "; Constant SC_995 = "The impact shatters the glass cannon."; Constant SC_1056 = "The jumping bomb accelerates yet further, your image of it dissolving almost into a blur."; Constant SC_1093 = "The jumping bomb attempts to bump out of the way."; Constant SC_1054 = "The jumping bomb jumps up and down a little bit faster."; Constant SC_1055 = "The jumping bomb speeds up, and is now bumping around energetically."; Constant SC_383 = "The last thing you hear is booming but mirthless laughter."; Constant SC_1160 = "The laws of this place prevent further digging."; Constant SC_623 = "The machine beeps angrily and rejects "; Constant SC_629 = "The machine confirms that this is "; Constant SC_1024 = "The magical dagger saps "; Constant SC_113 = "The magical field gone, the portal now seems pretty useless."; Constant SC_502 = "The magical field has dissipated, and the portal is now useless."; Constant SC_1786 = "The massive blood ape towers above you, having grown to the size of an elephant"; Constant SC_1317 = "The mindslug blasts "; Constant SC_847 = "The mindslug crashes on top of you, burying your body under tons of oozing gastropod flesh."; Constant SC_1095 = "The mindslug oozes out of the way."; Constant SC_532 = "The minute amount of magical essence would immediately evaporate and be lost forever. To use an essence, "; Constant SC_1861 = "The most important combat command is ~attack~, which can be abbreviated to ~a~. If you attack, you attempt to hit the enemy. Whether the blow hits or not is partly determined by a random number, but the circumstances play a very important role as well. The entire calculation will be shown on the screen, so if you are curious, you can always see why you hit or missed."; Constant SC_1505 = "The most important special commands in "; Constant SC_516 = "The most valuable thing you find is a putrefying arm that might function as a club."; Constant SC_1255 = "The nature of scrolls suddenly becomes clear to you."; Constant SC_795 = "The numerical representation of combat cannot be switched off in this game."; Constant SC_1761 = "The only feature breaking the monotony of the circular room made of polished white marble is a huge "; Constant SC_529 = "The painting seems to be magically protected."; Constant SC_498 = "The pipes are already closed."; Constant SC_497 = "The pipes are already open."; Constant SC_843 = "The ravenous armadillo smashes your head in with its tail club."; Constant SC_369 = "The room fills with "; Constant SC_1794 = "The room is dominated by a chain golem, a moving mass of iron and copper chains, both thick and thin, that hulks in its center"; Constant SC_751 = "The rotting corpse "; Constant SC_832 = "The rotting corpse disintegrates slimily."; Constant SC_398 = "The salve at the ready, you attempt to reach "; Constant SC_679 = "The sarcophagus contains "; Constant SC_680 = "The sarcophagus is disappointingly empty. Some other grave robber must have been here before you."; Constant SC_628 = "The scroll analyser refuses to open."; Constant SC_1258 = "The scroll disappears and you remain hidden."; Constant SC_1252 = "The scroll disappears, but something has stopped you from teleporting."; Constant SC_1257 = "The scroll does nothing, since you had no cursed items."; Constant SC_1256 = "The scroll uncurses "; Constant SC_1862 = "The second most important combat command is ~concentrate~, which can be abbreviated to ~c~. By concentrating, you can attain three stages of concentration, which give you progressively greater bonuses on your attacks and the damage you deal. Most fights cannot be won by just attacking over and over: you need to get at least one or two levels of concentration to make your attacks effective. However, if you get damaged, you lose your concentration -- so you'll have to weigh the advantages of higher concentration against the risk of losing it."; Constant SC_12 = "The sensation of you ethereal body coexisting with solid rock is rather unpleasant. You can see nothing."; Constant SC_120 = "The sense of evil emanating from the very stone of this room is almost overpowering."; Constant SC_542 = "The smell makes you gag."; Constant SC_117 = "The smell of decay here is overwhelming. A large pile of human body parts lies in a corner."; Constant SC_548 = "The smell of rotting meat fills your nostrils."; Constant SC_1575 = "The smoke coalesces to "; Constant SC_1062 = "The smoke demon becomes even denser and now seems almost material."; Constant SC_766 = "The smoke demon casts his vaporous tendrils towards "; Constant SC_838 = "The smoke demon drifts apart"; Constant SC_1108 = "The smoke demon gently floats out of the way."; Constant SC_1060 = "The smoke demon seems to become denser."; Constant SC_429 = "The smoke makes it harder to see clearly. (All sighted creatures receive a -"; Constant SC_1101 = "The soldier attempts to jump away, using his shield for additional cover."; Constant SC_1083 = "The soldier raises his shield to stop the attack."; Constant SC_107 = "The staircase winds around the wall, leaving the middle of the room empty."; Constant SC_493 = "The statue seems impervious to harm."; Constant SC_463 = "The stench of rotting bodies overwhelms everything else."; Constant SC_717 = "The swarm of daggers "; Constant SC_1088 = "The swarm of daggers attempts to outmaneuver the attack."; Constant SC_770 = "The swarm of daggers regroups."; Constant SC_103 = "The symbols seem to spell out a magical formula. Your knowledge of necromancy is limited, and the only way to find out what the formula does would be by reading it."; Constant SC_697 = "The thorns deal "; Constant SC_1365 = "The thorny bushes are already here."; Constant SC_441 = "The time for a new intervention by Isatzo has not yet come."; Constant SC_68 = "The tiny anchor made of marble may seem nothing but a sailor's souvenir, but appearances deceive. It has been imbued with a powerful spell that makes it impossible to teleport away from the room it is in. An ornate ~N~ at the bottom designates it as the work of the mysterious sorcerer Ningauble."; Constant SC_828 = "The tormentor cries in pain and rage as her body's vital functions fail."; Constant SC_747 = "The tormentor raises her staff towards "; Constant SC_1307 = "The undead are no longer haunted by Death, so you cannot reap them."; Constant SC_1828 = "The undead monster has currently taken the form of "; Constant SC_477 = "The undead should not seek blessings."; Constant SC_992 = "The vampiric dagger "; Constant SC_84 = "The vast entrance hall is empty, silent, foreboding. Skull-sized rubies project a red light far too bright for the eyes of a human."; Constant SC_1658 = "The violence of the absorption drives "; Constant SC_122 = "The walls of this cavern are covered with the spores of the rust fungus."; Constant SC_547 = "The world shakes as the Nameless Horror roars in defiance"; Constant SC_1641 = "Their"; Constant SC_1653 = "Theirs"; Constant SC_1648 = "Them"; Constant SC_1873 = "Then there is ~remember~, which can be abbreviated to ~r~. This very handy actions tells you a lot of things: which exits you haven't explored yet; which rooms you have visited; which monsters you have seen, and where; and it also gives you a random tip about Kerkerkruip. Use this command even more often!"; Constant SC_1161 = "There already is a passage there."; Constant SC_1863 = "There are also two defensive moves: ~dodge~ and ~parry~, which can be abbreviated to ~do~ and ~p~ respectively. These two moves are useful when you must react to an attack of your opponent - they will make you harder to hit. Common sense will generally tell you which of the two is the best. (For instance, don't try to parry a huge warhammer if you are carrying a dagger.)"; Constant SC_1864 = "There are many other actions you can take: you can ~retreat~, try to ~pray~ in a temple, use your possessions, and so on. Some of these possibilities will be explained in further sections of this help menu. But ~attack~, ~concentrate~, ~dodge~ and ~parry~ are the four essential moves."; Constant SC_1274 = "There is absolutely no way you could pull that off in a combat situation. The ment would get spilled everywhere."; Constant SC_125 = "There is no mistaking the smell of this room: an imp has been living here for centuries."; Constant SC_1164 = "There is no passage there to collapse."; Constant SC_440 = "There is nothing for Isatzo to balance here -- you must be engaged in a fight."; Constant SC_1390 = "There is nowhere to retreat to."; Constant SC_1499 = "There seems to be no available route towards Malygris."; Constant SC_650 = "There seems to be somewhat different stone "; Constant SC_1391 = "There's nothing here to retreat from."; Constant SC_1527 = "These fools are no match for you!"; Constant SC_1729 = "These goggles have been magically enchanted to grant sharper eyesight to the wearer. They were made for the marquis of Savon, who wasted his eyes poring over ancient tomes in his ill-lit library. "; Constant SC_60 = "These goggles prevent the wearer from seeing anything at all. A free-for-all fight between condemned criminals forced to wear such goggles is one of the most beloved shows during the Feast of Flesh; you have to smile as you recall the spectacle."; Constant SC_77 = "These graceful boots, supposedly made by the master of Algir, will grant you impeccable footwork in combat. This will undoubtedly grant you extra turns now and then. Unfortunately, when a prince of Algir wore these boots in the War of the Woods, they were cursed by a dying druid. It is now exceedingly unsafe to wear them."; Constant SC_76 = "These graceful boots, supposedly made by the master of Algir, will grant you impeccable footwork in combat. This will undoubtedly grant you extra turns now and then."; Constant SC_427 = "These small brown flaked look innocent enough, but they corrode iron faster than one would think possible."; Constant SC_115 = "These tomes appear to be written in many different alphabets, but none you can make any sense of."; Constant SC_146 = "These two pieces of wood with a metal chain between them can be surprisingly dangerous."; Constant SC_474 = "They are insubstantial."; Constant SC_620 = "They are secured to the ceiling by magic more powerful than you can break."; Constant SC_86 = "They have been filled with the power of suns long extinct, and are now fixed to the ceiling of the wizard's domain. You cannot bear to look at them."; Constant SC_528 = "They seem to be rooted to the spot."; Constant SC_1636 = "They"; Constant SC_594 = "Thick"; Constant SC_595 = "Thin"; Constant SC_689 = "Things are not your enemies."; Constant SC_1836 = "This "; Constant SC_1817 = "This corpse has definitely seen better times"; Constant SC_98 = "This crystal rubble is all that is left of the proud statue of Sul."; Constant SC_1697 = "This game has been inspired by many works of interactive fiction, computer roleplaying games and roguelikes. I want to single out "; Constant SC_61 = "This grenade is rumoured to be extremely effective against undead."; Constant SC_1731 = "This harsh and heavy crown was once worn by one of the emperors of Yahvinna, a line of rulers known for their unbending willpower. "; Constant SC_173 = "This heavily armoured priest is a defender of Aite, one of the front-line troops of the armies of this horrible faith."; Constant SC_1757 = "This huge hall is filled with the radiant images of warriors long dead, fighting their bloody battles over and over again."; Constant SC_69 = "This is a magical blade made of the hardest substance in the universe. You wonder how long the spell will last."; Constant SC_1752 = "This is going better than expected. Could it be that Malygris is not as invulnerable as you used to believe? You dare not yet hope"; Constant SC_72 = "This is the blade that chopped off the head of Philip the Traitor after he had been found guilty of murdering his brother, Charles IV. Ever since, pilgrims have flocked to Montenoir's temple of Nomos to see and revere it. How it has ended up in this dungeon is anyone's guess."; Constant SC_97 = "This is the crystal-clear statue of Sul, goddess of blessings and purification. She has been known to lift curses; but she has also been rumoured to hate spurious prayers."; Constant SC_82 = "This lovely suit has been made of dragon leather, the most durable and most magical substance known to man. It protects the wearer against heat and most kinds of damage, but continuously drains his or her health. Use with extreme caution."; Constant SC_182 = "This magical dagger saps the powers of any enemy it hits, and transfers it to the wielder."; Constant SC_159 = "This male barbarian is strong and muscular. He looks like an able and shrewd fighter."; Constant SC_1727 = "This monstrous necklace is made of shards of glass, fossilised teeth, broken points of daggers and thorns. It is imbued with a magic that deals paralysing pain to anyone who is wounded in combat. "; Constant SC_116 = "This otherwise unremarkable room has been decorated with a fascinating drawing."; Constant SC_530 = "This place is blessedly free of rust spores."; Constant SC_431 = "This place is free of smoke."; Constant SC_1743 = "This powerful artefact looks like a smooth tube of white stone. It can be used to "; Constant SC_64 = "This robe is adorned with smoke-like, cloudy patterns."; Constant SC_73 = "This sleek dagger will magically transfer some of the damage dealt to the target as health to its owner."; Constant SC_81 = "This small metal bottle contains the magical essence of addiction, distilled from the brain of a ment user. When inhaled, it greatly increases you addiction to ment -- increasing both the positive effects of a high and the negative effects of a low."; Constant SC_1713 = "This small metal bottle contains the magical essence of caution, distilled from the brain of "; Constant SC_1737 = "This small metal bottle contains the magical essence of greed, distilled from the bones of the legendary thief Mithaldo, whose hunger for treasure was so great that he let himself be swallowed by a dragon in order to get at the jewels the beast had eaten through the centuries. When the dragon was slain some decades later, Mithaldo's bony fingers were found in the dragon's stomach, still clinging to a large diamond. "; Constant SC_1723 = "This small metal bottle contains the magical essence of patience, distilled from the brain of "; Constant SC_1719 = "This small metal bottle contains the magical essence of rage, distilled from the brain of "; Constant SC_83 = "This small vial holds the blood of a powerful vampire. Drinking it might have far-reaching consequences."; Constant SC_172 = "This staff of pain wounds with magic that can be neither parried nor dodged."; Constant SC_63 = "This warlike metal mask is painted with the holy symbols of Aite, and is a sacred object of her religion."; Constant SC_71 = "This weird contraption contains a powerful fungus killing substance. Spraying it will immediately clear a room of all spores."; Constant SC_1776 = "This weird machine can identify scrolls, "; Constant SC_111 = "This wheel can be turned to open or close the pipes."; Constant SC_167 = "This white-robed priest is a healer of Aite. Their task is to support the other fanatics in their never-ending crusade."; Constant SC_1625 = "Those"; Constant SC_238 = "Time and initiative"; Constant SC_1487 = "Tip"; Constant SC_459 = "To balance the combat, Isatzo sets the concentration of "; Constant SC_458 = "To balance the combat, Isatzo sets your concentration to "; Constant SC_204 = "UNDO the last command"; Constant SC_549 = "Unable to go automatically: you haven't provided a destination yet. Please use a command like ~go to Entrance Hall~ first."; Constant SC_1068 = "Unbalanced by the hit, the chain golem "; Constant SC_438 = "Unfortunately, Sul cannot help you."; Constant SC_1922 = "Unmoved "; Constant SC_75 = "Used by wizards to construct their dungeons, a magical pickaxe can be used to dig tunnels in whatever direction you wish. Just dig north, for instance. In a pinch, it can also serve as a weapon."; Constant SC_74 = "Used by wizards to construct their dungeons, a magical spade can be used to dig tunnels in whatever direction you wish. Just dig north, for instance."; Constant SC_241 = "Using items"; Constant SC_1542 = "VERY HARD"; Constant SC_3 = "Victor Gijsbers"; Constant SC_264 = "Wake up an unbeatable foe."; Constant SC_79 = "Wearing this powerful cloak allows you to become hidden and sneak through the dungeon undetected. You cannot hide in the presence of enemies, though."; Constant SC_234 = "What is Interactive Fiction?"; Constant SC_233 = "What is Kerkerkruip?"; Constant SC_235 = "What is a roguelike?"; Constant SC_247 = "What is happening to my health?"; Constant SC_1748 = "When read, this powerful book will turn all "; Constant SC_935 = "When the jumping bomb hits "; Constant SC_1215 = "When the soul of "; Constant SC_1706 = "When thrown, the "; Constant SC_7 = "When thrown, this grenade will release a thick cloud of rust spores -- a nasty fungus that rusts away iron. Its use is forbidden in all civilised and most uncivilised countries."; Constant SC_8 = "When thrown, this grenade will release thick clouds of smoke. You once used such devices to help the prince escape from a confrontation with the henchmen of the vengeful countess of Poitier; that was long before your relationship soured."; Constant SC_6 = "When thrown, this magical grenade emits a pulse of searing light so strong that it will blind anyone in its vicinity, even if they close their eyes. The device is universally judged to be Metastasio's most useless invention."; Constant SC_128 = "When turned on, this beacon will ensure that all teleportations in Kerkerkruip lead to this room."; Constant SC_1897 = "When you absorb the soul of a monster of a certain level, all souls of the same or a lower level are immediately driven out of your body. This means that you lose the statistics bonuses and the special powers granted by those souls. For example, suppose you kill Miranda, a level 1 monster. You absorb Miranda's soul, receive some bonuses, and get the stun ability. Next, you kill the level 2 chain golem. Absorbing the chain golem's soul will immediately repel Miranda's soul; so you lose the stun ability, and the bonuses given by Miranda's soul; but you gain the lash ability and the bonuses given by the chain golem. (These bonuses are bigger, because he is a higher level monster.) Next, you kill the blood ape, a level 1 monster. Because the soul of the chain golem is of a higher level than that of the blood ape, it does not get repelled, and you receive all the blood ape bonuses and the associated power while retaining those granted by the chain golem."; Constant SC_304 = "When you claimed that you were tough enough to take on Malygris single-handedly, everyone knew you had been drinking much more than was good for you. And the prince is not one to let an opportunity pass. Before you could so much as protest, his court mage opened a portal and you were shoved through. Predictably, the portal immediately disappeared. You doubt they're going to open it up again -- but at least you can try to make good on your boast and kill Malygris, the Wizard of Kerkerkruip!"; Constant SC_1463 = "When you die, you "; Constant SC_70 = "While it doesn't provide much protection against weapons, this vest could be useful for its fire resistance. It bears the signs of the Montenoir alchemist guild."; Constant SC_94 = "While neither cruel nor evil, Nature as Law is the most uncaring and least merciful of all gods. His dictates are obeyed, not out of fear, but out of necessity. Praying to Nomos can be beneficial -- if you are willing to submit to his commands."; Constant SC_66 = "While not exactly a nimble weapon, this fearsome axe is certainly able to deal out some punishment."; Constant SC_353 = "While only an image that flickers and then disappears, it startles "; Constant SC_67 = "While otherwise a normal sword, it has been enchanted to look like smoke or fog."; Constant SC_31 = "Who knows what this weird scroll will do?"; Constant SC_176 = "Why the great druidess Bodmall has chosen to work together with Malygris is a subject of much speculation among scholars of the occult -- but here she is, standing between you and victory. She is a very powerful foe."; Constant SC_1400 = "Willpower"; Constant SC_263 = "Win the game with less than 15 maximum health."; Constant SC_262 = "Win the game without using ~dodge~ and ~parry~."; Constant SC_260 = "Win the game without using ment."; Constant SC_523 = "With a complicated magical gesture, you turn off the teleportation beacon."; Constant SC_521 = "With a confident magical gesture, you turn on the teleportation beacon. All teleportations in the dungeon will now end up here."; Constant SC_1280 = "With a final effort, you manage to form part of your body into a dagger -- but you succumb from the exertion"; Constant SC_640 = "With a huge crash, the "; Constant SC_1124 = "With a loud smack, you land in "; Constant SC_355 = "With a mighty bang, the statue of shards "; Constant SC_499 = "With a mighty push, you turn the wheel. "; Constant SC_831 = "With a thunderous explosion, the demonic assassin is pulled back to Hell."; Constant SC_1573 = "With an eery cry, the "; Constant SC_588 = "Would you like to "; Constant SC_1263 = "YOU HAVE LOST THE GAME"; Constant SC_601 = "You "; Constant SC_339 = "You OD'ed."; Constant SC_1228 = "You already are in bat form."; Constant SC_1231 = "You already are in vampire form."; Constant SC_1328 = "You already dominate "; Constant SC_470 = "You apply the salve wherever you can, significantly weakening "; Constant SC_308 = "You are "; Constant SC_1405 = "You are a "; Constant SC_1042 = "You are already maximally concentrated."; Constant SC_1031 = "You are already wielding "; Constant SC_613 = "You are carrying"; Constant SC_1431 = "You are covered in "; Constant SC_612 = "You are empty-handed."; Constant SC_1310 = "You are instantly transported to the Land of the Dead, where "; Constant SC_1536 = "You are killed by "; Constant SC_504 = "You are not a barbarian!"; Constant SC_1291 = "You are not powerful enough for that; the maximum level of scales you can use is "; Constant SC_691 = "You are not that desperate!"; Constant SC_1496 = "You are not yet powerful enough to magically sense anything."; Constant SC_1846 = "You are of course free to read this manual, but if you're just looking to dive into "; Constant SC_1331 = "You are too afraid of "; Constant SC_858 = "You are torn apart by the "; Constant SC_1419 = "You are under the influence of "; Constant SC_1014 = "You are"; Constant SC_1577 = "You ask Aite for help in battle, and "; Constant SC_1210 = "You attempt to absorb the soul of "; Constant SC_862 = "You attempt to breathe, but your lungs are only filled with smoke and more smoke. The murderous vapours seem to become as thick as wool as you desperately try to exhale, inhale, anything -- all in vain. As you suffocate, tendrils of smoke softly close your eyelids."; Constant SC_492 = "You attempt to climb Sul's statue, but it so smooth that you make no progress at all."; Constant SC_1335 = "You attempt to dominate "; Constant SC_1329 = "You attempt to impress "; Constant SC_1312 = "You attempt to reap "; Constant SC_428 = "You attempt to take some of the rust spores, but they are blown out of your hand as you close it."; Constant SC_379 = "You become "; Constant SC_1267 = "You become ethereal"; Constant SC_1556 = "You blend into the shadows."; Constant SC_1450 = "You can "; Constant SC_1467 = "You can attempt to "; Constant SC_1702 = "You can contact me with comments, bug reports, and anything else at victor@@64lilith.cc."; Constant SC_112 = "You can enter this portal -- but who knows where you will be getting out?"; Constant SC_1877 = "You can just ~go~ into a direction, of course, but Kerkerkruip also allows you to ~go to~ a specific location you have already visited. This will move you one room nearer to that location. If you want to continue your journey, just press enter: an empty command will be read as continuing the previous go to command."; Constant SC_1162 = "You can only collapse a passage to the north, south, west, east, up, or down."; Constant SC_1349 = "You can only confuse as a reaction to an attack."; Constant SC_1156 = "You can only dig north, south, west, east, up, or down."; Constant SC_1327 = "You can only dominate enemies."; Constant SC_1517 = "You can only equip weapons and clothing."; Constant SC_1304 = "You can only lash as a reaction to an attack."; Constant SC_1032 = "You can only ready weapons."; Constant SC_1295 = "You can't bring yourself to do it."; Constant SC_464 = "You cannot dig tunnels in the smoke."; Constant SC_1308 = "You cannot do that to yourself."; Constant SC_422 = "You cannot do that while you are ethereal."; Constant SC_622 = "You cannot let go of "; Constant SC_124 = "You cannot make out any details, given all the smoke that is coming from it; but you could enter the portal if you really wanted to."; Constant SC_635 = "You cannot move as a reaction--try to survive and move away on your own turn."; Constant SC_1250 = "You cannot read that."; Constant SC_1034 = "You cannot ready a new weapon until you have gotten rid of "; Constant SC_1392 = "You cannot retreat as a reaction--try to survive and run away on your own turn."; Constant SC_1275 = "You cannot snort that."; Constant SC_471 = "You carefully apply the salve to "; Constant SC_394 = "You committed suicide. How unseemly!"; Constant SC_646 = "You committed suicide."; Constant SC_482 = "You courageously attack the illusory beings."; Constant SC_488 = "You cut yourself badly as soon as you touch the statue."; Constant SC_639 = "You decide to run past your enemies."; Constant SC_648 = "You decide to test whether the inside of the forge is truly as hot as hell. Your experience is consistent with the stories."; Constant SC_514 = "You definitely do not want any of the body parts."; Constant SC_841 = "You desperately attempt to fend off the flying daggers, but there are too many of them. One by one the daggers sink into your flesh, and your soul flees through a thousand mouths."; Constant SC_709 = "You died valiantly, but in vain."; Constant SC_495 = "You do not find anything useful among the debris."; Constant SC_1279 = "You do not have that power."; Constant SC_1229 = "You do not possess that power."; Constant SC_1087 = "You dodge, but there is no attack."; Constant SC_1394 = "You don't know a safe path towards that location."; Constant SC_91 = "You doubt there is enough room on the bridge to safely dodge an attack."; Constant SC_400 = "You either fail to pronounce the symbols correctly, or the spell has lost its power, for there is no effect."; Constant SC_544 = "You enjoy an idle boast as much as the next person, but this is hardly the time for an in-depth conversation."; Constant SC_487 = "You experimentally whack the statue a couple of times, but it doesn't seem to budge. Has this pleased the goddess, or angered her?"; Constant SC_939 = "You exploded."; Constant SC_1557 = "You fail to hide."; Constant SC_1425 = "You feel "; Constant SC_552 = "You feel fragile."; Constant SC_404 = "You feel mysterious."; Constant SC_1266 = "You feel protected."; Constant SC_1497 = "You feel that the shortest route towards Malygris lies "; Constant SC_1043 = "You feel too stunned for concentration."; Constant SC_402 = "You feel your flesh crawl."; Constant SC_567 = "You fell into the lava."; Constant SC_517 = "You find nothing else in the pile."; Constant SC_87 = "You force yourself to look straight into the light -- but after the merest fraction of a second, you involuntarily close your eyes against the painful glare."; Constant SC_1867 = "You get a free retreat upon entering a room for the first time:"; Constant SC_1440 = "You have been "; Constant SC_1554 = "You have been awarded the "; Constant SC_1137 = "You have been blown to pieces."; Constant SC_368 = "You have been revealed!"; Constant SC_1136 = "You have blown yourself to pieces."; Constant SC_1584 = "You have defeated Malygris on easy mode, proving that you understand the basics of the game! Next time, Kerkerkruip will start in normal mode. From now on, new items, monsters and locations will be available; and the game will start tracking your winning streak and will scale the difficulty accordingly. Have fun!"; Constant SC_1532 = "You have defeated Malygris! With his immense magical powers now at your disposal, it is time to teleport back to Montenoir and pay a little visit to the prince."; Constant SC_1750 = "You have fought many men and quite a few women, but fighting Malygris is something else. Your hairs are raised on end, and your body quivers with fear"; Constant SC_1582 = "You have found "; Constant SC_109 = "You have no idea how this machine works, but it seems that you can insert an item into it."; Constant SC_1477 = "You have not yet explored:"; Constant SC_1306 = "You have not yet seen "; Constant SC_1484 = "You have seen the following creatures in these locations:"; Constant SC_1217 = "You have set off a cataclysm that destroys galaxies."; Constant SC_1456 = "You have the "; Constant SC_1474 = "You have the power of Bodmall, which allows you to summon "; Constant SC_1471 = "You have the power of the fanatics of Aite, which allows you to "; Constant SC_1483 = "You have visited the following rooms: "; Constant SC_1531 = "You have won... technically. The Nameless Horror will find you soon, and you end will not be pretty."; Constant SC_1287 = "You hear a crunching noise "; Constant SC_1516 = "You hop around."; Constant SC_550 = "You hum a battle hymn."; Constant SC_170 = "You immediately recognise the black-robed mage as a tormentor of Aite, savage priests who specialise in inflicting pain on all who oppose their faith."; Constant SC_1515 = "You jump down the vast staircase."; Constant SC_524 = "You jump into the thorns, receiving "; Constant SC_1314 = "You live in the aging cells of an infant's face, and your voice can be heard in the silence after each heartbeat. Death attends on us always, and in his guise you find yourself poised to reap "; Constant SC_88 = "You look into infinity."; Constant SC_1072 = "You lose your "; Constant SC_1159 = "You magically create a tunnel "; Constant SC_1879 = "You may find the 3-page Beginner's Guide more convenient, but here is a list of some of the special verbs of Kerkerkruip. (Verbs having to do with specific objects or skills will not be given: you can look these up through examining the object, or the ~status~ command.)"; Constant SC_1901 = "You may have seen that killing a monster will not always increase your maximum health, and you may have also encountered situations in which it actually lowers your maximum health. How is this possible?"; Constant SC_1290 = "You must choose a positive number."; Constant SC_1163 = "You need a suitable tool to collapse passages."; Constant SC_1157 = "You need a suitable tool to dig."; Constant SC_1925 = "You need to supply the level of scales you wish to attain by typing, for example, ~scales 2~. This would give you 2 damage reduction and would cost you 2 health. The maximum number you can choose is equal to the highest level monster you have defeated, which is currently "; Constant SC_1075 = "You parry, but there is no attack."; Constant SC_1465 = "You partake of the omnipresence of Death. You can "; Constant SC_418 = "You plan on "; Constant SC_1526 = "You plunk "; Constant SC_432 = "You pray again, even though Nomos has already given you his decree. Will your iniquity go unpunished?"; Constant SC_436 = "You pray, but there is no answer."; Constant SC_624 = "You put "; Constant SC_406 = "You read the symbols once again, but nothing happens."; Constant SC_1779 = "You recognise a complicated stone contraption in a corner as a teleportation beacon. It seems to be "; Constant SC_1680 = "You reign eternally!"; Constant SC_1278 = "You repeat the ritual: cutting, forming into a line, snorting through the straw, inhaling sharply. The ment kicks in immediately."; Constant SC_551 = "You reveal your presence to the world."; Constant SC_1591 = "You roll"; Constant SC_467 = "You run through an endless world of clouds"; Constant SC_489 = "You sacrificed yourself to Aite."; Constant SC_135 = "You see the symbols of all the death-worshiping religions you know: skulls and bones, pentagrams, moons, bats, scythes, and many others. Presumably, their presence strengthens undead and demonic beings."; Constant SC_133 = "You see the symbols of all the more life-affirming religions you know: suns and stars, solar wheels, crosses, hexagrams, flames, trees, birds, and many others. Presumably, their presence protects against undead and demonic beings."; Constant SC_1507 = "You send a quick prayer to the "; Constant SC_1500 = "You sense an epic artefact that can be found by going "; Constant SC_1502 = "You sense an epic artefact that is currently unreachable, but lies somewhere "; Constant SC_1044 = "You shift your attention away from remaining hidden. "; Constant SC_193 = "You should never see this text. That would be a BUG."; Constant SC_399 = "You smash one of the mirrors -- but there are only further mirrors behind it. After a few seconds, the shards of glass start moving up and reform the mirror. Not a crack can be seen."; Constant SC_1366 = "You speak the ancient syllables, and bushes full of thorns grow out of the ground!"; Constant SC_1259 = "You speak the awful spell, and "; Constant SC_1261 = "You speak the awful spell, but nothing happens. The planes must not be well-aligned."; Constant SC_480 = "You speak the mighty words of power. In a flare of magical light, the tome disappears -- and all "; Constant SC_1326 = "You spend some time trying to impress an inanimate object."; Constant SC_1248 = "You spray the fungicide all around. The rust spores blacken and wither."; Constant SC_1249 = "You spray the fungicide all around."; Constant SC_90 = "You stand on an exceedingly narrow bridge crossing a seething lake of lava. Dodging would be suicidal."; Constant SC_1894 = "You start the game with three packages of ment, a powerful but highly addictive drug. When you snort ment for the first time, you will receive a +1 attack bonus, a +1 damage bonus, a +1 defence bonus, +1 damage reduction, and a +1 bonus on any attribute checks. The second time you snort ment, your body has become more attuned to the drug, and these bonuses increase to +2; and the third time, they increase to +3. This is a huge bonus. However, your body also becomes dependent on ment, and once its effects wear off you are left with a permanent penalty equal to the bonus you just got. You can get a temporary reprieve by snorting more ment -- but you only have three packages, and can never get more. On the one hand, you should make sure that you are not left with a -3 penalty, no more ment, and a Malygris who is still in good shape. On the other hand, ment can allow you to win fights you could not otherwise win. Using this dangerous resource carefully is one of the keys to success in "; Constant SC_466 = "You stumble blindly through the smoke"; Constant SC_565 = "You successfully dodge the attack of "; Constant SC_331 = "You suddenly feel "; Constant SC_1570 = "You suddenly feel divinely inspired and "; Constant SC_1269 = "You suddenly feel very skilled!"; Constant SC_1339 = "You suffocate in the tentacle's deadly embrace."; Constant SC_1276 = "You take a small mirror, a razor and a straw from one of your pockets, and carefully cut the ment on the surface of the mirror. The light blue powder is looking very good. Using the straw, you manage to get almost all of it in your nose. You inhale sharply a few times -- and feel the ment do its awesome work."; Constant SC_632 = "You throw "; Constant SC_536 = "You throw the flash grenade, and a blinding light "; Constant SC_539 = "You throw the rust grenade, and it immediately releases a cloud of rust spores!"; Constant SC_540 = "You throw the smoke grenade, and it immediately explodes into a large cloud of smoke."; Constant SC_85 = "You took it from the body of the young Count of Poitier, that fateful night in Maurice's whorehouse. He would nevermore plot against you."; Constant SC_1281 = "You transform part of your own flesh into a magical dagger, which then speeds towards "; Constant SC_1232 = "You turn back into a vampire!"; Constant SC_1230 = "You turn into a bat!"; Constant SC_1234 = "You uncork the little bottle and push its mouth deep into your "; Constant SC_772 = "You wait patiently. You feel no tension."; Constant SC_407 = "You walk through rock."; Constant SC_408 = "You walk through the walls."; Constant SC_553 = "You were a little too fragile for that."; Constant SC_485 = "You were crushed."; Constant SC_1935 = "You were killed by "; Constant SC_1305 = "You will attempt to strike swiftly, before you are hit."; Constant SC_684 = "You will first have to take off "; Constant SC_685 = "You will first have to uncurse "; Constant SC_1324 = "You will live on as the unquestioning slave of a giant slug."; Constant SC_796 = "You will no longer see combat-related numbers."; Constant SC_791 = "You will no longer see the AI weightings."; Constant SC_543 = "You will not touch that. You will touch a lot of things, but not that."; Constant SC_797 = "You will now see combat-related numbers."; Constant SC_790 = "You will now see the AI weightings."; Constant SC_110 = "You wonder whether these are actual chimneys or tiny portals to some smoke-filled hell."; Constant SC_1626 = "You"; Constant SC_503 = "You'd love to partake of the undoubtedly forbidden knowledge stored in them, but you cannot read any of the alphabets -- and there is little doubt that the languages would be equally unfamiliar to you."; Constant SC_10 = "You'll have to read this scroll to find out what it does."; Constant SC_1393 = "You're already here."; Constant SC_375 = "Your "; Constant SC_320 = "Your arrival interrupts "; Constant SC_864 = "Your attack ends your own life."; Constant SC_1145 = "Your body explodes vehemently, but "; Constant SC_1139 = "Your body explodes vehemently, killing "; Constant SC_1147 = "Your body shattered to pieces!"; Constant SC_329 = "Your body, having regained its material solidity, cannot coexist in one place with solid rock."; Constant SC_337 = "Your breathing is becoming heavy and irregular."; Constant SC_328 = "Your claws cannot effectively wield "; Constant SC_1563 = "Your cry of pain reveals your presence."; Constant SC_1127 = "Your death was not particularly heroic."; Constant SC_1309 = "Your dedication to Death went too far."; Constant SC_1207 = "Your greed causes you to absorb an extra "; Constant SC_857 = "Your last sensation is the rotting corpse falling on top of you and oozing its way into your nostrils."; Constant SC_1273 = "Your life force has been negated."; Constant SC_564 = "Your scales disappear."; Constant SC_1384 = "Your soul descends into the darkest abyss."; Constant SC_1751 = "Your victory, though small, has given you a little confidence. Perhaps you can survive long enough to escape this dungeon"; Constant SC_699 = "Your weakened body could not handle this!"; Constant SC_1642 = "Your"; Constant SC_1654 = "Yours"; Constant SC_584 = "@{5C})"; Constant SC_585 = "@{5C}d+"; Constant SC_1724 = "a High Priest of Yahvinna who endured fifty-three years of torture just to hear the news of his enemy's death"; Constant SC_1720 = "a berserk warrior from the far north"; Constant SC_342 = "a blast of dragon's fire"; Constant SC_1371 = "a bloodthirsty dog"; Constant SC_346 = "a crashing ballista bolt"; Constant SC_341 = "a disintegrating skeletal warrior"; Constant SC_347 = "a drowning knight, crying for his god,"; Constant SC_1831 = "a ferocious black dog with blood-shot eyes"; Constant SC_1835 = "a ferocious black dog"; Constant SC_349 = "a frenzied bull elephant"; Constant SC_348 = "a ghost devouring the flesh of a still living man"; Constant SC_322 = "a hasty"; Constant SC_1663 = "a heavily muscled barbarian succumbing to the fiery breath of a dragon"; Constant SC_1675 = "a hopeful party of sixteen year old adventurers getting slaughtered by "; Constant SC_345 = "a huge fountain of fire"; Constant SC_1830 = "a huge owl-like bird with leathery wings"; Constant SC_1834 = "a huge owl-like bird"; Constant SC_659 = "a level "; Constant SC_663 = "a levelless "; Constant SC_344 = "a naked female slave fleeing in tears"; Constant SC_343 = "a naked male slave screaming in fear"; Constant SC_350 = "a shrieking princess in the claws of a demon"; Constant SC_1781 = "active."; Constant SC_224 = "adamantine"; Constant SC_1488 = "additional information can be gotten with ~status~, ~trophies~ and (once you have defeated enough monsters) ~sense~"; Constant SC_1890 = "allow you to use objects"; Constant SC_983 = "allowing "; Constant SC_606 = "also "; Constant SC_1674 = "an elated thief running towards a huge pile of treasure, which then opens a maw and devours him"; Constant SC_321 = "an intricate"; Constant SC_351 = "an obese king carried by seven blind eunuchs"; Constant SC_1372 = "an owl-like bird with devilish wings"; Constant SC_1829 = "an ugly old woman with long, dirty hair and completely white eyes"; Constant SC_1833 = "an ugly old woman"; Constant SC_1370 = "an ugly witch"; Constant SC_1716 = "an unknown rogue, whose exploits would be legendary if only they were known"; Constant SC_654 = "and "; Constant SC_1823 = "and it smells awful."; Constant SC_1777 = "and seems ready for operation. Just put a scroll in it, and it will do its magic"; Constant SC_1579 = "anxiously"; Constant SC_1930 = "ape's "; Constant SC_386 = "are"; Constant SC_736 = "attempt to smash themselves into"; Constant SC_206 = "bar"; Constant SC_1410 = "bat"; Constant SC_1933 = "beak"; Constant SC_718 = "bears down upon"; Constant SC_1825 = "belongs"; Constant SC_860 = "bird"; Constant SC_571 = "blazingly hot "; Constant SC_658 = "blazingly hot."; Constant SC_1402 = "blind"; Constant SC_1454 = "blood"; Constant SC_558 = "bodies"; Constant SC_559 = "body"; Constant SC_288 = "bomb's detonating surface"; Constant SC_286 = "bony tail club"; Constant SC_424 = "boots of wandering"; Constant SC_1822 = "both of its arms have fallen off, "; Constant SC_1892 = "bring you to this or another menu"; Constant SC_574 = "burning "; Constant SC_537 = "burns away the retinae of anyone unlucky enough to see it clearly, namely, "; Constant SC_359 = "burns"; Constant SC_985 = "but holds on to "; Constant SC_1778 = "but it seems to have broken. It no longer accepts scrolls"; Constant SC_1382 = "but its negative energy dissipates harmlessly"; Constant SC_605 = "can "; Constant SC_733 = "chains "; Constant SC_360 = "chars"; Constant SC_299 = "claws"; Constant SC_1766 = "closed"; Constant SC_216 = "cloth"; Constant SC_1352 = "clouds of fog"; Constant SC_596 = "clouds of smoke"; Constant SC_1746 = "collapse"; Constant SC_643 = "collapses"; Constant SC_1929 = "comment has been recorded"; Constant SC_1346 = "concentrated"; Constant SC_412 = "concentrating instead."; Constant SC_1073 = "concentration"; Constant SC_1578 = "confidently"; Constant SC_166 = "confuse"; Constant SC_1438 = "confused"; Constant SC_417 = "contemplating the inevitability of Death instead."; Constant SC_1770 = "continuously spew forth vapours into this room"; Constant SC_642 = "corridor"; Constant SC_300 = "countless teeth and claws"; Constant SC_754 = "crawls"; Constant SC_572 = "cursed "; Constant SC_573 = "dead "; Constant SC_1212 = "deadly abyss"; Constant SC_296 = "defender's fists"; Constant SC_325 = "demonic being"; Constant SC_715 = "demonic blade"; Constant SC_991 = "destroyed"; Constant SC_836 = "dies howling"; Constant SC_834 = "dies screaming"; Constant SC_835 = "dies screeching"; Constant SC_1744 = "dig"; Constant SC_734 = "direct themselves towards"; Constant SC_793 = "displayed"; Constant SC_1790 = "displays its strength"; Constant SC_789 = "does not detect your presence"; Constant SC_788 = "does not notice you"; Constant SC_411 = "doing nothing instead."; Constant SC_1771 = "dominate the room"; Constant SC_163 = "dominate"; Constant SC_1434 = "dominated"; Constant SC_1426 = "down"; Constant SC_222 = "dragon skin"; Constant SC_413 = "dropping "; Constant SC_195 = "dungeon crawl"; Constant SC_1774 = "empty"; Constant SC_1622 = "es"; Constant SC_1413 = "ethereal"; Constant SC_376 = "etherealness"; Constant SC_317 = "evil intelligence has awakened"; Constant SC_511 = "examine"; Constant SC_151 = "explode on death"; Constant SC_1189 = "explode"; Constant SC_356 = "explodes"; Constant SC_779 = "familiar"; Constant SC_608 = "feel"; Constant SC_1666 = "female"; Constant SC_1671 = "flaming bolts, fired by huge ballistae, flying right over your head"; Constant SC_538 = "flashes through the room"; Constant SC_219 = "flesh"; Constant SC_1106 = "flies"; Constant SC_1401 = "flying"; Constant SC_205 = "foo"; Constant SC_1576 = "form a smoke demon"; Constant SC_1670 = "fountains of fire erupting in the middle of a contingent of archers"; Constant SC_1708 = "fragmentation grenade will explode into many sharp fragments. These are guaranteed to deal damage to everyone in the location"; Constant SC_1802 = "frantically"; Constant SC_1798 = "furiously"; Constant SC_1804 = "gathering speed and"; Constant SC_1406 = "ghoul"; Constant SC_1881 = "give information"; Constant SC_220 = "glass"; Constant SC_587 = "go to"; Constant SC_1388 = "grabs "; Constant SC_1436 = "grappled"; Constant SC_366 = "has"; Constant SC_365 = "have"; Constant SC_1631 = "he"; Constant SC_294 = "healer's fists"; Constant SC_1640 = "her"; Constant SC_1608 = "here"; Constant SC_1652 = "hers"; Constant SC_1375 = "hexed"; Constant SC_794 = "hidden"; Constant SC_1244 = "high"; Constant SC_1568 = "highly concentrated"; Constant SC_1647 = "him"; Constant SC_1639 = "his"; Constant SC_759 = "hoping to land a good kick"; Constant SC_753 = "hops"; Constant SC_569 = "hot "; Constant SC_656 = "hot."; Constant SC_861 = "hound"; Constant SC_1363 = "huge thorny bushes"; Constant SC_1624 = "ies"; Constant SC_1494 = "if a fight proves too much for you, try to ~retreat~. On entering a room for the first time, you can always retreat for free"; Constant SC_1780 = "in"; Constant SC_1928 = "incredibly useful "; Constant SC_533 = "inhale"; Constant SC_213 = "iron"; Constant SC_387 = "is"; Constant SC_1818 = "it has no head, "; Constant SC_1819 = "it misses a leg, "; Constant SC_1820 = "it misses both legs, "; Constant SC_1635 = "it"; Constant SC_756 = "its arms raised"; Constant SC_757 = "its single arm raised"; Constant SC_758 = "its teeth at the ready"; Constant SC_806 = "its"; Constant SC_724 = "jumps at "; Constant SC_1105 = "jumps"; Constant SC_988 = "killing "; Constant SC_781 = "known"; Constant SC_735 = "lash out at"; Constant SC_1460 = "lash out"; Constant SC_149 = "lash"; Constant SC_287 = "lashing chains"; Constant SC_719 = "launches itself at"; Constant SC_218 = "leather"; Constant SC_1235 = "left"; Constant SC_1132 = "lethal"; Constant SC_1023 = "lets go"; Constant SC_297 = "lightning bolt"; Constant SC_1490 = "location"; Constant SC_1071 = "loses most of its speed"; Constant SC_1243 = "low"; Constant SC_1773 = "magical"; Constant SC_1665 = "male"; Constant SC_1668 = "master"; Constant SC_447 = "maximal"; Constant SC_446 = "medium"; Constant SC_358 = "melts"; Constant SC_335 = "ment"; Constant SC_445 = "mild"; Constant SC_1669 = "mistress"; Constant SC_1886 = "move the player"; Constant SC_720 = "moves in to attack"; Constant SC_1272 = "no damage to anyone."; Constant SC_695 = "no damage"; Constant SC_1609 = "no known path"; Constant SC_309 = "no longer hexed"; Constant SC_385 = "no longer stunned"; Constant SC_1447 = "no"; Constant SC_212 = "nondescript"; Constant SC_444 = "none"; Constant SC_816 = "nothing at all"; Constant SC_1821 = "one of its arms has fallen off, "; Constant SC_1765 = "open"; Constant SC_1792 = "paces through the room"; Constant SC_215 = "paper"; Constant SC_661 = "part of a level "; Constant SC_1813 = "perfectly normal"; Constant SC_1740 = "permanently"; Constant SC_139 = "pierce"; Constant SC_1561 = "pike"; Constant SC_1763 = "pile of fragments of the broken statue"; Constant SC_1800 = "ponderously"; Constant SC_415 = "praising the god instead."; Constant SC_175 = "pray"; Constant SC_1415 = "protected"; Constant SC_1801 = "quickly"; Constant SC_223 = "radiant"; Constant SC_1932 = "razor-sharp fingernails"; Constant SC_1621 = "re"; Constant SC_156 = "reap"; Constant SC_1126 = "receiving "; Constant SC_1125 = "receiving no damage"; Constant SC_787 = "remains unaware of your presence"; Constant SC_1495 = "remember how powers work. If you kill a level 3 creature, you will lose all powers of level 3 and lower; so if you want to have more than one power at the same time, you'll have to kill a lower level creature after defeating a higher level creature"; Constant SC_1376 = "resist"; Constant SC_1368 = "returning to normal"; Constant SC_1236 = "right"; Constant SC_301 = "rotting appendages"; Constant SC_598 = "rust moss"; Constant SC_306 = "rust spores"; Constant SC_575 = "rusted "; Constant SC_1018 = "rusts"; Constant SC_1149 = "s"; Constant SC_142 = "scales"; Constant SC_1009 = "scatters"; Constant SC_1791 = "screams at you"; Constant SC_45 = "scroll of death"; Constant SC_39 = "scroll of etherealness"; Constant SC_30 = "scroll of fireworks"; Constant SC_21 = "scroll of ghoulification"; Constant SC_15 = "scroll of identify"; Constant SC_36 = "scroll of protection"; Constant SC_18 = "scroll of remove curse"; Constant SC_24 = "scroll of shadows"; Constant SC_42 = "scroll of skill"; Constant SC_27 = "scroll of summoning"; Constant SC_33 = "scroll of the blade"; Constant SC_51 = "scrolls labelled CHETNAK"; Constant SC_52 = "scrolls labelled CISTROB JIRSGEV"; Constant SC_50 = "scrolls labelled DOLP ZEEZ"; Constant SC_54 = "scrolls labelled HERMEI LE SCHIM"; Constant SC_56 = "scrolls labelled KRIPMETEEL"; Constant SC_55 = "scrolls labelled LONSIFIRA"; Constant SC_48 = "scrolls labelled MORT EILYSH"; Constant SC_49 = "scrolls labelled NAAR OD ERAE"; Constant SC_58 = "scrolls labelled SHALM SAWESAS"; Constant SC_57 = "scrolls labelled SOUSPENOT"; Constant SC_53 = "scrolls labelled TWAN METIER"; Constant SC_59 = "scrolls labelled ZYXYZ"; Constant SC_47 = "scrolls of death"; Constant SC_41 = "scrolls of etherealness"; Constant SC_32 = "scrolls of fireworks"; Constant SC_23 = "scrolls of ghoulification"; Constant SC_17 = "scrolls of identify"; Constant SC_38 = "scrolls of protection"; Constant SC_20 = "scrolls of remove curse"; Constant SC_26 = "scrolls of shadows"; Constant SC_44 = "scrolls of skill"; Constant SC_29 = "scrolls of summoning"; Constant SC_14 = "scrolls of teleportation"; Constant SC_35 = "scrolls of the blade"; Constant SC_1533 = "see "; Constant SC_202 = "see some suggestions for AMUSING things to do"; Constant SC_607 = "see"; Constant SC_776 = "seen"; Constant SC_1381 = "sending out a wave of negative energy that deals "; Constant SC_1672 = "several knights in plate armour struggling to reach the shores of a swamp, while the land retreats before them as if it were alive"; Constant SC_763 = "sharp fingernails ready"; Constant SC_285 = "sharp points"; Constant SC_1347 = "sharp"; Constant SC_1148 = "shatter"; Constant SC_1632 = "she"; Constant SC_1789 = "shows you its teeth"; Constant SC_1673 = "shrieking ghosts being whipped into a frenzy by a necromancer thousands of years old"; Constant SC_1707 = "silver "; Constant SC_214 = "silver"; Constant SC_1788 = "simian creature aggressively "; Constant SC_1417 = "skilled"; Constant SC_1360 = "skin"; Constant SC_765 = "slavering fangs ready"; Constant SC_730 = "slowly spinning "; Constant SC_1796 = "slowly"; Constant SC_290 = "slug's crushing body"; Constant SC_1574 = "smoke demon dissipates"; Constant SC_370 = "smoke"; Constant SC_380 = "solid"; Constant SC_416 = "speaking a language you have never heard instead."; Constant SC_1560 = "spear"; Constant SC_731 = "spinning "; Constant SC_641 = "staircase"; Constant SC_1762 = "statue. Hewn from flawless mountain crystal, it portrays the goddess Sul"; Constant SC_221 = "stone"; Constant SC_1069 = "stops spinning"; Constant SC_147 = "stun"; Constant SC_1016 = "stunned"; Constant SC_722 = "swings at "; Constant SC_1559 = "sword"; Constant SC_764 = "talons and beak outstretched"; Constant SC_1934 = "teeth"; Constant SC_302 = "tendrils"; Constant SC_293 = "tentacle"; Constant SC_1633 = "that"; Constant SC_1725 = "the author of ~A Careful Calculation of the first Twenty Thousand Decimals of the Squared Circle~"; Constant SC_1715 = "the famous Algirian general al-Hawabi, who fought only two battles in a forty year campaign -- and won both"; Constant SC_1714 = "the only councilor of Hargo the Furious of Yahvinna who lived to die of old age"; Constant SC_11 = "the"; Constant SC_1638 = "their"; Constant SC_1650 = "theirs"; Constant SC_1646 = "them"; Constant SC_1634 = "they"; Constant SC_180 = "thorns"; Constant SC_1630 = "those"; Constant SC_1677 = "three bull-men getting eaten by a horrendous swamp monster"; Constant SC_295 = "tormentor's fists"; Constant SC_1812 = "tough and tree-like"; Constant SC_993 = "transfers "; Constant SC_1357 = "turns to wood"; Constant SC_1664 = "two naked "; Constant SC_1403 = "undead"; Constant SC_780 = "unfamiliar"; Constant SC_782 = "unknown"; Constant SC_777 = "unseen"; Constant SC_332 = "unskilled"; Constant SC_1884 = "used in combat"; Constant SC_1826 = "used to belong"; Constant SC_1289 = "vampire armadillo"; Constant SC_1411 = "vampire bat"; Constant SC_1408 = "vampire"; Constant SC_313 = "vanishes"; Constant SC_225 = "vapourous"; Constant SC_1662 = "vast armies of skeletons clash while their masters pray for the help of forbidden deities"; Constant SC_570 = "very hot "; Constant SC_657 = "very hot."; Constant SC_752 = "walks"; Constant SC_1482 = "where you currently are"; Constant SC_1480 = "which lies "; Constant SC_732 = "wildly spinning "; Constant SC_1797 = "wildly"; Constant SC_1927 = "wise "; Constant SC_859 = "witch"; Constant SC_760 = "with no other weapon than its smell"; Constant SC_217 = "wooden"; Constant SC_1888 = "work in specific locations"; Constant SC_986 = "wounding "; Constant SC_941 = "wraps itself around"; Constant SC_1623 = "y"; Constant SC_809 = "you attack"; Constant SC_1492 = "you can ~pray~ in any temple"; Constant SC_1489 = "you can move one room towards a location by typing ~go to "; Constant SC_802 = "you start"; Constant SC_284 = "you"; Constant SC_303 = "your fists"; Constant SC_805 = "your"; Constant SC_1651 = "yours"; Constant SC_1676 = "yourself fighting "; #ifndef p0_specification; Constant p0_specification = 0; #endif; #ifndef p1_indefinite_appearance_tex; Constant p1_indefinite_appearance_tex = 0; #endif; #ifndef p2_variable_initial_value; Constant p2_variable_initial_value = 0; #endif; #ifndef short_name; Constant short_name = 0; #endif; #ifndef plural; Constant plural = 0; #endif; #ifndef article; Constant article = 0; #endif; #ifndef description; Constant description = 0; #endif; #ifndef map_region; Constant map_region = 0; #endif; #ifndef initial; Constant initial = 0; #endif; #ifndef p9_opposite; Constant p9_opposite = 0; #endif; #ifndef door_to; Constant door_to = 0; #endif; #ifndef capacity; Constant capacity = 0; #endif; #ifndef with_key; Constant with_key = 0; #endif; #ifndef p13_disambiguation_id; Constant p13_disambiguation_id = 0; #endif; #ifndef p14_health; Constant p14_health = 0; #endif; #ifndef p15_initiative; Constant p15_initiative = 0; #endif; #ifndef p16_ai_rules; Constant p16_ai_rules = 0; #endif; #ifndef p17_permanent_health; Constant p17_permanent_health = 0; #endif; #ifndef p18_melee; Constant p18_melee = 0; #endif; #ifndef p19_defence; Constant p19_defence = 0; #endif; #ifndef p20_damage_die; Constant p20_damage_die = 0; #endif; #ifndef p21_weapon_damage_bonus; Constant p21_weapon_damage_bonus = 0; #endif; #ifndef p22_dodgability; Constant p22_dodgability = 0; #endif; #ifndef p23_passive_parry_max; Constant p23_passive_parry_max = 0; #endif; #ifndef p24_active_parry_max; Constant p24_active_parry_max = 0; #endif; #ifndef p25_weapon_attack_bonus; Constant p25_weapon_attack_bonus = 0; #endif; #ifndef p26_concentration; Constant p26_concentration = 0; #endif; #ifndef p27_difficulty_level; Constant p27_difficulty_level = 0; #endif; #ifndef p28_x_coordinate; Constant p28_x_coordinate = 0; #endif; #ifndef p29_y_coordinate; Constant p29_y_coordinate = 0; #endif; #ifndef p30_z_coordinate; Constant p30_z_coordinate = 0; #endif; #ifndef p31_level; Constant p31_level = 0; #endif; #ifndef p32_group_level; Constant p32_group_level = 0; #endif; #ifndef p33_perception; Constant p33_perception = 0; #endif; #ifndef p34_dexterity; Constant p34_dexterity = 0; #endif; #ifndef p35_willpower; Constant p35_willpower = 0; #endif; #ifndef p36_inherent_damage_modifier; Constant p36_inherent_damage_modifier = 0; #endif; #ifndef p37_special_weapon_info; Constant p37_special_weapon_info = 0; #endif; #ifndef p38_power_level; Constant p38_power_level = 0; #endif; #ifndef p39_command_text; Constant p39_command_text = 0; #endif; #ifndef p40_heal_power; Constant p40_heal_power = 0; #endif; #ifndef p41_heal_cooldown; Constant p41_heal_cooldown = 0; #endif; #ifndef p42_current_heal_cooldown; Constant p42_current_heal_cooldown = 0; #endif; #ifndef p43_teleport_amount; Constant p43_teleport_amount = 0; #endif; #ifndef p44_teleport_eagerness; Constant p44_teleport_eagerness = 0; #endif; #ifndef p45_disintegrate_power; Constant p45_disintegrate_power = 0; #endif; #ifndef p46_disintegrate_cooldown; Constant p46_disintegrate_cooldown = 0; #endif; #ifndef p47_current_disintegrate_coo; Constant p47_current_disintegrate_coo = 0; #endif; #ifndef p48_follower_percentile_chan; Constant p48_follower_percentile_chan = 0; #endif; #ifndef p49_original_material; Constant p49_original_material = 0; #endif; #ifndef p50_heat_strength; Constant p50_heat_strength = 0; #endif; #ifndef p51_intrinsic_heat_resistanc; Constant p51_intrinsic_heat_resistanc = 0; #endif; #ifndef p52_internal_heat; Constant p52_internal_heat = 0; #endif; #ifndef p53_personal_corrosion_resis; Constant p53_personal_corrosion_resis = 0; #endif; #ifndef p54_smoke_timer; Constant p54_smoke_timer = 0; #endif; #ifndef p55_ethereal_timer; Constant p55_ethereal_timer = 0; #endif; #ifndef p56_scroll_effect; Constant p56_scroll_effect = 0; #endif; #ifndef p57_true_name; Constant p57_true_name = 0; #endif; #ifndef p58_hidden_identity; Constant p58_hidden_identity = 0; #endif; #ifndef p59_hit_protection; Constant p59_hit_protection = 0; #endif; #ifndef p60_stun_count; Constant p60_stun_count = 0; #endif; #ifndef p61_constriction_prevention; Constant p61_constriction_prevention = 0; #endif; #ifndef p62_last_seen_location; Constant p62_last_seen_location = 0; #endif; #ifndef pluralname; Constant pluralname = 0; #endif; #ifndef proper; Constant proper = 0; #endif; #ifndef privately_named; Constant privately_named = 0; #endif; #ifndef light; Constant light = 0; #endif; #ifndef visited; Constant visited = 0; #endif; #ifndef light; Constant light = 0; #endif; #ifndef edible; Constant edible = 0; #endif; #ifndef static; Constant static = 0; #endif; #ifndef scenery; Constant scenery = 0; #endif; #ifndef clothing; Constant clothing = 0; #endif; #ifndef pushable; Constant pushable = 0; #endif; #ifndef moved; Constant moved = 0; #endif; #ifndef concealed; Constant concealed = 0; #endif; #ifndef workflag; Constant workflag = 0; #endif; #ifndef mentioned; Constant mentioned = 0; #endif; #ifndef enterable; Constant enterable = 0; #endif; #ifndef transparent; Constant transparent = 0; #endif; #ifndef open; Constant open = 0; #endif; #ifndef openable; Constant openable = 0; #endif; #ifndef lockable; Constant lockable = 0; #endif; #ifndef locked; Constant locked = 0; #endif; #ifndef female; Constant female = 0; #endif; #ifndef neuter; Constant neuter = 0; #endif; #ifndef on; Constant on = 0; #endif; #ifndef p104_recurring; Constant p104_recurring = 0; #endif; #ifndef p106_seen; Constant p106_seen = 0; #endif; #ifndef p108_familiar; Constant p108_familiar = 0; #endif; #ifndef p110_hating; Constant p110_hating = 0; #endif; #ifndef p111_faction; Constant p111_faction = 0; #endif; #ifndef p112_combat_state; Constant p112_combat_state = 0; #endif; #ifndef p113_pressing; Constant p113_pressing = 0; #endif; #ifndef p114_ambiguously_plural; Constant p114_ambiguously_plural = 0; #endif; #ifndef p116_readied; Constant p116_readied = 0; #endif; #ifndef p118_at_parry; Constant p118_at_parry = 0; #endif; #ifndef p120_at_dodge; Constant p120_at_dodge = 0; #endif; #ifndef p122_cardinal; Constant p122_cardinal = 0; #endif; #ifndef p124_placed; Constant p124_placed = 0; #endif; #ifndef p126_collapse; Constant p126_collapse = 0; #endif; #ifndef p127_connectable; Constant p127_connectable = 0; #endif; #ifndef p129_connection_inviting; Constant p129_connection_inviting = 0; #endif; #ifndef p131_placeable; Constant p131_placeable = 0; #endif; #ifndef p133_habitable; Constant p133_habitable = 0; #endif; #ifndef p135_treasurable; Constant p135_treasurable = 0; #endif; #ifndef p137_extra_accepting; Constant p137_extra_accepting = 0; #endif; #ifndef p139_nogo; Constant p139_nogo = 0; #endif; #ifndef p141_vertical_placement; Constant p141_vertical_placement = 0; #endif; #ifndef p142_mood; Constant p142_mood = 0; #endif; #ifndef p143_consecrated; Constant p143_consecrated = 0; #endif; #ifndef p145_digging_tool; Constant p145_digging_tool = 0; #endif; #ifndef p147_collapsing_tool; Constant p147_collapsing_tool = 0; #endif; #ifndef p149_emotionless; Constant p149_emotionless = 0; #endif; #ifndef p151_non_attacker; Constant p151_non_attacker = 0; #endif; #ifndef p152_weapon_user; Constant p152_weapon_user = 0; #endif; #ifndef p154_size; Constant p154_size = 0; #endif; #ifndef p155_granted; Constant p155_granted = 0; #endif; #ifndef p157_granting; Constant p157_granting = 0; #endif; #ifndef p158_flyer; Constant p158_flyer = 0; #endif; #ifndef p160_blinded; Constant p160_blinded = 0; #endif; #ifndef p162_eyeless; Constant p162_eyeless = 0; #endif; #ifndef p164_spontaneous_teleporter; Constant p164_spontaneous_teleporter = 0; #endif; #ifndef p166_teleportable; Constant p166_teleportable = 0; #endif; #ifndef p168_teleport_impossible_awa; Constant p168_teleport_impossible_awa = 0; #endif; #ifndef p170_follower; Constant p170_follower = 0; #endif; #ifndef p172_ranged; Constant p172_ranged = 0; #endif; #ifndef p174_armour_stoppable; Constant p174_armour_stoppable = 0; #endif; #ifndef p176_material_adjective; Constant p176_material_adjective = 0; #endif; #ifndef p177_destroying_heat; Constant p177_destroying_heat = 0; #endif; #ifndef p178_heat_behaviour; Constant p178_heat_behaviour = 0; #endif; #ifndef p179_corrosion_resistance; Constant p179_corrosion_resistance = 0; #endif; #ifndef p180_material; Constant p180_material = 0; #endif; #ifndef p181_risky; Constant p181_risky = 0; #endif; #ifndef p183_aite_loved; Constant p183_aite_loved = 0; #endif; #ifndef p185_flaming; Constant p185_flaming = 0; #endif; #ifndef p187_cooler; Constant p187_cooler = 0; #endif; #ifndef p189_rusted; Constant p189_rusted = 0; #endif; #ifndef p191_rust_spored; Constant p191_rust_spored = 0; #endif; #ifndef p193_rust_spored_candidate; Constant p193_rust_spored_candidate = 0; #endif; #ifndef p195_rust_releasing; Constant p195_rust_releasing = 0; #endif; #ifndef p197_death_blessed; Constant p197_death_blessed = 0; #endif; #ifndef p199_death_cursed; Constant p199_death_cursed = 0; #endif; #ifndef p201_player_form; Constant p201_player_form = 0; #endif; #ifndef p202_hidden; Constant p202_hidden = 0; #endif; #ifndef p204_on_the_lookout; Constant p204_on_the_lookout = 0; #endif; #ifndef p206_unnaturally_aware; Constant p206_unnaturally_aware = 0; #endif; #ifndef p208_unnaturally_aware_follo; Constant p208_unnaturally_aware_follo = 0; #endif; #ifndef p210_smoke_attuned; Constant p210_smoke_attuned = 0; #endif; #ifndef p212_ethereal; Constant p212_ethereal = 0; #endif; #ifndef p214_valuation; Constant p214_valuation = 0; #endif; #ifndef p215_actual; Constant p215_actual = 0; #endif; #ifndef p217_having_knowledge_of; Constant p217_having_knowledge_of = 0; #endif; #ifndef p218_scroll_parsable; Constant p218_scroll_parsable = 0; #endif; #ifndef p219_plural_name; Constant p219_plural_name = 0; #endif; #ifndef p220_corruptible; Constant p220_corruptible = 0; #endif; #ifndef p222_cursed; Constant p222_cursed = 0; #endif; #ifndef p224_curse_identified; Constant p224_curse_identified = 0; #endif; #ifndef p226_cautious; Constant p226_cautious = 0; #endif; #ifndef p228_enraged; Constant p228_enraged = 0; #endif; #ifndef p230_patient; Constant p230_patient = 0; #endif; #ifndef p232_greedy; Constant p232_greedy = 0; #endif; #ifndef p234_at_stun; Constant p234_at_stun = 0; #endif; #ifndef p236_sometime_stunned; Constant p236_sometime_stunned = 0; #endif; #ifndef p237_domination; Constant p237_domination = 0; #endif; #ifndef p238_grappling; Constant p238_grappling = 0; #endif; #ifndef p239_tentacle_confused; Constant p239_tentacle_confused = 0; #endif; #ifndef p240_barkskinned; Constant p240_barkskinned = 0; #endif; #ifndef p242_as_shape; Constant p242_as_shape = 0; #endif; #ifndef p243_hexed; Constant p243_hexed = 0; #endif; #ifndef p245_smoke_demoned; Constant p245_smoke_demoned = 0; #endif; #ifndef p247_retreater; Constant p247_retreater = 0; #endif; #ifndef p249_initiative_conferring; Constant p249_initiative_conferring = 0; #endif; #ifndef p251_runner; Constant p251_runner = 0; #endif; #ifndef worn; Constant worn = 0; #endif; #ifndef vector; Constant vector = 0; #endif; #ifndef room_index; Constant room_index = 0; #endif; #ifndef door_dir; Constant door_dir = 0; #endif; #ifndef door_to; Constant door_to = 0; #endif; #ifndef absent; Constant absent = 0; #endif; #ifndef found_in; Constant found_in = 0; #endif; #ifndef list_together; Constant list_together = 0; #endif; #ifndef cap_short_name; Constant cap_short_name = 0; #endif; #ifndef mark_as_room; Constant mark_as_room = 0; #endif; #ifndef mark_as_thing; Constant mark_as_thing = 0; #endif; #ifndef component_parent; Constant component_parent = 0; #endif; #ifndef component_child; Constant component_child = 0; #endif; #ifndef component_sibling; Constant component_sibling = 0; #endif; #ifndef regional_found_in; Constant regional_found_in = 0; #endif; #ifndef IK1_Count; Constant IK1_Count = 0; #endif; #ifndef IK1_Link; Constant IK1_Link = 0; #endif; #ifndef IK2_Count; Constant IK2_Count = 0; #endif; #ifndef IK2_Link; Constant IK2_Link = 0; #endif; #ifndef IK3_Count; Constant IK3_Count = 0; #endif; #ifndef IK3_Link; Constant IK3_Link = 0; #endif; #ifndef IK4_Count; Constant IK4_Count = 0; #endif; #ifndef IK4_Link; Constant IK4_Link = 0; #endif; #ifndef IK5_Count; Constant IK5_Count = 0; #endif; #ifndef IK5_Link; Constant IK5_Link = 0; #endif; #ifndef IK6_Count; Constant IK6_Count = 0; #endif; #ifndef IK6_Link; Constant IK6_Link = 0; #endif; #ifndef IK7_Count; Constant IK7_Count = 0; #endif; #ifndef IK7_Link; Constant IK7_Link = 0; #endif; #ifndef IK8_Count; Constant IK8_Count = 0; #endif; #ifndef IK8_Link; Constant IK8_Link = 0; #endif; #ifndef IK9_Count; Constant IK9_Count = 0; #endif; #ifndef IK9_Link; Constant IK9_Link = 0; #endif; #ifndef IK10_Count; Constant IK10_Count = 0; #endif; #ifndef IK10_Link; Constant IK10_Link = 0; #endif; #ifndef IK11_Count; Constant IK11_Count = 0; #endif; #ifndef IK11_Link; Constant IK11_Link = 0; #endif; #ifndef IK12_Count; Constant IK12_Count = 0; #endif; #ifndef IK12_Link; Constant IK12_Link = 0; #endif; #ifndef IK13_Count; Constant IK13_Count = 0; #endif; #ifndef IK13_Link; Constant IK13_Link = 0; #endif; #ifndef IK14_Count; Constant IK14_Count = 0; #endif; #ifndef IK14_Link; Constant IK14_Link = 0; #endif; #ifndef IK15_Count; Constant IK15_Count = 0; #endif; #ifndef IK15_Link; Constant IK15_Link = 0; #endif; #ifndef IK16_Count; Constant IK16_Count = 0; #endif; #ifndef IK16_Link; Constant IK16_Link = 0; #endif; #ifndef IK17_Count; Constant IK17_Count = 0; #endif; #ifndef IK17_Link; Constant IK17_Link = 0; #endif; #ifndef IK18_Count; Constant IK18_Count = 0; #endif; #ifndef IK18_Link; Constant IK18_Link = 0; #endif; #ifndef IK19_Count; Constant IK19_Count = 0; #endif; #ifndef IK19_Link; Constant IK19_Link = 0; #endif; #ifndef IK20_Count; Constant IK20_Count = 0; #endif; #ifndef IK20_Link; Constant IK20_Link = 0; #endif; #ifndef IK21_Count; Constant IK21_Count = 0; #endif; #ifndef IK21_Link; Constant IK21_Link = 0; #endif; #ifndef IK22_Count; Constant IK22_Count = 0; #endif; #ifndef IK22_Link; Constant IK22_Link = 0; #endif; #ifndef IK23_Count; Constant IK23_Count = 0; #endif; #ifndef IK23_Link; Constant IK23_Link = 0; #endif; #ifndef IK24_Count; Constant IK24_Count = 0; #endif; #ifndef IK24_Link; Constant IK24_Link = 0; #endif; #ifndef IK25_Count; Constant IK25_Count = 0; #endif; #ifndef IK25_Link; Constant IK25_Link = 0; #endif; #ifndef IK26_Count; Constant IK26_Count = 0; #endif; #ifndef IK26_Link; Constant IK26_Link = 0; #endif; #ifndef IK27_Count; Constant IK27_Count = 0; #endif; #ifndef IK27_Link; Constant IK27_Link = 0; #endif; #ifndef IK28_Count; Constant IK28_Count = 0; #endif; #ifndef IK28_Link; Constant IK28_Link = 0; #endif; #ifndef IK29_Count; Constant IK29_Count = 0; #endif; #ifndef IK29_Link; Constant IK29_Link = 0; #endif; #ifndef IK30_Count; Constant IK30_Count = 0; #endif; #ifndef IK30_Link; Constant IK30_Link = 0; #endif; #ifndef IK31_Count; Constant IK31_Count = 0; #endif; #ifndef IK31_Link; Constant IK31_Link = 0; #endif; #ifndef IK32_Count; Constant IK32_Count = 0; #endif; #ifndef IK32_Link; Constant IK32_Link = 0; #endif; #ifndef IK33_Count; Constant IK33_Count = 0; #endif; #ifndef IK33_Link; Constant IK33_Link = 0; #endif; #ifndef IK34_Count; Constant IK34_Count = 0; #endif; #ifndef IK34_Link; Constant IK34_Link = 0; #endif; #ifndef IK35_Count; Constant IK35_Count = 0; #endif; #ifndef IK35_Link; Constant IK35_Link = 0; #endif; #ifndef IK36_Count; Constant IK36_Count = 0; #endif; #ifndef IK36_Link; Constant IK36_Link = 0; #endif; #ifndef IK37_Count; Constant IK37_Count = 0; #endif; #ifndef IK37_Link; Constant IK37_Link = 0; #endif; #ifndef IK38_Count; Constant IK38_Count = 0; #endif; #ifndef IK38_Link; Constant IK38_Link = 0; #endif; #ifndef IK39_Count; Constant IK39_Count = 0; #endif; #ifndef IK39_Link; Constant IK39_Link = 0; #endif; #ifndef IK40_Count; Constant IK40_Count = 0; #endif; #ifndef IK40_Link; Constant IK40_Link = 0; #endif; #ifndef IK41_Count; Constant IK41_Count = 0; #endif; #ifndef IK41_Link; Constant IK41_Link = 0; #endif; #ifndef IK42_Count; Constant IK42_Count = 0; #endif; #ifndef IK42_Link; Constant IK42_Link = 0; #endif; #ifndef IK43_Count; Constant IK43_Count = 0; #endif; #ifndef IK43_Link; Constant IK43_Link = 0; #endif; #ifndef IK44_Count; Constant IK44_Count = 0; #endif; #ifndef IK44_Link; Constant IK44_Link = 0; #endif; #ifndef IK45_Count; Constant IK45_Count = 0; #endif; #ifndef IK45_Link; Constant IK45_Link = 0; #endif; #ifndef IK46_Count; Constant IK46_Count = 0; #endif; #ifndef IK46_Link; Constant IK46_Link = 0; #endif; #ifndef IK47_Count; Constant IK47_Count = 0; #endif; #ifndef IK47_Link; Constant IK47_Link = 0; #endif; #ifndef IK48_Count; Constant IK48_Count = 0; #endif; #ifndef IK48_Link; Constant IK48_Link = 0; #endif; #ifndef IK49_Count; Constant IK49_Count = 0; #endif; #ifndef IK49_Link; Constant IK49_Link = 0; #endif; #ifndef IK50_Count; Constant IK50_Count = 0; #endif; #ifndef IK50_Link; Constant IK50_Link = 0; #endif; #ifndef IK51_Count; Constant IK51_Count = 0; #endif; #ifndef IK51_Link; Constant IK51_Link = 0; #endif; #ifndef IK52_Count; Constant IK52_Count = 0; #endif; #ifndef IK52_Link; Constant IK52_Link = 0; #endif; #ifndef IK53_Count; Constant IK53_Count = 0; #endif; #ifndef IK53_Link; Constant IK53_Link = 0; #endif; #ifndef KD_Count; Constant KD_Count = 0; #endif; #ifndef name; Constant name = 0; #endif; #ifndef parse_name; Constant parse_name = 0; #endif; #ifndef action_bitmap; Constant action_bitmap = 0; #endif; #IFNDEF cap_short_name; Constant cap_short_name = short_name; #ENDIF; Array I7_ST_say_one_of --> 25; Array Runtime_Quotations_Displayed --> 1; [ InitialHeapAllocation obj pv; pv = (Global_Vars-->16); (Global_Vars-->16) = BlkValueCreate(LIST_OF_TY,pv,KD18_list_of_objects); pv = (Global_Vars-->22); (Global_Vars-->22) = BlkValueCreate(INDEXED_TEXT_TY,pv,INDEXED_TEXT_TY); pv = (Global_Vars-->33); (Global_Vars-->33) = BlkValueCreate(LIST_OF_TY,pv,KD5_list_of_people); for (obj=1:obj<=TableRows(T9_delayed_actions):obj++) { if (ExistsTableLookUpEntry(T9_delayed_actions, 2, obj)==false) continue; pv = TableLookUpEntry(T9_delayed_actions, 2, obj); if (pv==0) TableLookUpEntry(T9_delayed_actions, 2, obj, true, BlkValueCreate(STORED_ACTION_TY,pv,STORED_ACTION_TY)); } for (obj=1:obj<=TableRows(T11_ai_action_options):obj++) { if (ExistsTableLookUpEntry(T11_ai_action_options, 1, obj)==false) continue; pv = TableLookUpEntry(T11_ai_action_options, 1, obj); if (pv==0) TableLookUpEntry(T11_ai_action_options, 1, obj, true, BlkValueCreate(STORED_ACTION_TY,pv,STORED_ACTION_TY)); } ]; [ DistributeBlockConstants obj pv; ]; #ifdef TARGET_ZCODE; Constant MEMORY_HEAP_SIZE = 8192; #ifnot; Constant MEMORY_HEAP_SIZE = 32768; #endif; Array KD0_phrase_nothing_to_nothing --> ! phrase nothing -> nothing PHRASE_TY 1 UNKNOWN_TY; Array Default_Value_0 --> KD0_phrase_nothing_to_nothing Def_Phrase_0 "default value of phrase nothing -> nothing"; [ Def_Phrase_0 a b c d e f g h; return false; ]; Array KD1_values_based_rule_producin --> ! values based rule producing values RULE_TY 2 VALUE_TY VALUE_TY; Array KD2_activity --> ! activity ACTIVITY_TY 1 NIL_TY; Array KD3_rule --> ! rule RULE_TY 2 ACTION_NAME_TY NIL_TY; Array KD4_list_of_things --> ! list of things LIST_OF_TY 1 9; Array KD5_list_of_people --> ! list of people LIST_OF_TY 1 9; Array KD6_list_of_directions --> ! list of directions LIST_OF_TY 1 9; Array KD7_list_of_scrolltoffecttoalu --> ! list of scroll-effect-values LIST_OF_TY 1 54; Array KD8_list_of_powers --> ! list of powers LIST_OF_TY 1 9; Array KD9_relation_of_rooms_to_doors --> ! relation of rooms to doors RELATION_TY 2 9 9; Array KD10_relation_of_things_to_thi --> ! relation of things to things RELATION_TY 2 9 9; Array KD11_relation_of_factions_to_f --> ! relation of factions to factions RELATION_TY 2 44 44; Array KD12_relation_of_people_to_peo --> ! relation of people to people RELATION_TY 2 9 9; Array KD13_relation_of_rooms_to_room --> ! relation of rooms to rooms RELATION_TY 2 9 9; Array KD14_relation_of_monsters_to_p --> ! relation of monsters to powers RELATION_TY 2 9 9; Array KD15_relation_of_people_to_scr --> ! relation of people to scroll-effect-values RELATION_TY 2 9 54; Array KD16_relation_of_scrolls_to_sc --> ! relation of scrolls to scroll-effect-values RELATION_TY 2 9 54; Array KD17_relation_of_things_to_lis --> ! relation of things to lists of things RELATION_TY 2 9 KD4_list_of_things; Array KD18_list_of_objects --> ! list of objects LIST_OF_TY 1 OBJECT_TY; [ DefaultValueFinder K; if (K == KD0_phrase_nothing_to_nothing) return Default_Value_0; return 0; ]; ! Force the heap to be enabled for Dynamic Tables. #ifndef MEMORY_HEAP_SIZE; Constant MEMORY_HEAP_SIZE = 4096; #endif; Constant BLK_HEADER_N = 0; Constant BLK_HEADER_FLAGS = 1; Constant BLK_FLAG_MULTIPLE = $$00000001; Constant BLK_FLAG_16_BIT = $$00000010; Constant BLK_FLAG_WORD = $$00000100; Constant BLK_FLAG_RESIDENT = $$00001000; Constant BLK_HEADER_KOV = 1; Constant BLK_DATA_OFFSET = 2*WORDSIZE; Constant BLK_DATA_MULTI_OFFSET = 4*WORDSIZE; Constant BLK_NEXT 2; Constant BLK_PREV 3; #IFDEF MEMORY_HEAP_SIZE; ! Constant SHOW_ALLOCATIONS = 1; ! Uncomment this for debugging purposes [ BlkType txb; return txb-->BLK_HEADER_KOV; ]; [ BlkSize txb bsize n; ! Size of an individual block, including header if (txb == 0) return 0; for (bsize=1: nBLK_HEADER_N: bsize=bsize*2) n++; return bsize; ]; [ BlkTotalSize txb tsize; ! Combined size of multiple-blocks for a value if (txb == 0) return 0; if ((txb->BLK_HEADER_FLAGS) & BLK_FLAG_MULTIPLE == 0) return BlkSize(txb); for (:txb~=NULL:txb=txb-->BLK_NEXT) { tsize = tsize + BlkSize(txb); } return tsize; ]; [ BlkDebug txb n k i bsize tot dtot kov; if (txb == 0) "Block never created."; kov = txb-->BLK_HEADER_KOV; print "Block ", txb, " (kov ", kov, "): "; for (:txb~=NULL:txb = txb-->BLK_NEXT) { if (k++ == 100) " ... and so on."; if (txb-->BLK_HEADER_KOV ~= kov) print "*Wrong kov=", txb-->BLK_HEADER_KOV, "* "; n = txb->BLK_HEADER_N; for (bsize=1:n>0:n--) bsize=bsize*2; i = bsize - BLK_DATA_OFFSET; dtot = dtot+i; tot = tot+bsize; print txb, "(", bsize, ") > "; } print dtot, " data in ", tot, " bytes^"; ]; [ BlkDebugDecomposition from to txb pf; if (to==0) to = NULL; for (txb=from:(txb~=to) && (txb~=NULL):txb=txb-->BLK_NEXT) { if (pf) print "+"; print BlkSize(txb); pf = true; } print "^"; ]; Array Blk_Heap -> MEMORY_HEAP_SIZE + 16; ! Plus 16 to allow room for head-free-block [ HeapInitialise n bsize blk2; blk2 = Blk_Heap + 16; Blk_Heap->BLK_HEADER_N = 4; Blk_Heap-->BLK_HEADER_KOV = 0; Blk_Heap->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; Blk_Heap-->BLK_NEXT = blk2; Blk_Heap-->BLK_PREV = NULL; for (bsize=1: bsize < MEMORY_HEAP_SIZE: bsize=bsize*2) n++; blk2->BLK_HEADER_N = n; blk2-->BLK_HEADER_KOV = 0; blk2->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; blk2-->BLK_NEXT = NULL; blk2-->BLK_PREV = Blk_Heap; ]; [ HeapNetFreeSpace multiple txb asize; for (txb=Blk_Heap-->BLK_NEXT: txb~=NULL: txb=txb-->BLK_NEXT) { asize = asize + BlkSize(txb); if (multiple) asize = asize - BLK_DATA_MULTI_OFFSET; else asize = asize - BLK_DATA_OFFSET; } return asize; ]; Constant SMALLEST_BLK_WORTH_ALLOCATING = 12; ! i.e. 2^12 = 4096 bytes [ HeapMakeSpace size multiple newblocksize newblock B n; for (::) { if (multiple) { if (HeapNetFreeSpace(multiple) >= size) rtrue; } else { if (HeapLargestFreeBlock(0) >= size) rtrue; } newblocksize = 1; for (n=0: (nBLK_HEADER_N = n; newblock-->BLK_HEADER_KOV = 0; newblock->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; newblock-->BLK_NEXT = NULL; newblock-->BLK_PREV = NULL; for (B = Blk_Heap-->BLK_NEXT:B ~= NULL:B = B-->BLK_NEXT) if (B-->BLK_NEXT == NULL) { B-->BLK_NEXT = newblock; newblock-->BLK_PREV = B; jump Linked; } Blk_Heap-->BLK_NEXT = newblock; newblock-->BLK_PREV = Blk_Heap; .Linked; ; #ifdef SHOW_ALLOCATIONS; print "Increasing heap to free space map: "; BlkDebugDecomposition(Blk_Heap, 0); #endif; } rtrue; ]; [ HeapLargestFreeBlock multiple txb asize best; best = 0; for (txb=Blk_Heap-->BLK_NEXT: txb~=NULL: txb=txb-->BLK_NEXT) { asize = BlkSize(txb); if (multiple) asize = asize - BLK_DATA_MULTI_OFFSET; else asize = asize - BLK_DATA_OFFSET; if (asize > best) best = asize; } return best; ]; [ BlkAllocate size kov flags dsize n m free_block min_m max_m smallest_oversized_block secondhalf i hsize head tail; if (HeapMakeSpace(size, flags & BLK_FLAG_MULTIPLE) == false) return BlkAllocationError("ran out"); ! Calculate the header size for a block of this KOV if (flags & BLK_FLAG_MULTIPLE) hsize = BLK_DATA_MULTI_OFFSET; else hsize = BLK_DATA_OFFSET; ! Calculate the data size n=0; for (dsize=1: dsize < hsize+size: dsize=dsize*2) n++; ! Seek a free block closest to the correct size, but starting from the ! block after the fixed head-free-block, which we can't touch min_m = 10000; max_m = 0; for (free_block = Blk_Heap-->BLK_NEXT: free_block ~= NULL: free_block = free_block-->BLK_NEXT) { m = free_block->BLK_HEADER_N; ! Current block the ideal size if (m == n) jump CorrectSizeFound; ! Current block too large: find the smallest which is larger than needed if (m > n) { if (min_m > m) { min_m = m; smallest_oversized_block = free_block; } } ! Current block too small: find the largest which is smaller than needed if (m < n) { if (max_m < m) { max_m = m; } } } if (min_m == 10000) { ! Case I: No block is large enough to hold the entire size if (flags & BLK_FLAG_MULTIPLE == 0) return BlkAllocationError("too fragmented"); ! Set dsize to the size in bytes if the largest block available for (dsize=1: max_m > 0: dsize=dsize*2) max_m--; ! Split as a head (dsize-hsize), which we can be sure fits into one block, ! plus a tail (size-(dsize-hsize), which might be a list of blocks head = BlkAllocate(dsize-hsize, kov, flags); if (head == 0) return BlkAllocationError("head block not available"); tail = BlkAllocate(size-(dsize-hsize), kov, flags); if (tail == 0) return BlkAllocationError("tail block not available"); head-->BLK_NEXT = tail; tail-->BLK_PREV = head; return head; } ! Case II: No block is the right size, but some exist which are too big ! Set dsize to the size in bytes of the smallest oversized block for (dsize=1,m=1: m<=min_m: dsize=dsize*2) m++; free_block = smallest_oversized_block; while (min_m > n) { ! Repeatedly halve free_block at the front until the two smallest ! fragments left are the correct size: then take the frontmost dsize = dsize/2; secondhalf = free_block + dsize; secondhalf-->BLK_NEXT = free_block-->BLK_NEXT; if (secondhalf-->BLK_NEXT ~= NULL) (secondhalf-->BLK_NEXT)-->BLK_PREV = secondhalf; secondhalf-->BLK_PREV = free_block; free_block-->BLK_NEXT = secondhalf; free_block->BLK_HEADER_N = (free_block->BLK_HEADER_N) - 1; secondhalf->BLK_HEADER_N = free_block->BLK_HEADER_N; secondhalf-->BLK_HEADER_KOV = free_block-->BLK_HEADER_KOV; secondhalf->BLK_HEADER_FLAGS = free_block->BLK_HEADER_FLAGS; min_m--; } ! Once that is done, free_block points to a block which is exactly the ! right size, so we can fall into... ! Case III: There is a free block which has the correct size. .CorrectSizeFound; ! Delete the free block from the double linked list of free blocks: note ! that it cannot be the head of this list, which is fixed if (free_block-->BLK_NEXT == NULL) { ! We remove final block, so previous is now final (free_block-->BLK_PREV)-->BLK_NEXT = NULL; } else { ! We remove a middle block, so join previous to next (free_block-->BLK_PREV)-->BLK_NEXT = free_block-->BLK_NEXT; (free_block-->BLK_NEXT)-->BLK_PREV = free_block-->BLK_PREV; } free_block-->BLK_HEADER_KOV = KindAtomic(kov); free_block->BLK_HEADER_FLAGS = flags; if (flags & BLK_FLAG_MULTIPLE) { free_block-->BLK_NEXT = NULL; free_block-->BLK_PREV = NULL; } ! Zero out the data bytes in the memory allocated for (i=hsize:ii=0; return free_block; ]; [ BlkAllocationError reason; print "*** Memory ", (string) reason, " ***^"; RunTimeProblem(RTP_HEAPERROR); rfalse; ]; [ BlkMerge block first last pv nx; first = block; last = block; while (last-->BLK_NEXT == last+BlkSize(last)) last = last-->BLK_NEXT; while ((first-->BLK_PREV + BlkSize(first-->BLK_PREV) == first) && (first-->BLK_PREV ~= Blk_Heap)) first = first-->BLK_PREV; pv = first-->BLK_PREV; nx = last-->BLK_NEXT; #ifdef SHOW_ALLOCATIONS; print "Merging: "; BlkDebugDecomposition(pv-->BLK_NEXT, nx); print "^"; #endif; if (BlkRecut(first, last)) { #ifdef SHOW_ALLOCATIONS; print " --> "; BlkDebugDecomposition(pv-->BLK_NEXT, nx); print "^"; #endif; } ]; [ BlkRecut first last tsize backsize mfrom mto bnext backend n dsize fine_so_far; if (first == last) rfalse; mfrom = first; mto = last + BlkSize(last); bnext = last-->BLK_NEXT; fine_so_far = true; for (:mto>mfrom: mto = mto - backsize) { for (n=0, backsize=1: backsize*2 <= mto-mfrom: n++) backsize=backsize*2; if ((fine_so_far) && (backsize == BlkSize(last))) { bnext = last; last = last-->BLK_PREV; bnext-->BLK_PREV = last; last-->BLK_NEXT = bnext; continue; } fine_so_far = false; ! From this point, "last" is meaningless backend = mto - backsize; backend->BLK_HEADER_N = n; backend-->BLK_HEADER_KOV = 0; backend->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; backend-->BLK_NEXT = bnext; if (bnext ~= NULL) { bnext-->BLK_PREV = backend; bnext = backend; } } if (fine_so_far) rfalse; rtrue; ]; [ BlkFree block fromtxb ptxb; if (block == 0) return; if ((block->BLK_HEADER_FLAGS) & BLK_FLAG_RESIDENT) return; BlkValueDestroy(block); if ((block->BLK_HEADER_FLAGS) & BLK_FLAG_MULTIPLE) { if (block-->BLK_PREV ~= NULL) (block-->BLK_PREV)-->BLK_NEXT = NULL; fromtxb = block; for (:(block-->BLK_NEXT)~=NULL:block = block-->BLK_NEXT) ; while (block ~= fromtxb) { ptxb = block-->BLK_PREV; BlkFreeSingleBlock(block); block = ptxb; } } BlkFreeSingleBlock(block); ]; [ BlkFreeSingleBlock block free nx; block-->BLK_HEADER_KOV = 0; block->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; for (free = Blk_Heap:free ~= NULL:free = free-->BLK_NEXT) { nx = free-->BLK_NEXT; if (nx == NULL) { free-->BLK_NEXT = block; block-->BLK_PREV = free; block-->BLK_NEXT = NULL; BlkMerge(block); return; } if (UnsignedCompare(nx, block) == 1) { free-->BLK_NEXT = block; block-->BLK_PREV = free; block-->BLK_NEXT = nx; nx-->BLK_PREV = block; BlkMerge(block); return; } } ]; [ BlkResize block req newsize dsize newblk kov n i otxb flags; if (block == 0) "*** Cannot resize null block ***"; kov = block-->BLK_HEADER_KOV; flags = block->BLK_HEADER_FLAGS; if (flags & BLK_FLAG_MULTIPLE == 0) "*** Cannot resize inextensible block ***"; otxb = block; newsize = req; for (:: block = block-->BLK_NEXT) { n = block->BLK_HEADER_N; for (dsize=1: n>0: n--) dsize = dsize*2; i = dsize - BLK_DATA_MULTI_OFFSET; newsize = newsize - i; if (newsize > 0) { if (block-->BLK_NEXT ~= NULL) continue; newblk = BlkAllocate(newsize, kov, flags); if (newblk == 0) rfalse; block-->BLK_NEXT = newblk; newblk-->BLK_PREV = block; rtrue; } if (block-->BLK_NEXT ~= NULL) { BlkFree(block-->BLK_NEXT); block-->BLK_NEXT = NULL; } rtrue; } ]; [ DebugHeap; print "Managing a heap of initially ", MEMORY_HEAP_SIZE+16, " bytes.^"; print HeapNetFreeSpace(false), " bytes currently free.^"; print "Free space decomposition: "; BlkDebugDecomposition(Blk_Heap); print "Free space map: "; BlkDebug(Blk_Heap); ]; #IFNOT; ! IFDEF MEMORY_HEAP_SIZE [ HeapInitialise; ]; [ BlkFree; ]; [ DebugHeap; "This story file does not use a heap of managed memory."; ]; #ENDIF; ! IFDEF MEMORY_HEAP_SIZE ! A column flag to indicate that the table has been resized. Constant TB_COLUMN_RESIZED $8000; ! Normally, word -->2 of a column contains the index into TB_Blanks where the column's ! blank bits are stored (unless the TB_COLUMN_NOBLANKBITS flag is set). But since we can't ! resize TB_Blanks when adding rows to the table, we need a different scheme. ! For resized columns, word -->2 points instead to the table's information block -- the same ! block for every column -- which contains fields with the offsets listed below. ! It includes some values from the original (statically allocated) table, which are used to ! return the table to its statically allocated state if it's ever changed back to the original size. Constant DT_TIB_ORIGSIZE 0; ! the number of rows originally in the table, or 0 for a fully dynamic table Constant DT_TIB_CIBSTART 1; ! the column info blocks start here ! The column information blocks are part of the table information block. Each column's block ! has a set number of words (DT_CIBSIZE), so the block for column N starts at offset ! DT_TIB_CIBSTART+((N-1)*DT_CIBSIZE) -- recall that column numbers start at 1. Constant DT_CIBSIZE 2; Constant DT_CIB_NEWBLANKS 0; ! address of the dynamically allocated blank bits (if applicable) Constant DT_CIB_ORIGDATA 1; ! address of the original (static) column data, or 0 for a fully dynamic table [ DT_Alloc s rv; ! Pretend we're allocating indexed text, since BlkFree demands a valid KOV. rv = BlkAllocate(s, INDEXED_TEXT_TY, 0); if (rv) return rv + BLK_DATA_OFFSET; print "*** Failed to allocate ", s, " bytes ***^"; rfalse; ]; [ DT_Free b; if (b) BlkFree(b - BLK_DATA_OFFSET); ]; [ DT_CopyBytes num src dest i; #ifdef TARGET_GLULX; @gestalt 6 0 i; if (i) @mcopy num src dest; else for ( i=0: ii = dest->i; #ifnot; @copy_table src dest num; #endif; ]; [ DT_ZeroBytes num loc i; #ifdef TARGET_GLULX; @gestalt 6 0 i; if (i) @mzero num loc; else for ( i=0: ii = 0; #ifnot; @copy_table loc 0 num; #endif; ]; ! implements the phrase "change T to have N rows" [ DT_ResizeTable tab newsize cursize i; ! don't bother if the new size is no different, or if it's unreasonable cursize = TableRows(tab); if (newsize == cursize || newsize < 0) return; ! delegate to a more specific routine if (((tab-->1)-->1) & TB_COLUMN_RESIZED) { if (newsize == ((tab-->1)-->2)-->DT_TIB_ORIGSIZE) DT_DynamicToStatic(tab); else DT_ResizeDynamic(tab, newsize); } else { DT_StaticToDynamic(tab, newsize); } newsize = TableRows(tab); for ( i=cursize+1: i<=newsize: i++ ) TableBlankOutRow(tab, i); ]; ! implements the phrase "original number of rows in T" [ DT_OrigSize tab; if (((tab-->1)-->1) & TB_COLUMN_RESIZED) return ((tab-->1)-->2)-->DT_TIB_ORIGSIZE; else return TableRows(tab); ]; ! finds the address of the blank bits for a particular table and column, whether or not it's been resized [ DT_FindBlankBits tab col tib cib; if (((tab-->col)-->1) & TB_COLUMN_RESIZED) { tib = (tab-->col)-->2; cib = tib + (DT_TIB_CIBSTART * WORDSIZE); cib = cib + ((DT_CIBSIZE * (col - 1)) * WORDSIZE); return cib-->DT_CIB_NEWBLANKS; } else return TB_Blanks + ((tab-->col)-->2); ]; ! converts a static table to a dynamic one [ DT_StaticToDynamic tab newsize rv nc s tib cib i bbs bba obbs; ! allocate TIB nc = tab-->0; s = DT_TIB_CIBSTART; ! # TIB header words s = s + (nc * DT_CIBSIZE); ! # CIB words s = s * WORDSIZE; ! convert words to bytes bbs = (newsize + 7) / 8; ! # blank bytes for each blankable column for ( i=1: i<=nc: i++ ) { if (~~(((tab-->i)-->1) & TB_COLUMN_NOBLANKBITS)) s = s + bbs; } tib = DT_Alloc(s); if (~~tib) rfalse; ! fill it in tib-->DT_TIB_ORIGSIZE = TableRows(tab); cib = tib + (DT_TIB_CIBSTART * WORDSIZE); bba = cib + (nc * DT_CIBSIZE * WORDSIZE); obbs = (((tab-->1)-->0) + 7) / 8; ! # blank bytes in old table for ( i=1: i<=nc: i++ ) { ! fill in CIB if (~~(((tab-->i)-->1) & TB_COLUMN_NOBLANKBITS)) { cib-->DT_CIB_NEWBLANKS = bba; DT_CopyBlanks(TB_Blanks + ((tab-->i)-->2), obbs, bba, bbs); bba = bba + bbs; } else cib-->DT_CIB_NEWBLANKS = 0; cib-->DT_CIB_ORIGDATA = tab-->i; ! allocate new column rv = DT_CopyColumn(tab-->i, newsize, 0, tib); if (~~rv) { DT_BackOutDyn(tab, tib, i - 1); rfalse; } tab-->i = rv; ! advance to next CIB cib = cib + (DT_CIBSIZE * WORDSIZE); } ! success rtrue; ]; ! clean up after DT_StaticToDynamic and DT_ResizeDynamic when memory has run out [ DT_BackOutDyn tab tib copiedcols i j col ocol; for ( i=1: i<=copiedcols: i++ ) { ! move block references back from the copied column before freeing values ocol = tib-->(DT_TIB_CIBSTART + (DT_CIBSIZE * (i - 1)) + DT_CIB_ORIGDATA); col = tab-->i; if ((col-->1) & TB_COLUMN_ALLOCATED) { for ( j=3: j<=col-->0: j++ ) { ocol-->j = col-->j; col-->j = 0; } } DT_FreeColumnValues(tab, col); DT_Free(col); tab-->i = ocol; } DT_Free(tib); ]; ! converts a dynamic table to a static one [ DT_DynamicToStatic tab tib cib cursize newsize nc i bbs obbs dcol scol; cursize = (tab-->1)-->0; tib = (tab-->1)-->2; newsize = tib-->DT_TIB_ORIGSIZE; ! copy data into static table nc = tab-->0; cib = tib + (DT_TIB_CIBSTART * WORDSIZE); bbs = (newsize + 7) / 8; obbs = (cursize + 7) / 8; for ( i=1: i<=nc: i++ ) { dcol = tab-->i; scol = cib-->DT_CIB_ORIGDATA; ! copy blanks if (~~(((dcol)-->1) & TB_COLUMN_NOBLANKBITS)) DT_CopyBlanks(cib-->DT_CIB_NEWBLANKS, obbs, TB_Blanks + (scol-->2), bbs); ! copy values DT_CopyColumn(dcol, newsize, scol); DT_FreeColumnValues(tab, dcol); DT_Free(dcol); tab-->i = scol; ! advance to next CIB cib = cib + (DT_CIBSIZE * WORDSIZE); } ! success DT_Free(tib); rtrue; ]; ! changes the size of a table that's already dynamic [ DT_ResizeDynamic tab newsize nc s bbs bba obbs tib cib otib ocib i rv; ! allocate new TIB nc = tab-->0; s = DT_TIB_CIBSTART; ! # TIB header words s = s + (nc * DT_CIBSIZE); ! # CIB words s = s * WORDSIZE; ! convert words to bytes bbs = (newsize + 7) / 8; ! # blank bytes for each blankable column for ( i=1: i<=nc: i++ ) { if (~~(((tab-->i)-->1) & TB_COLUMN_NOBLANKBITS)) s = s + bbs; } tib = DT_Alloc(s); if (~~tib) rfalse; ! fill it in otib = (tab-->1)-->2; ocib = otib + (DT_TIB_CIBSTART * WORDSIZE); tib-->DT_TIB_ORIGSIZE = otib-->DT_TIB_ORIGSIZE; cib = tib + (DT_TIB_CIBSTART * WORDSIZE); bba = cib + (nc * DT_CIBSIZE * WORDSIZE); obbs = (((tab-->1)-->0) + 7) / 8; ! # blank bytes in old table for ( i=1: i<=nc: i++ ) { ! fill in CIB if (~~(((tab-->i)-->1) & TB_COLUMN_NOBLANKBITS)) { cib-->DT_CIB_NEWBLANKS = bba; DT_CopyBlanks(ocib-->DT_CIB_NEWBLANKS, obbs, bba, bbs); bba = bba + bbs; } else cib-->DT_CIB_NEWBLANKS = 0; ! save a pointer to the old *dynamic* column in case we need to back out. ! it'll be changed to the static column later if we succeed. cib-->DT_CIB_ORIGDATA = tab-->i; ! allocate new column rv = DT_CopyColumn(tab-->i, newsize, 0, tib); if (~~rv) { DT_BackOutDyn(tab, tib, i - 1); rfalse; } tab-->i = rv; ! advance to next CIB cib = cib + (DT_CIBSIZE * WORDSIZE); ocib = ocib + (DT_CIBSIZE * WORDSIZE); } ! success: now we can fix the origdata pointers cib = tib + (DT_TIB_CIBSTART * WORDSIZE); ocib = otib + (DT_TIB_CIBSTART * WORDSIZE); for ( i=1: i<=nc: i++ ) { ! free the old dynamic column rv = cib-->DT_CIB_ORIGDATA; DT_FreeColumnValues(tab, rv); DT_Free(rv); ! fix the pointer cib-->DT_CIB_ORIGDATA = ocib-->DT_CIB_ORIGDATA; ! advance to next CIB cib = cib + (DT_CIBSIZE * WORDSIZE); ocib = ocib + (DT_CIBSIZE * WORDSIZE); } DT_Free(otib); rtrue; ]; [ DT_CopyBlanks src sbytes dest dbytes size; if (dbytes > sbytes) { DT_CopyBytes(sbytes, src, dest); dest = dest + sbytes; dbytes = dbytes - sbytes; DT_ZeroBytes(dbytes, dest); } else DT_CopyBytes(dbytes, src, dest); ]; [ DT_CopyColumn col newsize rv bbptr i kov tc dest oldsize; if (rv == 0) { ! allocate new column i = (newsize + COL_HSIZE + 1) * WORDSIZE; rv = DT_Alloc(i); if (~~rv) rfalse; rv-->0 = newsize + COL_HSIZE; rv-->1 = (col-->1) | TB_COLUMN_RESIZED; rv-->2 = bbptr; } kov = UNKNOWN_TY; if ((col-->1) & TB_COLUMN_ALLOCATED) { tc = (col-->1) & TB_COLUMN_NUMBER; kov = TC_KOV(tc); } oldsize = (col-->0) - COL_HSIZE; if (kov == UNKNOWN_TY) { if (oldsize < newsize) i = oldsize * WORDSIZE; else i = newsize * WORDSIZE; dest = rv + ((COL_HSIZE + 1) * WORDSIZE); col = col + ((COL_HSIZE + 1) * WORDSIZE); DT_CopyBytes(i, col, dest); if (newsize > oldsize) { i = (newsize - oldsize) * WORDSIZE; dest = dest + (oldsize * WORDSIZE); DT_ZeroBytes(i, dest); } } else { for ( i=1: i<=newsize: i++ ) { if (i <= oldsize) { ! new column takes ownership of the pointer tc = col-->(COL_HSIZE + i); col-->(COL_HSIZE + i) = 0; } else tc = BlkValueCreate(kov); rv-->(COL_HSIZE + i) = tc; } } return rv; ]; [ DT_FreeColumnValues tab col kov tc i v; kov = UNKNOWN_TY; if ((col-->1) & TB_COLUMN_ALLOCATED) { tc = (col-->1) & TB_COLUMN_NUMBER; kov = TC_KOV(tc); } if (kov ~= UNKNOWN_TY) { tc = col-->0; for ( i=3: i<=tc: i++ ) { v = col-->i; if (v==0) continue; if (v==TABLE_NOVALUE && CheckTableEntryIsBlank(tab, col, i - 2)) continue; BlkFree(v); col-->i = 0; } } ]; ! implements the phrase "a new table with columns {C} and N blank rows" [ DT_NewTable nrows collist nc i rv tib cib s bbs bba tc kov fl; nc = LIST_OF_TY_GetLength(collist); ! allocate space for table header and TIB s = 1 + nc; ! table header (size word + column pointers) s = s + DT_TIB_CIBSTART; ! # TIB header words s = s + (nc * DT_CIBSIZE); ! # CIB words s = s * WORDSIZE; ! convert words to bytes bbs = (nrows + 7) / 8; ! # blank bytes for each blankable column s = s + (bbs * nc); ! (we make every column blankable here) rv = DT_Alloc(s); if (~~rv) rfalse; rv-->0 = nc; ! fill in TIB tib = rv + ((1 + nc) * WORDSIZE); tib-->DT_TIB_ORIGSIZE = 0; cib = tib + (DT_TIB_CIBSTART * WORDSIZE); bba = cib + (nc * DT_CIBSIZE * WORDSIZE); for ( i=1: i<=nc: i++ ) { ! look up the column's KOV tc = LIST_OF_TY_GetItem(collist, i); kov = TC_KOV(tc); ! fill in CIB cib-->DT_CIB_NEWBLANKS = bba; DT_ZeroBytes(bbs, bba); bba = bba + bbs; cib-->DT_CIB_ORIGDATA = 0; ! allocate new column s = DT_Alloc((3 + nrows) * WORDSIZE); if (~~s) { DT_BackOutNew(rv, i - 1); rfalse; } rv-->i = s; ! figure out column flags and fill in column header tc = tc | TB_COLUMN_RESIZED; if (kov == NUMBER_TY or TIME_TY || kov >= 100) tc = tc | TB_COLUMN_SIGNED; if (kov == UNDERSTANDING_TY) tc = tc | TB_COLUMN_TOPIC; if (kov == NUMBER_TY or TIME_TY or LIST_OF_TY or INDEXED_TEXT_TY || kov >= 100) tc = tc | TB_COLUMN_CANEXCHANGE; if (KOVIsBlockValue(kov)) tc = tc | TB_COLUMN_ALLOCATED; s-->0 = 2 + nrows; s-->1 = tc; s-->2 = tib; ! advance to next CIB cib = cib + (DT_CIBSIZE * WORDSIZE); } ! leave the table blank for (i=1: i<=nrows: i++) TableBlankOutRow(rv, i); return rv; ]; ! clean up after DT_NewTable when memory has run out [ DT_BackOutNew tab donecols i; for ( i=1: i<=donecols: i++ ) DT_Free(tab-->i); DT_Free(tab); ]; [ DT_IsFullyDynamic tab; if (tab == 0) rfalse; if (((tab-->1)-->1 & TB_COLUMN_RESIZED) == 0) rfalse; if (((tab-->1)-->2)-->DT_TIB_ORIGSIZE ~= 0) rfalse; rtrue; ]; ! implements the phrase "deallocate T" [ DT_FreeTable tab i; if (DT_IsFullyDynamic(tab)) { for (i=1: i<=tab-->0: i++) { DT_FreeColumnValues(tab, tab-->i); DT_Free(tab-->i); } DT_Free(tab); rtrue; } print "*** Tried to deallocate a table that wasn't dynamically created ***^"; rfalse; ]; #IFDEF MEMORY_HEAP_SIZE; [ BlkValueExtent block tsize flags; if (block == 0) return 0; flags = block->BLK_HEADER_FLAGS; if (flags & BLK_FLAG_MULTIPLE == 0) tsize = BlkSize(block) - BLK_DATA_OFFSET; else for (:block~=NULL:block=block-->BLK_NEXT) tsize = tsize + BlkSize(block) - BLK_DATA_MULTI_OFFSET; if (flags & BLK_FLAG_16_BIT) return tsize/2; if (flags & BLK_FLAG_WORD) return tsize/WORDSIZE; return tsize; ]; [ BlkValueSetExtent block tsize flags wsize; if (block == 0) return 0; flags = block->BLK_HEADER_FLAGS; wsize = 1; if (flags & BLK_FLAG_WORD) wsize = WORDSIZE; if (flags & BLK_FLAG_16_BIT) wsize = 2; return BlkResize(block, (tsize)*wsize); ]; [ BlkValueRead block pos dsize hsize flags wsize ot op; if (block==0) rfalse; flags = block->BLK_HEADER_FLAGS; wsize = 1; if (flags & BLK_FLAG_WORD) wsize = WORDSIZE; if (flags & BLK_FLAG_16_BIT) wsize = 2; ot = block; op = pos; pos = pos*wsize; if (flags & BLK_FLAG_MULTIPLE) hsize = BLK_DATA_MULTI_OFFSET; else hsize = BLK_DATA_OFFSET; for (:block~=NULL:block=block-->BLK_NEXT) { dsize = BlkSize(block) - hsize; if ((pos >= 0) && (pos0; 2: #Iftrue (WORDSIZE == 2); return block-->0; #ifnot; return (block->0)*256 + (block->1); #endif; 4: return block-->0; } } pos = pos - dsize; } "*** BlkValueRead: reading from index out of range: ", op, " in ", ot, " ***"; ]; [ BlkValueWrite block pos val dsize hsize flags wsize ot op; if (block==0) rfalse; flags = block->BLK_HEADER_FLAGS; wsize = 1; if (flags & BLK_FLAG_WORD) wsize = WORDSIZE; if (flags & BLK_FLAG_16_BIT) wsize = 2; ot = block; op = pos; pos = pos*wsize; if (flags & BLK_FLAG_MULTIPLE) hsize = BLK_DATA_MULTI_OFFSET; else hsize = BLK_DATA_OFFSET; for (:block~=NULL:block=block-->BLK_NEXT) { dsize = BlkSize(block) - hsize; if ((pos >= 0) && (pos0 = val; 2: #Iftrue (WORDSIZE == 2); block-->0 = val; #ifnot; block->0 = (val/256)%256; block->1 = val%256; #endif; 4: block-->0 = val; } return; } pos = pos - dsize; } "*** BlkValueWrite: writing to index out of range: ", op, " in ", ot, " ***"; ]; Constant CREATE_KOVS = 1; Constant CAST_KOVS = 2; Constant DESTROY_KOVS = 3; Constant PRECOPY_KOVS = 4; Constant COPY_KOVS = 5; Constant COMPARE_KOVS = 6; Constant READ_FILE_KOVS = 7; Constant WRITE_FILE_KOVS = 8; Constant HASH_KOVS = 9; Global block_value_tally; [ BlkValueCreate kov cast_from skov block sf; if (skov == 0 && (kov < 0 || kov >= BASE_KIND_HWM)) skov = kov; sf = KOVSupportFunction(kov); if (sf) block = sf(CREATE_KOVS, cast_from, skov); else { print "*** Impossible runtime creation ***^"; rfalse; } #ifdef SHOW_ALLOCATIONS; print "[created ", kov, " at ", block, ": ", block_value_tally++, "]^"; #endif; return block; ]; [ BlkValueCast block tokov fromkov fromval sf; sf = KOVSupportFunction(tokov); if (sf) return sf(CAST_KOVS, fromval, fromkov, block); else { print "*** Impossible runtime cast ***^"; rfalse; } ]; [ BlkValueDestroy block k rv sf; if (block == 0) return; k = block-->BLK_HEADER_KOV; sf = KOVSupportFunction(k); if (sf) return sf(DESTROY_KOVS, block); else { print "*** Impossible runtime deallocation ***^"; rfalse; } ]; [ BlkValueCopy blockto blockfrom dsize i sf; if (blockto == 0) { print "*** Deep copy failed: destination empty ***^"; rfalse; } if (blockfrom == 0) { print "*** Deep copy failed: source empty ***^"; rfalse; } if (blockfrom->BLK_HEADER_N == 0) { ! A hack to handle precompiled array constants: N=0 blocks otherwise don't exist LIST_OF_TY_CopyRawArray(blockto, blockfrom, 1, 0); return blockto; } if (blockfrom-->BLK_HEADER_KOV ~= blockto-->BLK_HEADER_KOV) { print "*** Deep copy failed: types mismatch ***^"; rfalse; } BlkValueDestroy(blockto); dsize = BlkValueExtent(blockfrom); if (((blockfrom->BLK_HEADER_FLAGS) & BLK_FLAG_MULTIPLE) && (BlkValueSetExtent(blockto, dsize, -1) == false)) { print "*** Deep copy failed: resizing failed ***^"; rfalse; } sf = KOVSupportFunction(blockfrom-->BLK_HEADER_KOV); if (sf) sf(PRECOPY_KOVS, blockto, blockfrom); for (i=0:iBLK_HEADER_KOV ~= blockright-->BLK_HEADER_KOV) return blockleft-->BLK_HEADER_KOV - blockright-->BLK_HEADER_KOV; kov = blockleft-->BLK_HEADER_KOV; sf = KOVSupportFunction(kov); if (sf) return sf(COMPARE_KOVS, blockleft, blockright); else { print "*** Impossible runtime comparison ***^"; rfalse; } ]; [ BlkValueInitialCopy blockto blockfrom dsize i; if (blockto == 0) { print "*** Initial copy failed: destination empty ***^"; rfalse; } if (blockfrom == 0) { print "*** Initial copy failed: source empty ***^"; rfalse; } dsize = 1; for (i=1: i<=blockfrom->BLK_HEADER_N: i++) dsize=dsize*2; for (i=0:ii = blockfrom->i; return blockto; ]; [ BlkValueHash block kov sf; if (block == 0) return 0; kov = block-->BLK_HEADER_KOV; sf = KOVSupportFunction(kov); if (sf) return sf(HASH_KOVS, block); else { print "*** Impossible runtime hashing ***^"; rfalse; } ]; [ KOVHashValue kov value; if (KOVIsBlockValue(kov)) return BlkValueHash(value); return value; ]; [ BlkValueReadFromFile block auxf ch kov sf; sf = KOVSupportFunction(kov); if (sf) return sf(READ_FILE_KOVS, block, auxf, ch); rfalse; ]; [ BlkValueWriteToFile block kov sf; sf = KOVSupportFunction(kov); if (sf) return sf(WRITE_FILE_KOVS, block); rfalse; ]; #IFNOT; ! IFDEF MEMORY_HEAP_SIZE [ BlkValueReadFromFile; rfalse; ]; [ BlkValueWriteToFile; rfalse; ]; [ BlkValueCreate x y z; ]; [ BlkValueDestroy x; ]; [ BlkValueCopy x y; ]; [ BlkValueCompare x y; ]; #ENDIF; ! IFDEF MEMORY_HEAP_SIZE #IFDEF MEMORY_HEAP_SIZE; ! Will exist if any use is made of indexed texts #IFDEF TARGET_ZCODE; Constant IT_Storage_Flags = BLK_FLAG_MULTIPLE; Constant ZSCII_Tables; #IFNOT; Constant IT_Storage_Flags = BLK_FLAG_MULTIPLE + BLK_FLAG_16_BIT; Constant Large_Unicode_Tables; #ENDIF; Constant UNIC_NCT = 10000; ! Safe as highest case-change delta is 8383 #IFDEF ZSCII_Tables; Array CharCasingChart0 --> $0061 ( 26) ( -32) $009b ( 3) ( 3) $00a1 ( 1) (UNIC_NCT) $00a4 ( 2) ( 3) $00a6 ( 1) (UNIC_NCT) $00a9 ( 6) ( 6) $00b5 ( 5) ( 5) $00bf ( 5) ( 5) $00c9 ( -3) ( 1) $00cd ( 3) ( 3) $00d3 ( -3) ( 1) $00d7 ( 2) ( 2) $00dc ( 1) ( 1) $0000 ; Array CharCasingChart1 --> $0041 ( 26) ( 32) $009e ( 3) ( -3) $00a7 ( 2) ( -3) $00af ( 6) ( -6) $00ba ( 5) ( -5) $00c4 ( 5) ( -5) $00ca ( -3) ( -1) $00d0 ( 3) ( -3) $00d4 ( -3) ( -1) $00d9 ( 2) ( -2) $00dd ( 1) ( -1) $0000 ; #ENDIF; ! ZSCII_Tables #IFDEF Small_Unicode_Tables; Array CharCasingChart0 --> $0061 ( 26) ( -32) $00aa ( 1) (UNIC_NCT) $00b5 ( 1) (UNIC_NCT) $00ba ( 1) (UNIC_NCT) $00df ( 1) (UNIC_NCT) $00e0 ( 23) ( -32) $00f8 ( 7) ( -32) $00ff ( 1) (UNIC_NCT) $0000 ; Array CharCasingChart1 --> $0041 ( 26) ( 32) $00c0 ( 23) ( 32) $00d8 ( 7) ( 32) $0000 ; #ENDIF; ! Small_Unicode_Tables #IFDEF Large_Unicode_Tables; Array CharCasingChart0 --> $0061 ( 26) ( -32) $00aa ( 1) (UNIC_NCT) $00b5 ( 1) ( 743) $00ba ( 1) (UNIC_NCT) $00df ( 1) (UNIC_NCT) $00e0 ( 23) ( -32) $00f8 ( 7) ( -32) $00ff ( 1) ( 121) $0101 ( -47) ( -1) $0131 ( 1) ( -232) $0133 ( -5) ( -1) $0138 ( 1) (UNIC_NCT) $013a ( -15) ( -1) $0149 ( 1) (UNIC_NCT) $014b ( -45) ( -1) $017a ( -5) ( -1) $017f ( 1) ( -300) $0180 ( 1) (UNIC_NCT) $0183 ( -3) ( -1) $0188 ( 1) ( -1) $018c ( 1) ( -1) $018d ( 1) (UNIC_NCT) $0192 ( 1) ( -1) $0195 ( 1) ( 97) $0199 ( 1) ( -1) $019a ( 2) (UNIC_NCT) $019e ( 1) ( 130) $01a1 ( -5) ( -1) $01a8 ( 1) ( -1) $01aa ( 2) (UNIC_NCT) $01ad ( 1) ( -1) $01b0 ( 1) ( -1) $01b4 ( -3) ( -1) $01b9 ( 1) ( -1) $01ba ( 1) (UNIC_NCT) $01bd ( 1) ( -1) $01be ( 1) (UNIC_NCT) $01bf ( 1) ( 56) $01c6 ( 1) ( -2) $01c9 ( 1) ( -2) $01cc ( 1) ( -2) $01ce ( -15) ( -1) $01dd ( 1) ( -79) $01df ( -17) ( -1) $01f0 ( 1) (UNIC_NCT) $01f3 ( 1) ( -2) $01f5 ( 1) ( -1) $01f9 ( -39) ( -1) $0221 ( 1) (UNIC_NCT) $0223 ( -17) ( -1) $0234 ( 3) (UNIC_NCT) $0250 ( 3) (UNIC_NCT) $0253 ( 1) ( -210) $0254 ( 1) ( -206) $0255 ( 1) (UNIC_NCT) $0256 ( 2) ( -205) $0258 ( 1) (UNIC_NCT) $0259 ( 1) ( -202) $025a ( 1) (UNIC_NCT) $025b ( 1) ( -203) $025c ( 4) (UNIC_NCT) $0260 ( 1) ( -205) $0261 ( 2) (UNIC_NCT) $0263 ( 1) ( -207) $0264 ( 4) (UNIC_NCT) $0268 ( 1) ( -209) $0269 ( 1) ( -211) $026a ( 5) (UNIC_NCT) $026f ( 1) ( -211) $0270 ( 2) (UNIC_NCT) $0272 ( 1) ( -213) $0273 ( 2) (UNIC_NCT) $0275 ( 1) ( -214) $0276 ( 10) (UNIC_NCT) $0280 ( 1) ( -218) $0281 ( 2) (UNIC_NCT) $0283 ( 1) ( -218) $0284 ( 4) (UNIC_NCT) $0288 ( 1) ( -218) $0289 ( 1) (UNIC_NCT) $028a ( 2) ( -217) $028c ( 6) (UNIC_NCT) $0292 ( 1) ( -219) $0293 ( 29) (UNIC_NCT) $0390 ( 1) (UNIC_NCT) $03ac ( 1) ( -38) $03ad ( 3) ( -37) $03b0 ( 1) (UNIC_NCT) $03b1 ( 17) ( -32) $03c2 ( 1) ( -31) $03c3 ( 9) ( -32) $03cc ( 1) ( -64) $03cd ( 2) ( -63) $03d0 ( 1) ( -62) $03d1 ( 1) ( -57) $03d5 ( 1) ( -47) $03d6 ( 1) ( -54) $03d7 ( 1) (UNIC_NCT) $03d9 ( -23) ( -1) $03f0 ( 1) ( -86) $03f1 ( 1) ( -80) $03f2 ( 1) ( 7) $03f3 ( 1) (UNIC_NCT) $03f5 ( 1) ( -96) $03f8 ( 1) ( -1) $03fb ( 1) ( -1) $0430 ( 32) ( -32) $0450 ( 16) ( -80) $0461 ( -33) ( -1) $048b ( -53) ( -1) $04c2 ( -13) ( -1) $04d1 ( -37) ( -1) $04f9 ( 1) ( -1) $0501 ( -15) ( -1) $0561 ( 38) ( -48) $0587 ( 1) (UNIC_NCT) $1d00 ( 44) (UNIC_NCT) $1d62 ( 10) (UNIC_NCT) $1e01 (-149) ( -1) $1e96 ( 5) (UNIC_NCT) $1e9b ( 1) ( -59) $1ea1 ( -89) ( -1) $1f00 ( 8) ( 8) $1f10 ( 6) ( 8) $1f20 ( 8) ( 8) $1f30 ( 8) ( 8) $1f40 ( 6) ( 8) $1f50 ( 1) (UNIC_NCT) $1f51 ( 1) ( 8) $1f52 ( 1) (UNIC_NCT) $1f53 ( 1) ( 8) $1f54 ( 1) (UNIC_NCT) $1f55 ( 1) ( 8) $1f56 ( 1) (UNIC_NCT) $1f57 ( 1) ( 8) $1f60 ( 8) ( 8) $1f70 ( 2) ( 74) $1f72 ( 4) ( 86) $1f76 ( 2) ( 100) $1f78 ( 2) ( 128) $1f7a ( 2) ( 112) $1f7c ( 2) ( 126) $1f80 ( 8) ( 8) $1f90 ( 8) ( 8) $1fa0 ( 8) ( 8) $1fb0 ( 2) ( 8) $1fb2 ( 1) (UNIC_NCT) $1fb3 ( 1) ( 9) $1fb4 ( -3) (UNIC_NCT) $1fb7 ( 1) (UNIC_NCT) $1fbe ( 1) ( -7205) $1fc2 ( 1) (UNIC_NCT) $1fc3 ( 1) ( 9) $1fc4 ( -3) (UNIC_NCT) $1fc7 ( 1) (UNIC_NCT) $1fd0 ( 2) ( 8) $1fd2 ( 2) (UNIC_NCT) $1fd6 ( 2) (UNIC_NCT) $1fe0 ( 2) ( 8) $1fe2 ( 3) (UNIC_NCT) $1fe5 ( 1) ( 7) $1fe6 ( 2) (UNIC_NCT) $1ff2 ( 1) (UNIC_NCT) $1ff3 ( 1) ( 9) $1ff4 ( -3) (UNIC_NCT) $1ff7 ( 1) (UNIC_NCT) $2071 ( 1) (UNIC_NCT) $207f ( 1) (UNIC_NCT) $210a ( 1) (UNIC_NCT) $210e ( 2) (UNIC_NCT) $2113 ( 1) (UNIC_NCT) $212f ( 1) (UNIC_NCT) $2134 ( 1) (UNIC_NCT) $2139 ( 1) (UNIC_NCT) $213d ( 1) (UNIC_NCT) $2146 ( 4) (UNIC_NCT) $fb00 ( 7) (UNIC_NCT) $fb13 ( 5) (UNIC_NCT) $ff41 ( 26) ( -32) $0000 ; Array CharCasingChart1 --> $0041 ( 26) ( 32) $00c0 ( 23) ( 32) $00d8 ( 7) ( 32) $0100 ( -47) ( 1) $0130 ( 1) ( -199) $0132 ( -5) ( 1) $0139 ( -15) ( 1) $014a ( -45) ( 1) $0178 ( 1) ( -121) $0179 ( -5) ( 1) $0181 ( 1) ( 210) $0182 ( -3) ( 1) $0186 ( 1) ( 206) $0187 ( 1) ( 1) $0189 ( 2) ( 205) $018b ( 1) ( 1) $018e ( 1) ( 79) $018f ( 1) ( 202) $0190 ( 1) ( 203) $0191 ( 1) ( 1) $0193 ( 1) ( 205) $0194 ( 1) ( 207) $0196 ( 1) ( 211) $0197 ( 1) ( 209) $0198 ( 1) ( 1) $019c ( 1) ( 211) $019d ( 1) ( 213) $019f ( 1) ( 214) $01a0 ( -5) ( 1) $01a6 ( 1) ( 218) $01a7 ( 1) ( 1) $01a9 ( 1) ( 218) $01ac ( 1) ( 1) $01ae ( 1) ( 218) $01af ( 1) ( 1) $01b1 ( 2) ( 217) $01b3 ( -3) ( 1) $01b7 ( 1) ( 219) $01b8 ( 1) ( 1) $01bc ( 1) ( 1) $01c4 ( 1) ( 2) $01c7 ( 1) ( 2) $01ca ( 1) ( 2) $01cd ( -15) ( 1) $01de ( -17) ( 1) $01f1 ( 1) ( 2) $01f4 ( 1) ( 1) $01f6 ( 1) ( -97) $01f7 ( 1) ( -56) $01f8 ( -39) ( 1) $0220 ( 1) ( -130) $0222 ( -17) ( 1) $0386 ( 1) ( 38) $0388 ( 3) ( 37) $038c ( 1) ( 64) $038e ( 2) ( 63) $0391 ( 17) ( 32) $03a3 ( 9) ( 32) $03d2 ( 3) (UNIC_NCT) $03d8 ( -23) ( 1) $03f4 ( 1) ( -60) $03f7 ( 1) ( 1) $03f9 ( 1) ( -7) $03fa ( 1) ( 1) $0400 ( 16) ( 80) $0410 ( 32) ( 32) $0460 ( -33) ( 1) $048a ( -53) ( 1) $04c0 ( 1) (UNIC_NCT) $04c1 ( -13) ( 1) $04d0 ( -37) ( 1) $04f8 ( 1) ( 1) $0500 ( -15) ( 1) $0531 ( 38) ( 48) $10a0 ( 38) (UNIC_NCT) $1e00 (-149) ( 1) $1ea0 ( -89) ( 1) $1f08 ( 8) ( -8) $1f18 ( 6) ( -8) $1f28 ( 8) ( -8) $1f38 ( 8) ( -8) $1f48 ( 6) ( -8) $1f59 ( -7) ( -8) $1f68 ( 8) ( -8) $1fb8 ( 2) ( -8) $1fba ( 2) ( -74) $1fc8 ( 4) ( -86) $1fd8 ( 2) ( -8) $1fda ( 2) ( -100) $1fe8 ( 2) ( -8) $1fea ( 2) ( -112) $1fec ( 1) ( -7) $1ff8 ( 2) ( -128) $1ffa ( 2) ( -126) $2102 ( 1) (UNIC_NCT) $2107 ( 1) (UNIC_NCT) $210b ( 3) (UNIC_NCT) $2110 ( 3) (UNIC_NCT) $2115 ( 1) (UNIC_NCT) $2119 ( 5) (UNIC_NCT) $2124 ( 1) (UNIC_NCT) $2126 ( 1) ( -7517) $2128 ( 1) (UNIC_NCT) $212a ( 1) ( -8383) $212b ( 1) ( -8262) $212c ( 2) (UNIC_NCT) $2130 ( 2) (UNIC_NCT) $2133 ( 1) (UNIC_NCT) $213e ( 2) (UNIC_NCT) $2145 ( 1) (UNIC_NCT) $ff21 ( 26) ( 32) $0000 ; #ENDIF; ! Large_Unicode_Tables [ CharIsOfCase c case i tab min max len par; if (c<'A') rfalse; if (case == 0) { if ((c >= 'a') && (c <= 'z')) rtrue; tab = CharCasingChart0; } else { if ((c >= 'A') && (c <= 'Z')) rtrue; tab = CharCasingChart1; } if (c<128) rfalse; while (tab-->i) { min = tab-->i; i++; len = tab-->i; i++; i++; par = 0; if (len<0) { par = 1; len = -len; } if (c < min) rfalse; if (c < min+len) { if (par) { if ((c-min) % 2 == 0) rtrue; } else { rtrue; } } } rfalse; ]; [ CharToCase c case i tab min max len par del f; if (c<'A') return c; if (case == 1) { if ((c >= 'a') && (c <= 'z')) return c-32; tab = CharCasingChart0; } else { if ((c >= 'A') && (c <= 'Z')) return c+32; tab = CharCasingChart1; } if (c<128) return c; while (tab-->i) { min = tab-->i; i++; len = tab-->i; i++; del = tab-->i; i++; par = 0; if (len<0) { par = 1; len = -len; } if (c < min) return c; if (c < min+len) { f = false; if (par) { if ((c-min) % 2 == 0) f = true; } else { f = true; } if (f) { if (del == UNIC_NCT) return c; return c+del; } } } return c; ]; #IFDEF TARGET_ZCODE; [ IT_RevCase ch; if (ch<'A') return ch; if ((ch >= 'a') && (ch <= 'z')) return ch-'a'+'A'; if ((ch >= 'A') && (ch <= 'Z')) return ch-'A'+'a'; if (ch<128) return ch; if ((ch >= 155) && (ch <= 157)) return ch+3; ! a, o, u umlaut in ZSCII if ((ch >= 158) && (ch <= 160)) return ch-3; ! A, O, U umlaut if ((ch >= 164) && (ch <= 165)) return ch+3; ! e, i umlaut if ((ch >= 167) && (ch <= 168)) return ch-3; ! E, I umlaut if ((ch >= 169) && (ch <= 174)) return ch+6; ! a, e, i, o, u, y acute if ((ch >= 175) && (ch <= 180)) return ch-6; ! A, E, I, O, U, Y acute if ((ch >= 181) && (ch <= 185)) return ch+5; ! a, e, i, o, u grave if ((ch >= 186) && (ch <= 190)) return ch-5; ! A, E, I, O, U grave if ((ch >= 191) && (ch <= 195)) return ch+5; ! a, e, i, o, u circumflex if ((ch >= 196) && (ch <= 200)) return ch-5; ! A, E, I, O, U circumflex if (ch == 201) return 202; ! a circle if (ch == 202) return 201; ! A circle if (ch == 203) return 204; ! o slash if (ch == 204) return 203; ! O slash if ((ch >= 205) && (ch <= 207)) return ch+3; ! a, n, o tilde if ((ch >= 208) && (ch <= 210)) return ch-3; ! A, N, O tilde if (ch == 211) return 212; ! ae ligature if (ch == 212) return 211; ! AE ligature if (ch == 213) return 214; ! c cedilla if (ch == 214) return 213; ! C cedilla if (ch == 215 or 216) return ch+2; ! thorn, eth if (ch == 217 or 218) return ch-2; ! Thorn, Eth if (ch == 220) return 221; ! oe ligature if (ch == 221) return 220; ! OE ligature return ch; ]; #IFNOT; [ IT_RevCase ch; if (ch<'A') return ch; if ((ch >= 'a') && (ch <= 'z')) return ch-'a'+'A'; if ((ch >= 'A') && (ch <= 'Z')) return ch-'A'+'a'; if (ch<128) return ch; if (CharIsOfCase(ch, 0)) return CharToCase(ch, 1); if (CharIsOfCase(ch, 1)) return CharToCase(ch, 0); return ch; ]; #ENDIF; [ CharTestCases case i j; for (i=32: i<$E0; i++) { if ((i>=127) && (i<155)) continue; print i, " - ", (char) i, " -"; if (CharIsOfCase(i, 0)) print " lower"; if (CharIsOfCase(i, 1)) print " upper"; j = CharToCase(i, 0); if (j ~= i) print " tolower: ", (char) j; j = CharToCase(i, 1); if (j ~= i) print " toupper: ", (char) j; print "^"; } ]; [ INDEXED_TEXT_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: return INDEXED_TEXT_TY_Create(arg1); CAST_KOVS: return INDEXED_TEXT_TY_Cast(arg1, arg2, arg3); DESTROY_KOVS: rfalse; PRECOPY_KOVS: rfalse; COPY_KOVS: rfalse; COMPARE_KOVS: return INDEXED_TEXT_TY_Compare(arg1, arg2); READ_FILE_KOVS: if (arg3 == -1) rtrue; return INDEXED_TEXT_TY_ReadFile(arg1, arg2, arg3); WRITE_FILE_KOVS: return INDEXED_TEXT_TY_WriteFile(arg1); HASH_KOVS: return INDEXED_TEXT_TY_Hash(arg1); } ]; [ INDEXED_TEXT_TY_Create opcast x; x = BlkAllocate(32, INDEXED_TEXT_TY, IT_Storage_Flags); if (opcast) INDEXED_TEXT_TY_Cast(opcast, TEXT_TY, x); return x; ]; #ifndef IT_MemoryBufferSize; Constant IT_MemoryBufferSize = 512; #endif; Constant IT_Memory_NoBuffers = 2; #ifndef IT_Memory_NoBuffers; Constant IT_Memory_NoBuffers = 1; #endif; #ifdef TARGET_ZCODE; Array IT_MemoryBuffer -> IT_MemoryBufferSize*IT_Memory_NoBuffers; ! Where characters are bytes #ifnot; Array IT_MemoryBuffer --> (IT_MemoryBufferSize+2)*IT_Memory_NoBuffers; ! Where characters are words #endif; Global RawBufferAddress = IT_MemoryBuffer; Global RawBufferSize = IT_MemoryBufferSize; Global IT_cast_nesting; [ INDEXED_TEXT_TY_Cast tx fromkov indt len i str oldstr offs realloc news buff buffx freebuff results; #ifdef TARGET_ZCODE; buffx = IT_MemoryBufferSize; #ifnot; buffx = (IT_MemoryBufferSize + 2)*WORDSIZE; #endif; buff = RawBufferAddress + IT_cast_nesting*buffx; IT_cast_nesting++; if (IT_cast_nesting > IT_Memory_NoBuffers) { buff = VM_AllocateMemory(buffx); freebuff = buff; if (buff == 0) { BlkAllocationError("ran out with too many simultaneous indexed text conversions"); return; } } .RetryWithLargerBuffer; if (tx == 0) { #ifdef TARGET_ZCODE; buff-->0 = 1; buff->2 = 0; #ifnot; buff-->0 = 0; #endif; len = 1; } else { #ifdef TARGET_ZCODE; @output_stream 3 buff; #ifnot; if (unicode_gestalt_ok == false) { RunTimeProblem(RTP_NOGLULXUNICODE); jump Failed; } oldstr = glk_stream_get_current(); str = glk_stream_open_memory_uni(buff, RawBufferSize, filemode_Write, 0); glk_stream_set_current(str); #endif; @push say__p; @push say__pc; ClearParagraphing(); if (fromkov == SNIPPET_TY) print (PrintSnippet) tx; else { if (tx ofclass String) print (string) tx; if (tx ofclass Routine) (tx)(); } @pull say__pc; @pull say__p; #ifdef TARGET_ZCODE; @output_stream -3; len = buff-->0; if (len > RawBufferSize-1) len = RawBufferSize-1; offs = 2; buff->(len+2) = 0; #ifnot; ! i.e. GLULX results = buff + buffx - 2*WORDSIZE; glk_stream_close(str, results); if (oldstr) glk_stream_set_current(oldstr); len = results-->1; if (len > RawBufferSize-1) { ! Glulx had to truncate text output because the buffer ran out: ! len is the number of characters which it tried to print news = RawBufferSize; while (news < len) news=news*2; news = news*4; ! Bytes rather than words i = VM_AllocateMemory(news); if (i ~= 0) { if (freebuff) VM_FreeMemory(freebuff); freebuff = i; buff = i; RawBufferSize = news/4; jump RetryWithLargerBuffer; } ! Memory allocation refused: all we can do is to truncate the text len = RawBufferSize-1; } offs = 0; buff-->(len) = 0; #endif; len++; } IT_cast_nesting--; if (indt == 0) { indt = BlkAllocate(len+1, INDEXED_TEXT_TY, IT_Storage_Flags); if (indt == 0) jump Failed; } else { if (BlkValueSetExtent(indt, len+1, 1) == false) { indt = 0; jump Failed; } } #ifdef TARGET_ZCODE; for (i=0:i<=len:i++) BlkValueWrite(indt, i, buff->(i+offs)); #ifnot; for (i=0:i<=len:i++) BlkValueWrite(indt, i, buff-->(i+offs)); #endif; .Failed; if (freebuff) VM_FreeMemory(freebuff); return indt; ]; [ INDEXED_TEXT_TY_Compare indtleft indtright pos ch1 ch2 dsizeleft dsizeright; dsizeleft = BlkValueExtent(indtleft); dsizeright = BlkValueExtent(indtright); for (pos=0:(pos= tsize) { if (BlkValueSetExtent(indt, 2*pos, 20) == false) break; tsize = BlkValueExtent(indt); } BlkValueWrite(indt, pos++, v); v = 0; if (ch == ';') break; } else { dg = ch - '0'; v = v*10 + dg; } } BlkValueWrite(indt, pos, 0); return indt; ]; [ INDEXED_TEXT_TY_ROGPR indt pos len wa wl wpos bdm ch own; if (indt == 0) return GPR_FAIL; bdm = true; own = wn; len = BlkValueExtent(indt); for (pos=0: pos<=len: pos++) { if (pos == len) ch = 0; else ch = BlkValueRead(indt, pos); if (ch == 32 or 9 or 10 or 0) { if (bdm) continue; bdm = true; if (wpos ~= wl) return GPR_FAIL; if (ch == 0) break; } else { if (bdm) { bdm = false; if (NextWordStopped() == -1) return GPR_FAIL; wa = WordAddress(wn-1); wl = WordLength(wn-1); wpos = 0; } if (wa->wpos ~= ch or IT_RevCase(ch)) return GPR_FAIL; wpos++; } } if (wn == own) return GPR_FAIL; ! Progress must be made to avoid looping return GPR_PREPOSITION; ]; Constant CHR_BLOB = 1; ! Construe as an array of characters Constant WORD_BLOB = 2; ! Of words Constant PWORD_BLOB = 3; ! Of punctuated words Constant UWORD_BLOB = 4; ! Of unpunctuated words Constant PARA_BLOB = 5; ! Of paragraphs Constant LINE_BLOB = 6; ! Of lines Constant REGEXP_BLOB = 7; ! Not a blob type as such, but needed as a distinct value Constant WS_BRM = 1; Constant SKIPPED_BRM = 2; Constant ACCEPTED_BRM = 3; Constant ACCEPTEDP_BRM = 4; Constant ACCEPTEDN_BRM = 5; Constant ACCEPTEDPN_BRM = 6; [ IT_BlobAccess indt blobtype cindt wanted rindt brm oldbrm ch i dsize csize blobcount gp cl j; if ((indt==0) || (BlkType(indt) ~= INDEXED_TEXT_TY)) return 0; if (blobtype == CHR_BLOB) return IT_CharacterLength(indt); dsize = BlkValueExtent(indt); if (cindt) csize = BlkValueExtent(cindt); else if (rindt) "*** rindt without cindt ***"; brm = WS_BRM; for (i=0:i= 2) brm = WS_BRM; LINE_BLOB: if (gp >= 1) brm = WS_BRM; default: brm = WS_BRM; } } } else { gp = false; if ((blobtype == WORD_BLOB or PWORD_BLOB or UWORD_BLOB) && (ch == '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}')) gp = true; switch (oldbrm) { WS_BRM: brm = ACCEPTED_BRM; if (blobtype == WORD_BLOB) { if (gp) brm = SKIPPED_BRM; } if (blobtype == PWORD_BLOB) { if (gp) brm = ACCEPTEDP_BRM; } SKIPPED_BRM: if (blobtype == WORD_BLOB) { if (gp == false) brm = ACCEPTED_BRM; } ACCEPTED_BRM: if (blobtype == WORD_BLOB) { if (gp) brm = SKIPPED_BRM; } if (blobtype == PWORD_BLOB) { if (gp) brm = ACCEPTEDP_BRM; } ACCEPTEDP_BRM: if (blobtype == PWORD_BLOB) { if (gp == false) brm = ACCEPTED_BRM; else { if ((ch == BlkValueRead(indt, i-1)) && (ch == '-' or '.')) blobcount--; blobcount++; } } ACCEPTEDN_BRM: if (blobtype == WORD_BLOB) { if (gp) brm = SKIPPED_BRM; } if (blobtype == PWORD_BLOB) { if (gp) brm = ACCEPTEDP_BRM; } ACCEPTEDPN_BRM: if (blobtype == PWORD_BLOB) { if (gp == false) brm = ACCEPTED_BRM; else { if ((ch == BlkValueRead(indt, i-1)) && (ch == '-' or '.')) blobcount--; blobcount++; } } } } if (brm == ACCEPTED_BRM or ACCEPTEDP_BRM) { if (oldbrm ~= brm) blobcount++; if ((cindt) && (blobcount == wanted)) { if (rindt) { BlkValueWrite(cindt, cl, 0); IT_Concatenate(cindt, rindt, CHR_BLOB); csize = BlkValueExtent(cindt); cl = IT_CharacterLength(cindt); if (brm == ACCEPTED_BRM) brm = ACCEPTEDN_BRM; if (brm == ACCEPTEDP_BRM) brm = ACCEPTEDPN_BRM; } else { if (cl+1 >= csize) { if (BlkValueSetExtent(cindt, 2*cl, 2) == false) break; csize = BlkValueExtent(cindt); } BlkValueWrite(cindt, cl++, ch); } } else { if (rindt) { if (cl+1 >= csize) { if (BlkValueSetExtent(cindt, 2*cl, 3) == false) break; csize = BlkValueExtent(cindt); } BlkValueWrite(cindt, cl++, ch); } } } else { if ((rindt) && (brm ~= ACCEPTEDN_BRM or ACCEPTEDPN_BRM)) { if (cl+1 >= csize) { if (BlkValueSetExtent(cindt, 2*cl, 4) == false) break; csize = BlkValueExtent(cindt); } BlkValueWrite(cindt, cl++, ch); } } } if (cindt) BlkValueWrite(cindt, cl++, 0); return blobcount; ]; [ IT_GetBlob cindt indt wanted blobtype; if ((indt==0) || (BlkType(indt) ~= INDEXED_TEXT_TY)) return; if (blobtype == CHR_BLOB) return IT_GetCharacter(cindt, indt, wanted); IT_BlobAccess(indt, blobtype, cindt, wanted); return cindt; ]; [ IT_ReplaceBlob blobtype indt wanted rindt cindt ilen rlen i; if (blobtype == CHR_BLOB) { ilen = IT_CharacterLength(indt); rlen = IT_CharacterLength(rindt); wanted--; if ((wanted >= 0) && (wanted= csize) { if (BlkValueSetExtent(cindt, 2*cl, 9) == false) break; csize = BlkValueExtent(cindt); } BlkValueWrite(cindt, cl++, ch); } BlkValueCopy(indt, cindt); BlkFree(cindt); ]; [ IT_CharacterLength indt ch i dsize; if ((indt==0) || (BlkType(indt) ~= INDEXED_TEXT_TY)) return 0; dsize = BlkValueExtent(indt); for (i=0:iIT_CharacterLength(indt))) ch = 0; else ch = BlkValueRead(indt, i-1); BlkValueWrite(cindt, 0, ch); BlkValueWrite(cindt, 1, 0); return cindt; ]; [ IT_CharactersOfCase indt case i ch len; if ((indt==0) || (BlkType(indt) ~= INDEXED_TEXT_TY)) rfalse; len = IT_CharacterLength(indt); for (i=0:i 118) len = 118; #ifdef TARGET_ZCODE; buffer->1 = len; at = 2; #ifnot; buffer-->0 = len; at = 4; #endif; for (i=0:i(i+at) = CharToCase(BlkValueRead(indt_from, i), 0); for (:at+i<120:i++) buffer->(at+i) = ' '; VM_Tokenise(buffer, parse); players_command = 100 + WordCount(); ! The snippet variable ``player's command'' ]; #IFNOT; ! IFDEF MEMORY_HEAP_SIZE [ INDEXED_TEXT_TY_Support t a b c; rfalse; ]; [ INDEXED_TEXT_TY_Say indt; ]; [ SetPlayersCommand indt_from; ]; [ INDEXED_TEXT_TY_Create; ]; [ INDEXED_TEXT_TY_Cast a b c; ]; [ INDEXED_TEXT_TY_Empty t; rfalse; ]; #ENDIF; ! IFDEF MEMORY_HEAP_SIZE #IFDEF MEMORY_HEAP_SIZE; ! Will exist if any use is made of indexed texts Global IT_RE_Trace = false; ! Change to true for (a lot of) debugging data in use [ IT_RE_SetTrace F; IT_RE_Trace = F; ]; ! Character classes Constant NEWLINE_RE_CC = -1; Constant TAB_RE_CC = -2; Constant DIGIT_RE_CC = -3; Constant NONDIGIT_RE_CC = -4; Constant WHITESPACE_RE_CC = -5; Constant NONWHITESPACE_RE_CC = -6; Constant PUNCTUATION_RE_CC = -7; Constant NONPUNCTUATION_RE_CC = -8; Constant WORD_RE_CC = -9; Constant NONWORD_RE_CC = -10; Constant ANYTHING_RE_CC = -11; Constant NOTHING_RE_CC = -12; Constant RANGE_RE_CC = -13; Constant LCASE_RE_CC = -14; Constant NONLCASE_RE_CC = -15; Constant UCASE_RE_CC = -16; Constant NONUCASE_RE_CC = -17; ! Control structures Constant SUBEXP_RE_CC = -20; Constant DISJUNCTION_RE_CC = -21; Constant CHOICE_RE_CC = -22; Constant QUANTIFIER_RE_CC = -23; Constant IF_RE_CC = -24; Constant CONDITION_RE_CC = -25; Constant THEN_RE_CC = -26; Constant ELSE_RE_CC = -27; ! Substring matchers Constant VARIABLE_RE_CC = -30; Constant LITERAL_RE_CC = -31; ! Positional matchers Constant START_RE_CC = -40; Constant END_RE_CC = -41; Constant BOUNDARY_RE_CC = -42; Constant NONBOUNDARY_RE_CC = -43; Constant ALWAYS_RE_CC = -44; Constant NEVER_RE_CC = -45; ! Mode switches Constant SENSITIVITY_RE_CC = -50; Constant RE_MAX_PACKETS = 32; Constant RE_PACKET_SIZE = 14; ! Words of memory used per packet Constant RE_PACKET_SIZE_IN_BYTES = WORDSIZE*RE_PACKET_SIZE; ! Bytes used per packet Array RE_PACKET_space --> RE_MAX_PACKETS*RE_PACKET_SIZE; Constant RE_CCLASS = 0; ! One of the class codes defined above Constant RE_PAR1 = 1; ! Three parameters whose meaning depends on class code Constant RE_PAR2 = 2; Constant RE_PAR3 = 3; Constant RE_NEXT = 4; ! Younger sibling in the compiled tree Constant RE_PREVIOUS = 5; ! Elder sibling Constant RE_DOWN = 6; ! Child Constant RE_UP = 7; ! Parent Constant RE_DATA1 = 8; ! Backtracking data Constant RE_DATA2 = 9; Constant RE_CONSTRAINT = 10; Constant RE_CACHE1 = 11; Constant RE_CACHE2 = 12; Constant RE_MODES = 13; [ IT_RE_Node n cc par1 par2 par3 offset; if ((n<0) || (n >= RE_MAX_PACKETS)) rfalse; offset = RE_PACKET_space + n*RE_PACKET_SIZE_IN_BYTES; offset-->RE_CCLASS = cc; offset-->RE_PAR1 = par1; offset-->RE_PAR2 = par2; offset-->RE_PAR3 = par3; offset-->RE_NEXT = NULL; offset-->RE_PREVIOUS = NULL; offset-->RE_DOWN = NULL; offset-->RE_UP = NULL; offset-->RE_DATA1 = -1; ! Match start offset-->RE_DATA2 = -1; ! Match end offset-->RE_CONSTRAINT = -1; ! Rewind edge return offset; ]; [ IT_RE_NodeAddress n; if ((n<0) || (n >= RE_MAX_PACKETS)) return -1; return RE_PACKET_space + n*RE_PACKET_SIZE_IN_BYTES; ]; Array RE_Subexpressions --> 11; ! Address of node for this subexpression Array Allocated_Match_Vars --> 10; ! Indexed text to hold values of the variables [ IT_RE_DebugMatchVars indt offset n i; print RE_Subexpressions-->10, " collecting subexps^"; for (n=0:(n10) && (n<10): n++) { offset = RE_Subexpressions-->n; print "Subexp ", offset-->RE_PAR1, " = [", offset-->RE_DATA1, ",", offset-->RE_DATA2, "] = "; for (i=offset-->RE_DATA1:iRE_DATA2:i++) print (char) BlkValueRead(indt, i); print "^"; } ]; [ IT_RE_CreateMatchVars indt offset n i ch cindt cl csize; for (n=0:(n10) && (n<10): n++) { offset = RE_Subexpressions-->n; if (Allocated_Match_Vars-->n == 0) Allocated_Match_Vars-->n = INDEXED_TEXT_TY_Create(); ! Permanently cindt = Allocated_Match_Vars-->n; csize = BlkValueExtent(cindt); cl = 0; for (i=offset-->RE_DATA1:iRE_DATA2:i++) { ch = BlkValueRead(indt, i); if (cl+1 >= csize) { if (BlkValueSetExtent(cindt, 2*cl, 6) == false) break; csize = BlkValueExtent(cindt); } BlkValueWrite(cindt, cl++, ch); } BlkValueWrite(cindt, cl, 0); } ]; [ IT_RE_EmptyMatchVars indt n; for (n=0:(n10) && (n<10): n++) if (Allocated_Match_Vars-->n ~= 0) BlkValueWrite(Allocated_Match_Vars-->n, 0, 0); ]; [ IT_RE_GetMatchVar indt vn offset; if ((vn<0) || (vn>=10) || (vn >= RE_Subexpressions-->10)) jump Nope; offset = RE_Subexpressions-->vn; if (offset == 0) jump Nope; if (offset-->RE_DATA1 < 0) jump Nope; if (Allocated_Match_Vars-->vn == 0) { print "*** ", vn, " unallocated! ***^"; jump Nope; } BlkValueCopy(indt, Allocated_Match_Vars-->vn); return indt; .Nope; BlkValueWrite(indt, 0, 0); return indt; ]; [ IT_MV_End n end offset; offset = RE_Subexpressions-->n; if (end==0) return offset-->RE_DATA1; return offset-->RE_DATA2; ]; [ IT_RE_Clear_Markers token; for (: token ~= NULL: token = token-->RE_NEXT) { if (token-->RE_DOWN ~= NULL) IT_RE_Clear_Markers(token-->RE_DOWN); token-->RE_DATA1 = -1; token-->RE_DATA2 = -1; token-->RE_CONSTRAINT = -1; } ]; [ IT_RE_DebugTree findt detail; print "Pattern: ", (INDEXED_TEXT_TY_Say) findt, "^"; IT_RE_DebugSubtree(findt, 1, RE_PACKET_space, detail); ]; [ IT_RE_DebugSubtree findt depth offset detail cup; if (offset ~= NULL) { cup = offset-->RE_UP; if (offset-->RE_PREVIOUS ~= NULL) print "*** broken initial previous ***^"; } while (offset ~= NULL) { if (offset-->RE_UP ~= cup) print "*** broken up matching ***^"; spaces(depth*2); IT_RE_DebugNode(offset, findt, detail); if (offset-->RE_DOWN ~= NULL) { if ((offset-->RE_DOWN)-->RE_UP ~= offset) print "*** broken down/up ***^"; IT_RE_DebugSubtree(findt, depth+1, offset-->RE_DOWN, detail); } if (offset-->RE_NEXT ~= NULL) { if ((offset-->RE_NEXT)-->RE_PREVIOUS ~= offset) print "*** broken next/previous ***^"; } offset = offset-->RE_NEXT; } ]; [ IT_RE_DebugNode offset findt detail i par1 par2 par3; if (offset == NULL) "[NULL]"; print "[", (offset-RE_PACKET_space)/(RE_PACKET_SIZE_IN_BYTES), "] "; ! for (i=0:ii, " "; par1 = offset-->RE_PAR1; par2 = offset-->RE_PAR2; par3 = offset-->RE_PAR3; switch (offset-->RE_CCLASS) { DIGIT_RE_CC: print "DIGIT"; NONDIGIT_RE_CC: print "NONDIGIT"; UCASE_RE_CC: print "UCASE"; NONUCASE_RE_CC: print "NONUCASE"; LCASE_RE_CC: print "LCASE"; NONLCASE_RE_CC: print "NONLCASE"; WHITESPACE_RE_CC: print "WHITESPACE"; NONWHITESPACE_RE_CC: print "NONWHITESPACE"; PUNCTUATION_RE_CC: print "PUNCTUATION"; NONPUNCTUATION_RE_CC: print "NONPUNCTUATION"; WORD_RE_CC: print "WORD"; NONWORD_RE_CC: print "NONWORD"; ALWAYS_RE_CC: print "ALWAYS"; NEVER_RE_CC: print "NEVER"; START_RE_CC: print "START"; END_RE_CC: print "END"; BOUNDARY_RE_CC: print "BOUNDARY"; NONBOUNDARY_RE_CC: print "NONBOUNDARY"; ANYTHING_RE_CC: print "ANYTHING"; NOTHING_RE_CC: print "NOTHING"; RANGE_RE_CC: print "RANGE"; if (par3 == true) print " (negated)"; print " "; for (i=par1:i= 0) print "= V", par1; if (par2 == 1) { if (par3 == 0) print " (?=...) lookahead"; else print " (?<=...) lookbehind of width ", par3; } if (par2 == 2) { if (par3 == 0) print " (?!...) negated lookahead"; else print " (?...) possessive"; NEWLINE_RE_CC: print "NEWLINE"; TAB_RE_CC: print "TAB"; QUANTIFIER_RE_CC: print "QUANTIFIER min=", par1, " max=", par2; if (par3) print " (lazy)"; else print " (greedy)"; LITERAL_RE_CC: print "LITERAL"; print " "; for (i=par1:i= 1) print " = V", par1; CONDITION_RE_CC: print "CONDITION"; if (par1 >= 1) print " = V", par1; THEN_RE_CC: print "THEN"; ELSE_RE_CC: print "ELSE"; } if (detail) print ": ", offset-->RE_DATA1, ", ", offset-->RE_DATA2, ", ", offset-->RE_CONSTRAINT; print "^"; ]; [ IT_CHR_CompileTree findt exactly root literal fto no_packets token attach_to; fto = IT_CharacterLength(findt); root = IT_RE_Node(0, SUBEXP_RE_CC, 0, 0, 0); literal = IT_RE_Node(1, LITERAL_RE_CC, 0, fto, 0); root-->RE_DOWN = literal; literal-->RE_UP = root; if (exactly) { no_packets = 2; if (no_packets+3 > RE_MAX_PACKETS) return "regexp too complex"; exactly = RE_PACKET_space-->RE_DOWN; token = IT_RE_Node(no_packets++, START_RE_CC, 0, 0, 0); RE_PACKET_space-->RE_DOWN = token; token-->RE_UP = RE_PACKET_space; attach_to = IT_RE_Node(no_packets++, SUBEXP_RE_CC, -1, 3, 0); token-->RE_NEXT = attach_to; attach_to-->RE_PREVIOUS = token; attach_to-->RE_UP = RE_PACKET_space; attach_to-->RE_NEXT = IT_RE_Node(no_packets++, END_RE_CC, 0, 0, 0); (attach_to-->RE_NEXT)-->RE_PREVIOUS = attach_to; (attach_to-->RE_NEXT)-->RE_UP = RE_PACKET_space; attach_to-->RE_DOWN = exactly; while (exactly ~= NULL) { exactly-->RE_UP = attach_to; exactly = exactly-->RE_NEXT; } } no_packets = IT_RE_ExpandChoices(RE_PACKET_space, no_packets); ]; Array Subexp_Posns --> 20; [ IT_RE_CompileTree findt exactly no_packets ffrom fto cc par1 par2 par3 quantifiable token attach_to no_subs blevel bits; fto = IT_CharacterLength(findt); if (fto == 0) { IT_RE_Node(no_packets++, NEVER_RE_CC, 0, 0, 0); ! Empty regexp never matches return 1; } attach_to = IT_RE_Node(no_packets++, SUBEXP_RE_CC, 0, 0, 0); RE_Subexpressions-->0 = attach_to; RE_Subexpressions-->10 = 1; no_subs = 1; quantifiable = false; blevel = 0; for (ffrom = 0: ffrom < fto: ) { cc = BlkValueRead(findt, ffrom++); par1 = 0; par2 = 0; par3 = 0; if (cc == '\') { if (ffrom == fto) return "Search pattern not terminated"; cc = BlkValueRead(findt, ffrom++); switch (cc) { 'b': cc = BOUNDARY_RE_CC; 'B': cc = NONBOUNDARY_RE_CC; 'd': cc = DIGIT_RE_CC; 'D': cc = NONDIGIT_RE_CC; 'l': cc = LCASE_RE_CC; 'L': cc = NONLCASE_RE_CC; 'n': cc = NEWLINE_RE_CC; 'p': cc = PUNCTUATION_RE_CC; 'P': cc = NONPUNCTUATION_RE_CC; 's': cc = WHITESPACE_RE_CC; 'S': cc = NONWHITESPACE_RE_CC; 't': cc = TAB_RE_CC; 'u': cc = UCASE_RE_CC; 'U': cc = NONUCASE_RE_CC; 'w': cc = WORD_RE_CC; 'W': cc = NONWORD_RE_CC; default: if ((cc >= '1') && (cc <= '9')) { par1 = cc-'0'; cc = VARIABLE_RE_CC; } else { if (((cc >= 'a') && (cc <= 'z')) || ((cc >= 'A') && (cc <= 'Z'))) return "unknown escape"; cc = LITERAL_RE_CC; par1 = ffrom-1; par2 = ffrom; } } quantifiable = true; } else { switch (cc) { '(': par2 = 0; !if (BlkValueRead(findt, ffrom) == ')') return "empty subexpression"; if (BlkValueRead(findt, ffrom) == '?') { ffrom++; bits = true; if (BlkValueRead(findt, ffrom) == '-') { ffrom++; bits = false; } else if (BlkValueRead(findt, ffrom) == '<') { ffrom++; bits = false; } switch (cc = BlkValueRead(findt, ffrom++)) { '#': while (BlkValueRead(findt, ffrom++) ~= 0 or ')') ; if (BlkValueRead(findt, ffrom-1) == 0) return "comment never ends"; continue; '(': cc = BlkValueRead(findt, ffrom); if ((cc == '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9') && (BlkValueRead(findt, ffrom+1) ==')')) { ffrom = ffrom + 2; par1 = cc - '0'; } else ffrom--; cc = IF_RE_CC; ! (?(...)...) conditional quantifiable = false; if (blevel == 20) return "subexpressions too deep"; Subexp_Posns-->(blevel++) = IT_RE_NodeAddress(no_packets); jump CClassKnown; '=': par2 = 1; ! (?=...) lookahead/behind par3 = 0; if (bits == false) par3 = -1; '!': par2 = 2; ! (?!...) negated lookahead/behind par3 = 0; if (bits == false) par3 = -1; ':': par2 = 3; ! (?:...) uncollecting subexpression '>': par2 = 4; ! (?>...) possessive default: if (BlkValueRead(findt, ffrom) == ')') { if (cc == 'i') { cc = SENSITIVITY_RE_CC; par1 = bits; ffrom++; jump CClassKnown; } } if (BlkValueRead(findt, ffrom) == ':') { if (cc == 'i') { par1 = bits; par2 = 3; par3 = bits+1; ffrom++; jump AllowForm; } } return "unknown (?...) form"; } } .AllowForm; if (par2 == 0) par1 = no_subs++; else par1 = -1; cc = SUBEXP_RE_CC; quantifiable = false; if (blevel == 20) return "subexpressions too deep"; Subexp_Posns-->(blevel++) = IT_RE_NodeAddress(no_packets); ')': if (blevel == 0) return "subexpression bracket mismatch"; blevel--; attach_to = Subexp_Posns-->blevel; if (attach_to-->RE_DOWN == NULL) { if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; attach_to-->RE_DOWN = IT_RE_Node(no_packets++, ALWAYS_RE_CC, 0, 0, 0); (attach_to-->RE_DOWN)-->RE_UP = attach_to; } quantifiable = true; continue; '.': cc = ANYTHING_RE_CC; quantifiable = true; '|': cc = CHOICE_RE_CC; quantifiable = false; '^': cc = START_RE_CC; quantifiable = false; '$': cc = END_RE_CC; quantifiable = false; '{': if (quantifiable == false) return "quantifier misplaced"; par1 = 0; par2 = -1; bits = 1; while ((cc=BlkValueRead(findt, ffrom++)) ~= 0 or '}') { if (cc == ',') { bits++; if (bits >= 3) return "too many colons in ?{...}"; continue; } if ((cc >= '0') || (cc <= '9')) { if (bits == 1) { if (par1 < 0) par1 = 0; par1 = par1*10 + (cc-'0'); } else { if (par2 < 0) par2 = 0; par2 = par2*10 + (cc-'0'); } } else return "non-digit in ?{...}"; } if (cc ~= '}') return "{x,y} quantifier never ends"; cc = QUANTIFIER_RE_CC; if (par2 == -1) { if (bits == 2) par2 = 30000; else par2 = par1; } if (par1 > par2) return "{x,y} with x greater than y"; if (BlkValueRead(findt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; '<', '[': par3 = false; if (cc == '<') bits = '>'; else bits = ']'; if (BlkValueRead(findt, ffrom) == '^') { ffrom++; par3 = true; } par1 = ffrom; if (BlkValueRead(findt, ffrom) == bits) { ffrom++; } while (cc ~= bits or 0) { cc = BlkValueRead(findt, ffrom++); if (cc == '\') { cc = BlkValueRead(findt, ffrom++); if (cc ~= 0) cc = BlkValueRead(findt, ffrom++); } } if (cc == 0) return "Character range never ends"; par2 = ffrom-1; if ((par2 > par1 + 1) && (BlkValueRead(findt, par1) == ':') && (BlkValueRead(findt, par2-1) == ':') && (BlkValueRead(findt, par2-2) ~= '\')) return "POSIX named character classes unsupported"; bits = IT_RE_RangeSyntaxCorrect(findt, par1, par2); if (bits) return bits; if (par1 < par2) cc = RANGE_RE_CC; else cc = NOTHING_RE_CC; quantifiable = true; '*': if (quantifiable == false) return "quantifier misplaced"; cc = QUANTIFIER_RE_CC; par1 = 0; par2 = 30000; if (BlkValueRead(findt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; '+': if (quantifiable == false) return "quantifier misplaced"; cc = QUANTIFIER_RE_CC; par1 = 1; par2 = 30000; if (BlkValueRead(findt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; '?': if (quantifiable == false) return "quantifier misplaced"; cc = QUANTIFIER_RE_CC; par1 = 0; par2 = 1; if (BlkValueRead(findt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; } } .CClassKnown; if (cc >= 0) { quantifiable = true; if ((attach_to-->RE_CCLASS == LITERAL_RE_CC) && (BlkValueRead(findt, ffrom) ~= '*' or '+' or '?' or '{')) { (attach_to-->RE_PAR2)++; if (IT_RE_Trace == 2) { print "Extending literal by ", cc, "=", (char) cc, "^"; } continue; } cc = LITERAL_RE_CC; par1 = ffrom-1; par2 = ffrom; } if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; if (IT_RE_Trace == 2) { print "Attaching packet ", no_packets+1, " to "; IT_RE_DebugNode(attach_to, findt); IT_RE_DebugTree(findt); } token = IT_RE_Node(no_packets++, cc, par1, par2, par3); if ((token-->RE_CCLASS == SUBEXP_RE_CC) && (token-->RE_PAR2 == 0)) { RE_Subexpressions-->(token-->RE_PAR1) = token; (RE_Subexpressions-->10)++; } if ((attach_to-->RE_CCLASS == SUBEXP_RE_CC or CHOICE_RE_CC or IF_RE_CC) && (attach_to-->RE_DOWN == NULL)) { attach_to-->RE_DOWN = token; token-->RE_UP = attach_to; } else { if ((token-->RE_CCLASS == CHOICE_RE_CC) && ((attach_to-->RE_UP)-->RE_CCLASS == CHOICE_RE_CC)) { no_packets--; token = attach_to-->RE_UP; } else { if (token-->RE_CCLASS == CHOICE_RE_CC) { while (attach_to-->RE_PREVIOUS ~= NULL) attach_to = attach_to-->RE_PREVIOUS; } if (token-->RE_CCLASS == QUANTIFIER_RE_CC or CHOICE_RE_CC) { token-->RE_PREVIOUS = attach_to-->RE_PREVIOUS; token-->RE_UP = attach_to-->RE_UP; if ((attach_to-->RE_UP ~= NULL) && (attach_to-->RE_PREVIOUS == NULL)) (attach_to-->RE_UP)-->RE_DOWN = token; token-->RE_DOWN = attach_to; bits = attach_to; while (bits ~= NULL) { bits-->RE_UP = token; bits = bits-->RE_NEXT; } attach_to-->RE_PREVIOUS = NULL; if (token-->RE_PREVIOUS ~= NULL) (token-->RE_PREVIOUS)-->RE_NEXT = token; } else { attach_to-->RE_NEXT = token; token-->RE_PREVIOUS = attach_to; token-->RE_UP = attach_to-->RE_UP; } } } if (token-->RE_CCLASS == CHOICE_RE_CC) { if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; token-->RE_NEXT = IT_RE_Node(no_packets++, CHOICE_RE_CC, 0, 0, 0); (token-->RE_NEXT)-->RE_PREVIOUS = token; (token-->RE_NEXT)-->RE_UP = token-->RE_UP; token = token-->RE_NEXT; } attach_to = token; if (IT_RE_Trace == 2) { print "Result:^"; IT_RE_DebugTree(findt); } } if (blevel ~= 0) return "subexpression bracket mismatch"; if (exactly) { if (no_packets+3 > RE_MAX_PACKETS) return "regexp too complex"; exactly = RE_PACKET_space-->RE_DOWN; token = IT_RE_Node(no_packets++, START_RE_CC, 0, 0, 0); RE_PACKET_space-->RE_DOWN = token; token-->RE_UP = RE_PACKET_space; attach_to = IT_RE_Node(no_packets++, SUBEXP_RE_CC, -1, 3, 0); token-->RE_NEXT = attach_to; attach_to-->RE_PREVIOUS = token; attach_to-->RE_UP = RE_PACKET_space; attach_to-->RE_NEXT = IT_RE_Node(no_packets++, END_RE_CC, 0, 0, 0); (attach_to-->RE_NEXT)-->RE_PREVIOUS = attach_to; (attach_to-->RE_NEXT)-->RE_UP = RE_PACKET_space; attach_to-->RE_DOWN = exactly; while (exactly ~= NULL) { exactly-->RE_UP = attach_to; exactly = exactly-->RE_NEXT; } } no_packets = IT_RE_ExpandChoices(RE_PACKET_space, no_packets); if (IT_RE_Trace) { print "Compiled pattern:^"; IT_RE_DebugTree(findt); } bits = IT_RE_CheckTree(RE_PACKET_space, no_subs); if (bits) return bits; return no_packets; ]; [ IT_RE_RangeSyntaxCorrect findt rf rt i chm; for (i=rf: i= 'a') && (chm <= 'z')) || ((chm >= 'A') && (chm <= 'Z'))) { if (chm ~= 's' or 'S' or 'p' or 'P' or 'w' or 'W' or 'd' or 'D' or 'n' or 't' or 'l' or 'L' or 'u' or 'U') return "Invalid escape in {} range"; } } if ((i+2 BlkValueRead(findt, i+2)) return "Invalid {} range"; i=i+2; } } rfalse; ]; [ IT_RE_ExpandChoices token no_packets rv prev nex holder new ct n cond_node then_node else_node; while (token ~= NULL) { if (token-->RE_CCLASS == IF_RE_CC) { if ((token-->RE_DOWN)-->RE_CCLASS == CHOICE_RE_CC) { for (nex=token-->RE_DOWN, n=0: nex~=NULL: nex=nex-->RE_NEXT) n++; if (n~=2) return "conditional has too many clauses"; if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; cond_node = IT_RE_Node(no_packets++, CONDITION_RE_CC, 0, 0, 0); if (token-->RE_PAR1 >= 1) { cond_node-->RE_PAR1 = token-->RE_PAR1; } then_node = token-->RE_DOWN; then_node-->RE_CCLASS = THEN_RE_CC; else_node = then_node-->RE_NEXT; else_node-->RE_CCLASS = ELSE_RE_CC; if (cond_node-->RE_PAR1 < 1) { cond_node-->RE_DOWN = then_node-->RE_DOWN; then_node-->RE_DOWN = (then_node-->RE_DOWN)-->RE_NEXT; if (then_node-->RE_DOWN ~= NULL) (then_node-->RE_DOWN)-->RE_PREVIOUS = NULL; (cond_node-->RE_DOWN)-->RE_NEXT = NULL; (cond_node-->RE_DOWN)-->RE_UP = cond_node; } token-->RE_DOWN = cond_node; cond_node-->RE_UP = token; cond_node-->RE_NEXT = then_node; then_node-->RE_PREVIOUS = cond_node; } else { if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; cond_node = IT_RE_Node(no_packets++, CONDITION_RE_CC, 0, 0, 0); if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; then_node = IT_RE_Node(no_packets++, THEN_RE_CC, 0, 0, 0); if (token-->RE_PAR1 >= 1) { cond_node-->RE_PAR1 = token-->RE_PAR1; then_node-->RE_DOWN = token-->RE_DOWN; } else { cond_node-->RE_DOWN = token-->RE_DOWN; then_node-->RE_DOWN = (token-->RE_DOWN)-->RE_NEXT; (cond_node-->RE_DOWN)-->RE_NEXT = NULL; (cond_node-->RE_DOWN)-->RE_UP = cond_node; } token-->RE_DOWN = cond_node; cond_node-->RE_UP = token; cond_node-->RE_NEXT = then_node; then_node-->RE_PREVIOUS = cond_node; then_node-->RE_UP = token; then_node-->RE_NEXT = NULL; if (then_node-->RE_DOWN ~= NULL) (then_node-->RE_DOWN)-->RE_PREVIOUS = NULL; for (nex = then_node-->RE_DOWN: nex ~= NULL: nex = nex-->RE_NEXT) { nex-->RE_UP = then_node; } } if (cond_node-->RE_DOWN ~= NULL) { nex = cond_node-->RE_DOWN; if ((nex-->RE_CCLASS ~= SUBEXP_RE_CC) || (nex-->RE_NEXT ~= NULL) || (nex-->RE_PAR2 ~= 1 or 2)) { !IT_RE_DebugSubtree(0, 0, nex, true); return "condition not lookahead/behind"; } } } if ((token-->RE_CCLASS == CHOICE_RE_CC) && (token-->RE_PAR1 < 1)) { prev = token-->RE_PREVIOUS; nex = token-->RE_NEXT; while ((nex ~= NULL) && (nex-->RE_CCLASS == CHOICE_RE_CC)) nex = nex-->RE_NEXT; holder = token-->RE_UP; if (holder == NULL) return "bang"; if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; new = IT_RE_Node(no_packets++, DISJUNCTION_RE_CC, 0, 0, 0); holder-->RE_DOWN = new; new-->RE_UP = holder; if (prev ~= NULL) { prev-->RE_NEXT = new; new-->RE_PREVIOUS = prev; } if (nex ~= NULL) { nex-->RE_PREVIOUS = new; new-->RE_NEXT = nex; } new-->RE_DOWN = token; token-->RE_PREVIOUS = NULL; ct = 1; while (token ~= NULL) { token-->RE_PAR1 = ct++; token-->RE_UP = new; if ((token-->RE_NEXT ~= NULL) && ((token-->RE_NEXT)-->RE_CCLASS ~= CHOICE_RE_CC)) token-->RE_NEXT = NULL; token = token-->RE_NEXT; } new-->RE_PAR1 = ct-1; if (token ~= NULL) token-->RE_NEXT = NULL; token = new; continue; } if (token-->RE_DOWN ~= NULL) { no_packets = IT_RE_ExpandChoices(token-->RE_DOWN, no_packets); if ((no_packets<0) || (no_packets >= RE_MAX_PACKETS)) break; } token = token-->RE_NEXT; } return no_packets; ]; [ IT_RE_CheckTree token no_subs rv; while (token ~= NULL) { if (token-->RE_CCLASS == VARIABLE_RE_CC) { if (token-->RE_PAR1 >= no_subs) return "reference to nonexistent group"; } if ((token-->RE_CCLASS == SUBEXP_RE_CC) && (token-->RE_PAR2 == 1 or 2) && (token-->RE_PAR3 == -1)) { token-->RE_PAR3 = IT_RE_Width(token-->RE_DOWN); if (token-->RE_PAR3 == -1) return "variable length lookbehind not implemented"; } if (token-->RE_DOWN ~= NULL) { rv = IT_RE_CheckTree(token-->RE_DOWN, no_subs); if (rv) return rv; } token = token-->RE_NEXT; } rfalse; ]; [ IT_RE_Width token downwards w rv aw choice; while (token ~= NULL) { switch (token-->RE_CCLASS) { DIGIT_RE_CC, NONDIGIT_RE_CC, WHITESPACE_RE_CC, NONWHITESPACE_RE_CC, PUNCTUATION_RE_CC, NONPUNCTUATION_RE_CC, WORD_RE_CC, NONWORD_RE_CC, ANYTHING_RE_CC, NOTHING_RE_CC, RANGE_RE_CC, NEWLINE_RE_CC, TAB_RE_CC, UCASE_RE_CC, NONUCASE_RE_CC, LCASE_RE_CC, NONLCASE_RE_CC: w++; START_RE_CC, END_RE_CC, BOUNDARY_RE_CC, NONBOUNDARY_RE_CC, ALWAYS_RE_CC: ; LITERAL_RE_CC: w = w + token-->RE_PAR2 - token-->RE_PAR1; VARIABLE_RE_CC: return -1; IF_RE_CC: rv = IT_RE_Width((token-->RE_DOWN)-->RE_NEXT); if (rv == -1) return -1; if (rv ~= IT_RE_Width(((token-->RE_DOWN)-->RE_NEXT)-->RE_NEXT)) return -1; w = w + rv; SUBEXP_RE_CC: if (token-->RE_PAR2 == 1 or 2) rv = 0; else { rv = IT_RE_Width(token-->RE_DOWN); if (rv == -1) return -1; } w = w + rv; QUANTIFIER_RE_CC: if (token-->RE_PAR1 ~= token-->RE_PAR2) return -1; rv = IT_RE_Width(token-->RE_DOWN); if (rv == -1) return -1; w = w + rv*(token-->RE_PAR1); DISJUNCTION_RE_CC: aw = -1; for (choice = token-->RE_DOWN: choice ~= NULL: choice = choice-->RE_NEXT) { rv = IT_RE_Width(choice-->RE_DOWN); !print "Option found ", rv, "^"; if (rv == -1) return -1; if ((aw >= 0) && (aw ~= rv)) return -1; aw = rv; } w = w + aw; SENSITIVITY_RE_CC: ; } if (downwards) return w; if (token ~= NULL) token = token-->RE_NEXT; } return w; ]; Global IT_RE_RewindCount; [ IT_RE_PrintNoRewinds; print IT_RE_RewindCount; ]; Constant CIS_MFLAG = 1; Constant ACCUM_MFLAG = 2; [ IT_RE_Parse findt indt ipos insens ilen rv root i initial_mode; ilen = IT_CharacterLength(indt); if ((ipos<0) || (ipos>ilen)) return -1; root = RE_PACKET_space; initial_mode = 0; if (insens) initial_mode = CIS_MFLAG; IT_RE_Clear_Markers(RE_PACKET_space); for (:ipos<=ilen:ipos++) { if ((RE_PACKET_space-->RE_DOWN ~= NULL) && ((RE_PACKET_space-->RE_DOWN)-->RE_CCLASS == START_RE_CC) && (ipos>0)) { rv = -1; break; } if (ipos > 0) IT_RE_EraseConstraints(RE_PACKET_space, initial_mode); IT_RE_RewindCount = 0; rv = IT_RE_ParseAtPosition(findt, indt, ipos, ilen, RE_PACKET_space, initial_mode); if (rv >= 0) break; } if (rv == -1) { root-->RE_DATA1 = -1; root-->RE_DATA2 = -1; } else { root-->RE_DATA1 = ipos; root-->RE_DATA2 = ipos+rv; } return rv; ]; [ IT_RE_ParseAtPosition findt indt ifrom ito token mode_flags outcome ipos npos rv i ch edge rewind_this; if (ifrom > ito) return -1; ipos = ifrom; .Rewind; while (token ~= NULL) { outcome = false; if (IT_RE_Trace) { print "Matching at ", ipos, ": "; IT_RE_DebugNode(token, findt, true); } if (iposRE_MODES = mode_flags; ! Save in case of backtrack switch (token-->RE_CCLASS) { ! Should never happen CHOICE_RE_CC: return "internal error"; ! Mode switches SENSITIVITY_RE_CC: if (token-->RE_PAR1) mode_flags = mode_flags | CIS_MFLAG; else mode_flags = mode_flags & (~CIS_MFLAG); outcome = true; ! Zero-length positional markers ALWAYS_RE_CC: outcome = true; NEVER_RE_CC: START_RE_CC: if (ipos == 0) outcome = true; END_RE_CC: if (BlkValueRead(indt, ipos) == 0) outcome = true; BOUNDARY_RE_CC: rv = 0; if (BlkValueRead(indt, ipos) == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (ipos == 0) ch = 0; else ch = BlkValueRead(indt, ipos-1); if (ch == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (rv == 1) outcome = true; NONBOUNDARY_RE_CC: rv = 0; if (BlkValueRead(indt, ipos) == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (ipos == 0) ch = 0; else ch = BlkValueRead(indt, ipos-1); if (ch == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (rv ~= 1) outcome = true; ! Control constructs IF_RE_CC: i = token-->RE_PAR1; ch = false; if (IT_RE_Trace) { print "Trying conditional from ", ipos, ": "; IT_RE_DebugNode(token, findt, true); } if (i >= 1) { if ((i10) && ((RE_Subexpressions-->i)-->RE_DATA1 >= 0)) ch = true; } else { rv = IT_RE_ParseAtPosition(findt, indt, ipos, ito, (token-->RE_DOWN)-->RE_DOWN, mode_flags); if (rv >= 0) ch = true; } if (IT_RE_Trace) { print "Condition found to be ", ch, "^"; } if (ch) { rv = IT_RE_ParseAtPosition(findt, indt, ipos, ito, ((token-->RE_DOWN)-->RE_NEXT)-->RE_DOWN, mode_flags); !print "Then clause returned ", rv, "^"; } else { if ((((token-->RE_DOWN)-->RE_NEXT)-->RE_NEXT) == NULL) rv = 0; ! The empty else clause matches else rv = IT_RE_ParseAtPosition(findt, indt, ipos, ito, (((token-->RE_DOWN)-->RE_NEXT)-->RE_NEXT)-->RE_DOWN, mode_flags); !print "Else clause returned ", rv, "^"; } if (rv >= 0) { outcome = true; ipos = ipos + rv; } DISJUNCTION_RE_CC: if (IT_RE_Trace) { print "Trying disjunction from ", ipos, ": "; IT_RE_DebugNode(token, findt, true); } for (ch = token-->RE_DOWN: ch ~= NULL: ch = ch-->RE_NEXT) { if (ch-->RE_PAR1 <= token-->RE_CONSTRAINT) continue; if (IT_RE_Trace) { print "Trying choice at ", ipos, ": "; IT_RE_DebugNode(ch, findt, true); } rv = IT_RE_ParseAtPosition(findt, indt, ipos, ito, ch-->RE_DOWN, mode_flags); if (rv >= 0) { token-->RE_DATA1 = ipos; ! Where match was made token-->RE_DATA2 = ch-->RE_PAR1; ! Option taken ipos = ipos + rv; outcome = true; if (IT_RE_Trace) { print "Choice worked with width ", rv, ": "; IT_RE_DebugNode(ch, findt, true); } break; } else { if (mode_flags & ACCUM_MFLAG == false) IT_RE_FailSubexpressions(ch-->RE_DOWN); } } if (outcome == false) { if (IT_RE_Trace) { print "Failed disjunction from ", ipos, ": "; IT_RE_DebugNode(token, findt, true); } token-->RE_DATA1 = ipos; ! Where match was tried token-->RE_DATA2 = -1; ! No option was taken } SUBEXP_RE_CC: if (token-->RE_PAR2 == 1 or 2) { npos = ipos - token-->RE_PAR3; if (npos<0) rv = -1; ! Lookbehind fails: nothing behind else rv = IT_RE_ParseAtPosition(findt, indt, npos, ito, token-->RE_DOWN, mode_flags); } else { switch (token-->RE_PAR3) { 0: rv = IT_RE_ParseAtPosition(findt, indt, ipos, ito, token-->RE_DOWN, mode_flags); 1: rv = IT_RE_ParseAtPosition(findt, indt, ipos, ito, token-->RE_DOWN, mode_flags & (~CIS_MFLAG)); 2: rv = IT_RE_ParseAtPosition(findt, indt, ipos, ito, token-->RE_DOWN, mode_flags | CIS_MFLAG); } } npos = ipos; if (rv >= 0) npos = ipos + rv; switch (token-->RE_PAR2) { 1: if (rv >= 0) rv = 0; 2: if (rv >= 0) rv = -1; else rv = 0; } if (rv >= 0) { token-->RE_DATA1 = ipos; ipos = ipos + rv; token-->RE_DATA2 = npos; outcome = true; } else { if (mode_flags & ACCUM_MFLAG == false) { token-->RE_DATA1 = -1; token-->RE_DATA2 = -1; } } if (token-->RE_PAR2 == 2) IT_RE_FailSubexpressions(token, true); QUANTIFIER_RE_CC: token-->RE_DATA1 = ipos; if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_CACHE1 = -1; (token-->RE_DOWN)-->RE_CACHE2 = -1; } if (IT_RE_Trace) { print "Trying quantifier from ", ipos, ": "; IT_RE_DebugNode(token, findt, true); } if (token-->RE_PAR3 == false) { ! Greedy quantifier !edge = ito; if (token-->RE_CONSTRAINT >= 0) edge = token-->RE_CONSTRAINT; edge = token-->RE_PAR2; if (token-->RE_CONSTRAINT >= 0) edge = token-->RE_CONSTRAINT; rv = -1; for (i=0, npos=ipos: iRE_DOWN, mode_flags | ACCUM_MFLAG); if (rv < 0) break; if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_CACHE1 = (token-->RE_DOWN)-->RE_DATA1; (token-->RE_DOWN)-->RE_CACHE2 = (token-->RE_DOWN)-->RE_DATA2; } if ((rv == 0) && (token-->RE_PAR2 == 30000) && (i>=1)) { i++; break; } npos = npos + rv; } if ((i >= token-->RE_PAR1) && (i <= token-->RE_PAR2)) outcome = true; } else { ! Lazy quantifier edge = token-->RE_PAR1; if (token-->RE_CONSTRAINT > edge) edge = token-->RE_CONSTRAINT; for (i=0, npos=ipos: (nposRE_PAR2): i++) { if (i >= edge) break; if (IT_RE_Trace) { print "Trying quant rep ", i+1, " at ", npos, ": "; IT_RE_DebugNode(token, findt, true); } rv = IT_RE_ParseAtPosition(findt, indt, npos, ito, token-->RE_DOWN, mode_flags | ACCUM_MFLAG); if (rv < 0) break; if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_CACHE1 = (token-->RE_DOWN)-->RE_DATA1; (token-->RE_DOWN)-->RE_CACHE2 = (token-->RE_DOWN)-->RE_DATA2; } if ((rv == 0) && (token-->RE_PAR2 == 30000) && (i>=1)) { i++; break; } npos = npos + rv; } if ((i >= edge) && (i <= token-->RE_PAR2)) outcome = true; } if (outcome) { if (token-->RE_PAR3 == false) { ! Greedy quantifier if (i > token-->RE_PAR1) { ! I.e., if we have been greedy token-->RE_DATA2 = i-1; ! And its edge limitation } else { token-->RE_DATA2 = -1; } } else { ! Lazy quantifier if (i < token-->RE_PAR2) { ! I.e., if we have been lazy token-->RE_DATA2 = i+1; ! And its edge limitation } else { token-->RE_DATA2 = -1; } } ipos = npos; if ((i == 0) && (mode_flags & ACCUM_MFLAG == false)) IT_RE_FailSubexpressions(token-->RE_DOWN); if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_DATA1 = (token-->RE_DOWN)-->RE_CACHE1; (token-->RE_DOWN)-->RE_DATA2 = (token-->RE_DOWN)-->RE_CACHE2; } if (IT_RE_Trace) { print "Successful quant reps ", i, ": "; IT_RE_DebugNode(token, findt, true); } } else { !token-->RE_DATA2 = -1; if (mode_flags & ACCUM_MFLAG == false) IT_RE_FailSubexpressions(token-->RE_DOWN); if (IT_RE_Trace) { print "Failed quant reps ", i, ": "; IT_RE_DebugNode(token, findt, true); } } ! Character classes NOTHING_RE_CC: ; ANYTHING_RE_CC: if (ch) outcome = true; ipos++; WHITESPACE_RE_CC: if (ch == 10 or 13 or 32 or 9) { outcome = true; ipos++; } NONWHITESPACE_RE_CC: if ((ch) && (ch ~= 10 or 13 or 32 or 9)) { outcome = true; ipos++; } PUNCTUATION_RE_CC: if (ch == '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') { outcome = true; ipos++; } NONPUNCTUATION_RE_CC: if ((ch) && (ch ~= '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}')) { outcome = true; ipos++; } WORD_RE_CC: if ((ch) && (ch ~= 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}')) { outcome = true; ipos++; } NONWORD_RE_CC: if (ch == 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') { outcome = true; ipos++; } DIGIT_RE_CC: if (ch == '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9') { outcome = true; ipos++; } NONDIGIT_RE_CC: if ((ch) && (ch ~= '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9')) { outcome = true; ipos++; } LCASE_RE_CC: if (CharIsOfCase(ch, 0)) { outcome = true; ipos++; } NONLCASE_RE_CC: if ((ch) && (CharIsOfCase(ch, 0) == false)) { outcome = true; ipos++; } UCASE_RE_CC: if (CharIsOfCase(ch, 1)) { outcome = true; ipos++; } NONUCASE_RE_CC: if ((ch) && (CharIsOfCase(ch, 1) == false)) { outcome = true; ipos++; } NEWLINE_RE_CC: if (ch == 10) { outcome = true; ipos++; } TAB_RE_CC: if (ch == 9) { outcome = true; ipos++; } RANGE_RE_CC: if (IT_RE_Range(ch, findt, token-->RE_PAR1, token-->RE_PAR2, token-->RE_PAR3, mode_flags & CIS_MFLAG)) { outcome = true; ipos++; } ! Substring matches LITERAL_RE_CC: rv = IT_RE_MatchSubstring(indt, ipos, findt, token-->RE_PAR1, token-->RE_PAR2, mode_flags & CIS_MFLAG); if (rv >= 0) { ipos = ipos + rv; outcome = true; } VARIABLE_RE_CC: i = token-->RE_PAR1; if ((RE_Subexpressions-->i)-->RE_DATA1 >= 0) { rv = IT_RE_MatchSubstring(indt, ipos, indt, (RE_Subexpressions-->i)-->RE_DATA1, (RE_Subexpressions-->i)-->RE_DATA2, mode_flags & CIS_MFLAG); if (rv >= 0) { ipos = ipos + rv; outcome = true; } } .NeverMatchIncompleteVar; } if (outcome == false) { if (IT_RE_RewindCount++ >= 10000) { if (IT_RE_RewindCount == 10001) { style bold; print "OVERFLOW^"; style roman; } return -1; } if (IT_RE_Trace) { print "Rewind sought from failure at pos ", ipos, " with: "; IT_RE_DebugNode(token, findt, true); } if ((token-->RE_CCLASS == QUANTIFIER_RE_CC) && (IT_RE_SeekBacktrack(token-->RE_DOWN, findt, false, ito, false))) jump RewindFound; if (mode_flags & ACCUM_MFLAG == false) IT_RE_FailSubexpressions(token); token = token-->RE_PREVIOUS; while (token ~= NULL) { if (IT_RE_SeekBacktrack(token, findt, true, ito, false)) { .RewindFound; ipos = token-->RE_DATA1; mode_flags = token-->RE_MODES; if (mode_flags & ACCUM_MFLAG == false) IT_RE_FailSubexpressions(token, true); if (ipos == -1) IT_RE_DebugTree(findt, true); if (IT_RE_Trace) { print "^[", ifrom, ",", ito, "] rewinding to ", ipos, " at "; IT_RE_DebugNode(token, findt, true); } jump Rewind; } token = token-->RE_PREVIOUS; } if (IT_RE_Trace) print "^Rewind impossible^"; return -1; } token = token-->RE_NEXT; } return ipos - ifrom; ]; [ IT_RE_SeekBacktrack token findt downwards ito report_only untried; for (: token ~= NULL: token = token-->RE_NEXT) { if ((IT_RE_Trace) && (report_only == false)) { print "Scan for rewind: "; IT_RE_DebugNode(token, findt, true); } if ((token-->RE_CCLASS == SUBEXP_RE_CC) && (token-->RE_PAR2 == 1 or 2 or 4)) { if (downwards) rfalse; continue; } if (token-->RE_DOWN ~= NULL) { if ((IT_RE_Trace) && (report_only == false)) print "Descend^"; if (IT_RE_SeekBacktrack(token-->RE_DOWN, findt, false, ito, report_only)) rtrue; } untried = false; switch (token-->RE_CCLASS) { DISJUNCTION_RE_CC: if ((token-->RE_DATA2 >= 1) && (token-->RE_DATA2 < token-->RE_PAR1) && (token-->RE_CONSTRAINT < token-->RE_PAR1)) { ! Matched but earlier than last if (report_only) rtrue; if (token-->RE_CONSTRAINT == -1) token-->RE_CONSTRAINT = 1; else (token-->RE_CONSTRAINT)++; untried = true; } QUANTIFIER_RE_CC: if (token-->RE_CONSTRAINT ~= -2) { if ((IT_RE_Trace) && (report_only == false)) { print "Quant with cons not -2: "; IT_RE_DebugNode(token, findt, true); } if (token-->RE_DATA2 >= 0) { if (report_only) rtrue; token-->RE_CONSTRAINT = token-->RE_DATA2; untried = true; } } } if (untried) { if (IT_RE_Trace) { print "Grounds for rewind at: "; IT_RE_DebugNode(token, findt, true); } IT_RE_EraseConstraints(token-->RE_NEXT); IT_RE_EraseConstraints(token-->RE_DOWN); rtrue; } if (downwards) rfalse; } rfalse; ]; [ IT_RE_FailSubexpressions token downwards; for (: token ~= NULL: token = token-->RE_NEXT) { if (token-->RE_DOWN ~= NULL) IT_RE_FailSubexpressions(token-->RE_DOWN); if (token-->RE_CCLASS == SUBEXP_RE_CC) { token-->RE_DATA1 = -1; token-->RE_DATA2 = -1; } if (downwards) break; } ]; [ IT_RE_EraseConstraints token; while (token ~= NULL) { switch (token-->RE_CCLASS) { DISJUNCTION_RE_CC: token-->RE_CONSTRAINT = -1; QUANTIFIER_RE_CC: token-->RE_CONSTRAINT = -1; } if (token-->RE_DOWN) IT_RE_EraseConstraints(token-->RE_DOWN); token = token-->RE_NEXT; } ]; [ IT_RE_MatchSubstring indt ipos mindt mfrom mto insens i ch; if (mfrom < 0) return 0; if (insens) for (i=mfrom:i= chm) && (ch <= upper)) rtrue; if (insens) { crev = IT_RevCase(ch); if ((crev >= chm) && (crev <= upper)) rtrue; } i=i+2; } else { if (chm == ch) rtrue; if ((insens) && (chm == IT_RevCase(ch))) rtrue; } } rfalse; ]; [ IT_Replace_RE findtype indt findt rindt insens exactly cindt csize ilen i cl mpos cpos ch chm; ilen = IT_CharacterLength(indt); IT_RE_Err = 0; switch (findtype) { REGEXP_BLOB: i = IT_RE_CompileTree(findt, exactly); CHR_BLOB: i = IT_CHR_CompileTree(findt, exactly); default: "*** bad findtype ***"; } if ((i<0) || (i>RE_MAX_PACKETS)) { IT_RE_Err = i; print "*** Regular expression error: ", (string) IT_RE_Err, " ***^"; RunTimeProblem(RTP_REGEXPSYNTAXERROR); return 0; } if (IT_RE_Trace) { IT_RE_DebugTree(findt); print "(compiled to ", i, " packets)^"; } if (findtype == REGEXP_BLOB) IT_RE_EmptyMatchVars(); mpos = 0; chm = 0; cpos = 0; while (IT_RE_Parse(findt, indt, mpos, insens) >= 0) { chm++; if (IT_RE_Trace) { print "^*** Match ", chm, " found (", RE_PACKET_space-->RE_DATA1, ",", RE_PACKET_space-->RE_DATA2, "): "; if (RE_PACKET_space-->RE_DATA1 == RE_PACKET_space-->RE_DATA2) { print ""; } for (i=RE_PACKET_space-->RE_DATA1:iRE_DATA2:i++) { print (char) BlkValueRead(indt, i); } print " ***^"; } if (rindt == 0) break; ! Accept only one match, replace nothing if (rindt ~= 0 or 1) { if (chm == 1) { cindt = BlkValueCreate(INDEXED_TEXT_TY); csize = BlkValueExtent(cindt); } for (i=cpos:iRE_DATA1:i++) { ch = BlkValueRead(indt, i); if (cl+1 >= csize) { if (BlkValueSetExtent(cindt, 2*cl, 7) == false) break; csize = BlkValueExtent(cindt); } BlkValueWrite(cindt, cl++, ch); } BlkValueWrite(cindt, cl, 0); IT_Concatenate(cindt, rindt, findtype, indt); csize = BlkValueExtent(cindt); cl = IT_CharacterLength(cindt); } mpos = RE_PACKET_space-->RE_DATA2; cpos = mpos; if (RE_PACKET_space-->RE_DATA1 == RE_PACKET_space-->RE_DATA2) mpos++; if (IT_RE_Trace) { if (chm == 100) { ! Purely to keep the output from being excessive print "(Stopping after 100 matches.)^"; break; } } } if (chm > 0) { if (rindt ~= 0 or 1) { for (i=cpos:i= csize) { if (BlkValueSetExtent(cindt, 2*cl, 8) == false) break; csize = BlkValueExtent(cindt); } BlkValueWrite(cindt, cl++, ch); } } if (findtype == REGEXP_BLOB) { IT_RE_CreateMatchVars(indt); if (IT_RE_Trace) IT_RE_DebugMatchVars(indt); } if (rindt ~= 0 or 1) { BlkValueWrite(cindt, cl, 0); BlkValueCopy(indt, cindt); BlkFree(cindt); } } return chm; ]; [ IT_RE_Concatenate indt_to indt_from blobtype indt_ref pos len ch i tosize x y case; if ((indt_to==0) || (BlkType(indt_to) ~= INDEXED_TEXT_TY)) rfalse; if ((indt_from==0) || (BlkType(indt_from) ~= INDEXED_TEXT_TY)) return indt_to; pos = IT_CharacterLength(indt_to); tosize = BlkValueExtent(indt_to); len = IT_CharacterLength(indt_from); for (i=0:i= 0) ch = BlkValueRead(indt_from, ++i); if ((ch >= '0') && (ch <= '9')) { ch = ch - '0'; if (ch < RE_Subexpressions-->10) { x = (RE_Subexpressions-->ch)-->RE_DATA1; y = (RE_Subexpressions-->ch)-->RE_DATA2; if (x >= 0) { for (:x= tosize) { if (BlkValueSetExtent(indt_to, 2*tosize, 11) == false) break; tosize = BlkValueExtent(indt_to); } if (case >= 0) BlkValueWrite(indt_to, pos++, CharToCase(ch, case)); else BlkValueWrite(indt_to, pos++, ch); } } } continue; } } if (pos+1 >= tosize) { if (BlkValueSetExtent(indt_to, 2*tosize, 12) == false) break; tosize = BlkValueExtent(indt_to); } BlkValueWrite(indt_to, pos++, ch); } BlkValueWrite(indt_to, pos, 0); return indt_to; ]; #ENDIF; ! IFDEF MEMORY_HEAP_SIZE #IFDEF MEMORY_HEAP_SIZE; ! Will exist if any use is made of indexed texts [ STORED_ACTION_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: return STORED_ACTION_TY_Create(); CAST_KOVS: rfalse; DESTROY_KOVS: return STORED_ACTION_TY_Destroy(arg1); PRECOPY_KOVS: rfalse; COPY_KOVS: return STORED_ACTION_TY_Copy(arg1, arg2); COMPARE_KOVS: return STORED_ACTION_TY_Compare(arg1, arg2); READ_FILE_KOVS: rfalse; WRITE_FILE_KOVS: rfalse; HASH_KOVS: return STORED_ACTION_TY_Hash(arg1); } ]; [ STORED_ACTION_TY_Create stora; stora = BlkAllocate(6*WORDSIZE, STORED_ACTION_TY, BLK_FLAG_WORD); BlkValueWrite(stora, 0, ##Wait); ! action BlkValueWrite(stora, 1, 0); ! noun BlkValueWrite(stora, 2, 0); ! second BlkValueWrite(stora, 3, player); ! actor BlkValueWrite(stora, 4, false); ! whether a request BlkValueWrite(stora, 5, 0); ! indexed text of command if necessary, 0 if not return stora; ]; [ STORED_ACTION_TY_New a n s ac req stora; if (stora == 0) stora = STORED_ACTION_TY_Create(); BlkValueWrite(stora, 0, a); BlkValueWrite(stora, 1, n); BlkValueWrite(stora, 2, s); BlkValueWrite(stora, 3, ac); BlkValueWrite(stora, 4, req); BlkValueWrite(stora, 5, 0); return stora; ]; [ STORED_ACTION_TY_Destroy stora toc; toc = BlkValueRead(stora, 5); if (toc) BlkFree(toc); ]; [ STORED_ACTION_TY_Copy storato storafrom tocfrom tocto; tocfrom = BlkValueRead(storafrom, 5); if (tocfrom == 0) return; tocto = INDEXED_TEXT_TY_Support(CREATE_KOVS); BlkValueCopy(tocto, tocfrom); BlkValueWrite(storato, 5, tocto); ]; [ STORED_ACTION_TY_Compare storaleft storaright delta itleft itright; delta = BlkValueRead(storaleft, 0) - BlkValueRead(storaright, 0); if (delta) return delta; delta = BlkValueRead(storaleft, 1) - BlkValueRead(storaright, 1); if (delta) return delta; delta = BlkValueRead(storaleft, 2) - BlkValueRead(storaright, 2); if (delta) return delta; delta = BlkValueRead(storaleft, 3) - BlkValueRead(storaright, 3); if (delta) return delta; delta = BlkValueRead(storaleft, 4) - BlkValueRead(storaright, 4); if (delta) return delta; itleft = BlkValueRead(storaleft, 5); itright = BlkValueRead(storaright, 5); if ((itleft ~= 0) && (itright ~= 0)) return INDEXED_TEXT_TY_Support(COMPARE_KOVS, itleft, itright); return itleft - itright; ]; [ STORED_ACTION_TY_Distinguish stora1 stora2; if (STORED_ACTION_TY_Compare(stora1, stora2) == 0) rfalse; rtrue; ]; [ STORED_ACTION_TY_Hash stora rv it; rv = BlkValueRead(stora, 0); rv = rv * 33 + BlkValueRead(stora, 1); rv = rv * 33 + BlkValueRead(stora, 2); rv = rv * 33 + BlkValueRead(stora, 3); rv = rv * 33 + BlkValueRead(stora, 4); it = BlkValueRead(stora, 5); if (it ~= 0) rv = rv * 33 + INDEXED_TEXT_TY_Support(HASH_KOVS, it); return rv; ]; [ STORED_ACTION_TY_Say stora text_of_command saved_command saved_pn saved_action K1 K2 at; if ((stora==0) || (BlkType(stora) ~= STORED_ACTION_TY)) return; text_of_command = BlkValueRead(stora, 5); if (text_of_command) { saved_command = INDEXED_TEXT_TY_Support(CREATE_KOVS); INDEXED_TEXT_TY_Support(CAST_KOVS, players_command, SNIPPET_TY, saved_command); SetPlayersCommand(text_of_command); } saved_pn = parsed_number; saved_action = action; action = BlkValueRead(stora, 0); at = FindAction(-1); K1 = ActionData-->(at+AD_NOUN_KOV); K2 = ActionData-->(at+AD_SECOND_KOV); if (K1 ~= OBJECT_TY) { parsed_number = BlkValueRead(stora, 1); if ((K1 == UNDERSTANDING_TY) && (text_of_command == 0)) { if (saved_command == 0) saved_command = INDEXED_TEXT_TY_Create(); INDEXED_TEXT_TY_Cast(players_command, SNIPPET_TY, saved_command); text_of_command = INDEXED_TEXT_TY_Create(); INDEXED_TEXT_TY_Cast(parsed_number, TEXT_TY, text_of_command); SetPlayersCommand(text_of_command); parsed_number = players_command; } } if (K2 ~= OBJECT_TY) { parsed_number = BlkValueRead(stora, 2); if ((K2 == UNDERSTANDING_TY) && (text_of_command == 0)) { if (saved_command == 0) saved_command = INDEXED_TEXT_TY_Create(); INDEXED_TEXT_TY_Cast(players_command, SNIPPET_TY, saved_command); text_of_command = INDEXED_TEXT_TY_Create(); INDEXED_TEXT_TY_Cast(parsed_number, TEXT_TY, text_of_command); SetPlayersCommand(text_of_command); parsed_number = players_command; } } DB_Action(BlkValueRead(stora, 3), BlkValueRead(stora, 4), BlkValueRead(stora, 0), BlkValueRead(stora, 1), BlkValueRead(stora, 2), true); parsed_number = saved_pn; action = saved_action; if (text_of_command) { SetPlayersCommand(saved_command); BlkFree(saved_command); } ]; [ STORED_ACTION_TY_Involves stora item at; at = FindAction(BlkValueRead(stora, 0)); if (at) { if ((ActionData-->(at+AD_NOUN_KOV) == OBJECT_TY) && (BlkValueRead(stora, 1) == item)) rtrue; if ((ActionData-->(at+AD_SECOND_KOV) == OBJECT_TY) && (BlkValueRead(stora, 2) == item)) rtrue; } if (BlkValueRead(stora, 3) == item) rtrue; rfalse; ]; [ STORED_ACTION_TY_Part stora ind at ado; if (ind == 1 or 2) { if (ind == 1) ado = AD_NOUN_KOV; else ado = AD_SECOND_KOV; at = FindAction(BlkValueRead(stora, 0)); if ((at) && (ActionData-->(at+ado) == OBJECT_TY)) return BlkValueRead(stora, ind); return nothing; } return BlkValueRead(stora, ind); ]; Array SAT_Tmp-->7; [ STORED_ACTION_TY_Adopt stora at; SAT_Tmp-->1 = action; SAT_Tmp-->2 = noun; SAT_Tmp-->3 = second; SAT_Tmp-->4 = actor; SAT_Tmp-->5 = act_requester; SAT_Tmp-->6 = parsed_number; action = BlkValueRead(stora, 0); at = FindAction(-1); if (ActionData-->(at+AD_NOUN_KOV) == OBJECT_TY) noun = BlkValueRead(stora, 1); else { parsed_number = BlkValueRead(stora, 1); noun = nothing; } if (ActionData-->(at+AD_SECOND_KOV) == OBJECT_TY) second = BlkValueRead(stora, 2); else { parsed_number = BlkValueRead(stora, 2); second = nothing; } actor = BlkValueRead(stora, 3); if (BlkValueRead(stora, 4)) act_requester = player; else act_requester = nothing; ]; [ STORED_ACTION_TY_Unadopt; action = SAT_Tmp-->1; noun = SAT_Tmp-->2; second = SAT_Tmp-->3; actor = SAT_Tmp-->4; act_requester = SAT_Tmp-->5; parsed_number = SAT_Tmp-->6; return SAT_Tmp-->0; ]; [ STORED_ACTION_TY_Current stora at text_of_command; if ((stora==0) || (BlkType(stora) ~= STORED_ACTION_TY)) return 0; BlkValueWrite(stora, 0, action); at = FindAction(-1); if (ActionData-->(at+AD_NOUN_KOV) == OBJECT_TY) BlkValueWrite(stora, 1, noun); else BlkValueWrite(stora, 1, parsed_number); if (ActionData-->(at+AD_SECOND_KOV) == OBJECT_TY) BlkValueWrite(stora, 2, second); else BlkValueWrite(stora, 2, parsed_number); BlkValueWrite(stora, 3, actor); if (act_requester) BlkValueWrite(stora, 4, true); else BlkValueWrite(stora, 4, false); if ((at) && ((ActionData-->(at+AD_NOUN_KOV) == UNDERSTANDING_TY) || (ActionData-->(at+AD_SECOND_KOV) == UNDERSTANDING_TY))) { text_of_command = BlkValueRead(stora, 5); if (text_of_command == 0) { text_of_command = INDEXED_TEXT_TY_Support(CREATE_KOVS); BlkValueWrite(stora, 5, text_of_command); } INDEXED_TEXT_TY_Support(CAST_KOVS, players_command, SNIPPET_TY, text_of_command); } else BlkValueWrite(stora, 5, 0); return stora; ]; [ STORED_ACTION_TY_Try stora ks text_of_command saved_command; if ((stora==0) || (BlkType(stora) ~= STORED_ACTION_TY)) return; if (ks) { @push keep_silent; keep_silent=1; } text_of_command = BlkValueRead(stora, 5); if (text_of_command) { saved_command = INDEXED_TEXT_TY_Support(CREATE_KOVS); INDEXED_TEXT_TY_Support(CAST_KOVS, players_command, SNIPPET_TY, saved_command); SetPlayersCommand(text_of_command); } TryAction(BlkValueRead(stora, 4), BlkValueRead(stora, 3), BlkValueRead(stora, 0), BlkValueRead(stora, 1), BlkValueRead(stora, 2)); if (text_of_command) { SetPlayersCommand(saved_command); BlkFree(saved_command); } if (ks) { @pull keep_silent; } ]; #IFNOT; ! IFDEF MEMORY_HEAP_SIZE [ STORED_ACTION_TY_Say stora; ]; [ STORED_ACTION_TY_New a n s ac req stora; return false; ]; [ STORED_ACTION_TY_Support t a b c; rfalse; ]; #ENDIF; ! IFDEF MEMORY_HEAP_SIZE #IFDEF MEMORY_HEAP_SIZE; ! Will exist if any use is made of heap [ LIST_OF_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: arg3 = LIST_OF_TY_Create(arg2); if (arg1) LIST_OF_TY_CopyRawArray(arg3, arg1, 2, 0); return arg3; CAST_KOVS: rfalse; DESTROY_KOVS: return LIST_OF_TY_Destroy(arg1); PRECOPY_KOVS: return LIST_OF_TY_PreCopy(arg1, arg2); COPY_KOVS: return LIST_OF_TY_Copy(arg1, arg2); COMPARE_KOVS: return LIST_OF_TY_Compare(arg1, arg2); READ_FILE_KOVS: rfalse; WRITE_FILE_KOVS: rfalse; HASH_KOVS: return LIST_OF_TY_Hash(arg1); } ]; Constant LIST_ITEM_KOV_F = 0; ! Entry 0: the kind of the list Constant LIST_LENGTH_F = 1; ! Entry 1: length, i.e., number of items Constant LIST_ITEM_BASE = 2; ! List items begin at this entry [ LIST_OF_TY_Create skov list; skov = KindBaseTerm(skov, 0); list = BlkAllocate(28*WORDSIZE, LIST_OF_TY, BLK_FLAG_MULTIPLE + BLK_FLAG_WORD); BlkValueWrite(list, LIST_ITEM_KOV_F, skov); BlkValueWrite(list, LIST_LENGTH_F, 0); return list; ]; [ LIST_OF_TY_CopyRawArray list arr rea cast len i ex bk v w; if ((list==0) || (BlkType(list) ~= LIST_OF_TY)) return false; ex = BlkValueExtent(list); len = arr-->2; if ((len+LIST_ITEM_BASE > ex) && (BlkValueSetExtent(list, len+LIST_ITEM_BASE) == false)) return 0; BlkValueWrite(list, LIST_LENGTH_F, len); if (rea == 2) bk = BlkValueRead(list, LIST_ITEM_KOV_F); else { bk = arr-->1; BlkValueWrite(list, LIST_ITEM_KOV_F, bk); } for (i=0:i(i+3); if (KindAtomic(bk) == LIST_OF_TY) { w = LIST_OF_TY_Create(v-->1); LIST_OF_TY_CopyRawArray(w, v, 0, KindBaseTerm(bk, 0)); BlkValueWrite(list, i+LIST_ITEM_BASE, w); } else { if ((cast) && (cast ~= bk)) { if (KOVIsBlockValue(cast)) v = BlkValueCreate(cast, v, bk); } else { if (KOVIsBlockValue(bk)) v = BlkValueCreate(bk, v); } BlkValueWrite(list, i+LIST_ITEM_BASE, v); } } if ((cast) && (cast ~= bk)) BlkValueWrite(list, LIST_ITEM_KOV_F, cast); #ifdef SHOW_ALLOCATIONS; print "Copied raw array to list: "; LIST_OF_TY_Say(list, 1); print "^"; #endif; return list; ]; [ LIST_OF_TY_Destroy list no_items i; if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) { no_items = BlkValueRead(list, LIST_LENGTH_F); for (i=0; i ex) { if (BlkValueSetExtent(list, len+LIST_ITEM_BASE) == false) return 0; } if (kov) BlkValueWrite(list, LIST_ITEM_KOV_F, kov); else BlkValueWrite(list, LIST_ITEM_KOV_F, OBJECT_TY); BlkValueWrite(list, LIST_LENGTH_F, len); obj = 0; for (i=0: i no_items+1))) { print "*** Couldn't add at entry ", posn, " in the list "; LIST_OF_TY_Say(list, true); print ", which has entries in the range 1 to ", no_items, " ***^"; RunTimeProblem(RTP_LISTRANGEERROR); rfalse; } ex = BlkValueExtent(list); if (no_items+LIST_ITEM_BASE+1 > ex) { if (BlkValueSetExtent(list, ex+16) == false) return 0; } if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) { nv = BlkValueCreate(BlkValueRead(list, LIST_ITEM_KOV_F)); BlkValueCopy(nv, v); v = nv; } if (posnflag) { posn--; for (i=no_items:i>posn:i--) { BlkValueWrite(list, i+LIST_ITEM_BASE, BlkValueRead(list, i-1+LIST_ITEM_BASE)); } BlkValueWrite(list, posn+LIST_ITEM_BASE, v); } else { BlkValueWrite(list, no_items+LIST_ITEM_BASE, v); } BlkValueWrite(list, LIST_LENGTH_F, no_items+1); return list; ]; [ LIST_OF_TY_AppendList list more posnflag posn nodups v i j no_items msize ex nv; if ((list==0) || (BlkType(list) ~= LIST_OF_TY)) return false; if ((more==0) || (BlkType(more) ~= LIST_OF_TY)) return list; no_items = BlkValueRead(list, LIST_LENGTH_F); if ((posnflag) && ((posn<1) || (posn > no_items+1))) { print "*** Couldn't add at entry ", posn, " in the list "; LIST_OF_TY_Say(list, true); print ", which has entries in the range 1 to ", no_items, " ***^"; RunTimeProblem(RTP_LISTRANGEERROR); rfalse; } msize = BlkValueRead(more, LIST_LENGTH_F); ex = BlkValueExtent(list); if (no_items+msize+LIST_ITEM_BASE > ex) { if (BlkValueSetExtent(list, no_items+msize+LIST_ITEM_BASE+8) == false) return 0; } if (posnflag) { posn--; for (i=no_items+msize:i>=posn+msize:i--) { BlkValueWrite(list, i+LIST_ITEM_BASE, BlkValueRead(list, i-msize+LIST_ITEM_BASE)); } ! BlkValueWrite(list, posn, v); for (j=0: j to) || (from <= 0) || (to > no_items)) { if (forgive) { if (from <= 0) from = 1; if (to >= no_items) to = no_items; if (from > to) return list; } else { print "*** Couldn't remove entries ", from, " to ", to, " from the list "; LIST_OF_TY_Say(list, true); print ", which has entries in the range 1 to ", no_items, " ***^"; RunTimeProblem(RTP_LISTRANGEERROR); rfalse; } } to--; from--; d = to-from+1; if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) for (i=0; i ex) { if (BlkValueSetExtent(list, newsize+LIST_ITEM_BASE) == false) return 0; } dv = DefaultValueOfKOV(BlkValueRead(list, LIST_ITEM_KOV_F)); for (i=no_items: i newsize) { if (this_way_only == 1) return list; if (truncation_end == -1) { if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) for (i=0: ino_items)) { if (forgive) return false; print "*** Couldn't read from entry ", i, " of a list which"; switch (no_items) { 0: print " is empty ***^"; 1: print " has only one entry, numbered 1 ***^"; default: print " has entries numbered from 1 to ", no_items, " ***^"; } RunTimeProblem(RTP_LISTRANGEERROR); if (no_items >= 1) i = 1; else return false; } return BlkValueRead(list, LIST_ITEM_BASE+i-1); ]; [ WriteLIST_OF_TY_GetItem list i val no_items; if ((list==0) || (BlkType(list) ~= LIST_OF_TY)) return false; no_items = BlkValueRead(list, LIST_LENGTH_F); if ((i<=0) || (i>no_items)) { print "*** Couldn't write to list entry ", i, " of a list which"; switch (no_items) { 0: print " is empty ***^"; 1: print " has only one entry, numbered 1 ***^"; default: print " has entries numbered from 1 to ", no_items, " ***^"; } return RunTimeProblem(RTP_LISTRANGEERROR); } BlkValueWrite(list, LIST_ITEM_BASE+i-1, val); ]; [ LIST_OF_TY_PutItem list i v no_items nv; if ((list==0) || (BlkType(list) ~= LIST_OF_TY)) return false; no_items = BlkValueRead(list, LIST_LENGTH_F); if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) { nv = BlkValueCreate(BlkValueRead(list, LIST_ITEM_KOV_F)); BlkValueCopy(nv, v); v = nv; } if ((i<=0) || (i>no_items)) return false; BlkValueWrite(list, LIST_ITEM_BASE+i-1, v); ]; [ LIST_OF_TY_Mol list len i; if ((list==0) || (BlkType(list) ~= LIST_OF_TY)) return 0; len = multiple_object-->0; LIST_OF_TY_SetLength(list, len); for (i=1: i<=len: i++) LIST_OF_TY_PutItem(list, i, multiple_object-->i); return list; ]; [ LIST_OF_TY_Set_Mol list len i; if ((list==0) || (BlkType(list) ~= LIST_OF_TY)) return 0; len = BlkValueRead(list, LIST_LENGTH_F); if (len > 63) len = 63; multiple_object-->0 = len; for (i=1: i<=len: i++) multiple_object-->i = BlkValueRead(list, LIST_ITEM_BASE+i-1); ]; [ LIST_OF_TY_Reverse list no_items i v; if ((list==0) || (BlkType(list) ~= LIST_OF_TY)) return 0; no_items = BlkValueRead(list, LIST_LENGTH_F); if (no_items < 2) return list; for (i=0;i*20:i--) BlkValueWrite(list, LIST_ITEM_BASE+i, BlkValueRead(list, LIST_ITEM_BASE+i-1)); BlkValueWrite(list, LIST_ITEM_BASE, v); } return list; ]; Global LIST_OF_TY_Sort_cf; [ LIST_OF_TY_Sort list dir prop cf i j no_items v; no_items = BlkValueRead(list, LIST_LENGTH_F); if (dir == 2) { if (no_items < 2) return; for (i=1:i2; if ((len+COMBINATION_ITEM_BASE > ex) && (BlkValueSetExtent(comb, len+COMBINATION_ITEM_BASE) == false)) return 0; BlkValueWrite(comb, LIST_LENGTH_F, len); if (rea == 2) bk = BlkValueRead(comb, COMBINATION_KIND_F); else { bk = raw-->1; BlkValueWrite(comb, COMBINATION_KIND_F, bk); } for (i=0:i(i+3); if (KOVIsBlockValue(bk)) v = BlkValueCreate(bk, v); BlkValueWrite(comb, i+COMBINATION_ITEM_BASE, v); } #ifdef SHOW_ALLOCATIONS; print "Copied raw array to comb: "; COMBINATION_TY_Say(comb, 1); print "^"; #endif; return comb; ]; [ COMBINATION_TY_Destroy comb kind no_items i bk; kind = BlkValueRead(comb, COMBINATION_KIND_F); no_items = KindBaseArity(kind); for (i=0; i0) print ", "; bk = KindBaseTerm(kind, i); v = BlkValueRead(comb, i+COMBINATION_ITEM_BASE); if (bk == LIST_OF_TY) LIST_OF_TY_Say(v, 1); else PrintKindValuePair(bk, v); } print ")"; ]; #IFNOT; ! IFDEF MEMORY_HEAP_SIZE [ COMBINATION_TY_Support t a b c; rfalse; ]; [ COMBINATION_TY_Say comb; ]; #ENDIF; ! IFDEF MEMORY_HEAP_SIZE Constant RRV_NAME RR_NAME-4; Constant RRV_PERMISSIONS RR_PERMISSIONS-4; Constant RRV_STORAGE RR_STORAGE-4; Constant RRV_KIND RR_KIND-4; Constant RRV_HANDLER RR_HANDLER-4; Constant RRV_DESCRIPTION RR_DESCRIPTION-4; Constant RRV_USED 6; Constant RRV_FILLED 7; Constant RRV_DATA_BASE 8; ! valencies Constant RRVAL_V_TO_V 0; Constant RRVAL_V_TO_O RELS_Y_UNIQUE; Constant RRVAL_O_TO_V RELS_X_UNIQUE; Constant RRVAL_O_TO_O RELS_X_UNIQUE+RELS_Y_UNIQUE; Constant RRVAL_EQUIV RELS_EQUIVALENCE+RELS_SYMMETRIC; Constant RRVAL_SYM_V_TO_V RELS_SYMMETRIC; Constant RRVAL_SYM_O_TO_O RELS_SYMMETRIC+RELS_X_UNIQUE+RELS_Y_UNIQUE; ! dictionary entry flags Constant RRF_USED $0001; ! entry contains a value Constant RRF_DELETED $0002; ! entry used to contain a value Constant RRF_SINGLE $0004; ! entry's Y is a value, not a list Constant RRF_HASX $0010; ! 2-in-1 entry contains a corresponding key Constant RRF_HASY $0020; ! 2-in-1 entry contains a corresponding value Constant RRF_ENTKEYX $0040; ! 2-in-1 entry key is left side KOV Constant RRF_ENTKEYY $0080; ! 2-in-1 entry key is right side KOV ! permission/task constants (those commented out here are generated by I7) !Constant RELS_SYMMETRIC $8000; !Constant RELS_EQUIVALENCE $4000; !Constant RELS_X_UNIQUE $2000; !Constant RELS_Y_UNIQUE $1000; !Constant RELS_TEST $0800; !Constant RELS_ASSERT_TRUE $0400; !Constant RELS_ASSERT_FALSE $0200; !Constant RELS_SHOW $0100; !Constant RELS_ROUTE_FIND $0080; !Constant RELS_ROUTE_FIND_COUNT $0040; Constant RELS_COPY $0020; Constant RELS_DESTROY $0010; !Constant RELS_LOOKUP_ANY $0008; !Constant RELS_LOOKUP_ALL_X $0004; !Constant RELS_LOOKUP_ALL_Y $0002; !Constant RELS_LIST $0001; Constant RELS_EMPTY $0003; Constant RELS_SET_VALENCY $0005; ! RELS_LOOKUP_ANY mode selection constants Constant RLANY_GET_X 1; Constant RLANY_GET_Y 2; Constant RLANY_CAN_GET_X 3; Constant RLANY_CAN_GET_Y 4; ! RELS_LIST mode selection constant Constant RLIST_ALL_X 1; Constant RLIST_ALL_Y 2; Constant RLIST_ALL_PAIRS 3; Constant RRP_MIN_SIZE 8; ! minimum number of entries (DO NOT CHANGE) Constant RRP_PERTURB_SHIFT 5; ! affects the probe sequence Constant RRP_RESIZE_SMALL 4; ! resize factor for small tables Constant RRP_RESIZE_LARGE 2; ! resize factor for large tables Constant RRP_LARGE_IS 256; ! how many entries make a table "large"? Constant RRP_CROWDED_IS 2; ! when filled entries outnumber unfilled by _ to 1 [ RelationTest relation task X Y handler; handler = relation-->RR_HANDLER; return handler(relation, task, X, Y); ]; [ EmptyRelationHandler relation task X Y; if (task == RELS_EMPTY) rtrue; rfalse; ]; #IFDEF MEMORY_HEAP_SIZE; ! Will exist if any use is made of heap [ RELATION_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: arg3 = RELATION_TY_Create(arg2, arg1); return arg3; CAST_KOVS: rfalse; DESTROY_KOVS: return RELATION_TY_Destroy(arg1); PRECOPY_KOVS: rfalse; COPY_KOVS: return RELATION_TY_Copy(arg1, arg2); COMPARE_KOVS: return RELATION_TY_Compare(arg1, arg2); READ_FILE_KOVS: rfalse; WRITE_FILE_KOVS: rfalse; HASH_KOVS: return arg1; } ]; [ RELATION_TY_Create kov from rel i skov handler; rel = BlkAllocate((RRV_DATA_BASE + 3*RRP_MIN_SIZE)*WORDSIZE, RELATION_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); if ((from == 0) && (kov ~= 0)) from = DefaultValueFinder(kov); if (from) { for (i=0: iRR_NAME; ]; [ RELATION_TY_Name rel txt; if (rel) { BlkValueWrite(rel, RRV_NAME, txt); BlkValueWrite(rel, RRV_DESCRIPTION, txt); } ]; [ ChooseRelationHandler kov sym; if (KOVIsBlockValue(KindBaseTerm(kov, 0))) { if (sym) return SymHashListRelationHandler; return HashListRelationHandler; } if (sym) return SymDoubleHashSetRelationHandler; return DoubleHashSetRelationHandler; ]; [ RELATION_TY_SetValency rel val kov filled cur handler ext; filled = BlkValueRead(rel, RRV_FILLED); if (filled) { print "*** Illegal valency change ***^"; rfalse; } kov = BlkValueRead(rel, RRV_KIND); if (val == RRVAL_EQUIV or RRVAL_SYM_V_TO_V or RRVAL_SYM_O_TO_O) { if (KindBaseTerm(kov, 0) ~= KindBaseTerm(kov, 1)) { print "*** Relation cannot be made symmetric ***^"; rfalse; } } cur = BlkValueRead(rel, RRV_HANDLER); switch (val) { RRVAL_V_TO_V: handler = ChooseRelationHandler(kov, false); RRVAL_V_TO_O: handler = HashTableRelationHandler; RRVAL_O_TO_V: handler = ReversedHashTableRelationHandler; RRVAL_O_TO_O: handler = TwoInOneHashTableRelationHandler; RRVAL_EQUIV: handler = EquivHashTableRelationHandler; RRVAL_SYM_V_TO_V: handler = ChooseRelationHandler(kov, true); RRVAL_SYM_O_TO_O: handler = Sym2in1HashTableRelationHandler; default: print "*** Illegal valency value ***^"; rfalse; } if (cur == handler) rtrue; ! adjust size when going to or from 2-in-1 if (cur == TwoInOneHashTableRelationHandler) { ext = BlkValueRead(rel, RRV_STORAGE) + 1; BlkValueSetExtent(rel, RRV_DATA_BASE + 3*ext); } else if (handler == TwoInOneHashTableRelationHandler) { ext = BlkValueRead(rel, RRV_STORAGE) + 1; BlkValueSetExtent(rel, RRV_DATA_BASE + 4*ext); } BlkValueWrite(rel, RRV_HANDLER, handler); ]; [ RELATION_TY_GetValency rel handler; return BlkValueRead(rel, RRV_PERMISSIONS) & VALENCY_MASK; ]; [ DoubleHashSetRelationHandler rel task X Y sym kov kx ky at tmp v; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); if (task == RELS_SET_VALENCY) { return RELATION_TY_SetValency(rel, X); } else if (task == RELS_DESTROY) { ! clear kx = KOVIsBlockValue(kx); ky = KOVIsBlockValue(ky); if (~~(kx || ky)) return; for (at = BlkValueRead(rel, RRV_STORAGE); at >= 0; at--) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (tmp & RRF_USED) { if (kx) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); if (ky) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); } at--; } return; } else if (task == RELS_COPY) { X = KOVIsBlockValue(kx); Y = KOVIsBlockValue(ky); if (~~(X || Y)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (tmp & RRF_USED) { if (X) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); tmp = BlkValueCopy(BlkValueCreate(kx), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, tmp); } if (Y) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); tmp = BlkValueCopy(BlkValueCreate(ky), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); } } at--; } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; if (sym) { kov = KOVComparisonFunction(kx); if (~~kov) kov = UnsignedCompare; } for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (tmp & RRF_USED) { X = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); Y = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (sym && (kov(X, Y) > 0)) continue; print " "; PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; PrintKindValuePair(ky, Y); print "^"; } } return; } else if (task == RELS_EMPTY) { if (BlkValueRead(rel, RRV_USED) == 0) rtrue; if (X == 1) { DoubleHashSetRelationHandler(rel, RELS_DESTROY); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; BlkValueWrite(rel, tmp, 0); BlkValueWrite(rel, tmp + 1, 0); BlkValueWrite(rel, tmp + 2, 0); } BlkValueWrite(rel, RRV_USED, 0); BlkValueWrite(rel, RRV_FILLED, 0); rtrue; } rfalse; } else if (task == RELS_LOOKUP_ANY) { for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { v = BlkValueRead(rel, tmp + 2); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } if (Y == RLANY_CAN_GET_X) rtrue; return BlkValueRead(rel, tmp + 1); } else { v = BlkValueRead(rel, tmp + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } if (Y == RLANY_CAN_GET_Y) rtrue; return BlkValueRead(rel, tmp + 2); } } } if (Y == RLANY_GET_X or RLANY_GET_Y) print "*** Lookup failed: value not found ***^"; rfalse; } else if (task == RELS_LOOKUP_ALL_X) { if (BlkType(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { v = BlkValueRead(rel, tmp + 2); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 1)); } } return Y; } else if (task == RELS_LOOKUP_ALL_Y) { if (BlkType(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { v = BlkValueRead(rel, tmp + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 2)); } } return Y; } else if (task == RELS_LIST) { if (X == 0 || BlkType(X) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(X, 0); switch (Y) { RLIST_ALL_X, RLIST_ALL_Y: for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { tmp++; if (Y == RLIST_ALL_Y) tmp++; v = BlkValueRead(rel, tmp); LIST_OF_TY_InsertItem(X, v, false, 0, true); } } return X; RLIST_ALL_PAIRS: ! LIST_OF_TY_InsertItem will make a deep copy of the item, ! so we can reuse a single combination value here Y = BlkValueCreate(COMBINATION_TY, 0, kov); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { v = BlkValueRead(rel, tmp + 1); BlkValueWrite(Y, COMBINATION_ITEM_BASE, v); v = BlkValueRead(rel, tmp + 2); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, v); LIST_OF_TY_InsertItem(X, Y); } } BlkValueWrite(Y, COMBINATION_ITEM_BASE, 0); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, 0); BlkFree(Y); return X; } rfalse; } at = DoubleHashSetLookUp(rel, kx, ky, X, Y); switch(task) { RELS_TEST: if (at >= 0) rtrue; rfalse; RELS_ASSERT_TRUE: if (at >= 0) rtrue; at = ~at; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at) == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } if (KOVIsBlockValue(ky)) { Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); DoubleHashSetCheckResize(rel); rtrue; RELS_ASSERT_FALSE: if (at < 0) rtrue; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); if (KOVIsBlockValue(kx)) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); if (KOVIsBlockValue(ky)) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, 0); rtrue; } ]; [ DoubleHashSetLookUp rel kx ky X Y hashv i free mask perturb flags; ! calculate a hash value for the pair hashv = KOVHashValue(kx, x) + KOVHashValue(ky, y); ! look in the first expected slot mask = BlkValueRead(rel, RRV_STORAGE); i = hashv & mask; flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) return ~i; if (DoubleHashSetEntryMatches(rel, i, kx, ky, X, Y)) return i; ! not here, keep looking in sequence free = -1; if (flags & RRF_DELETED) free = i; perturb = hashv; hashv = i; for (::) { hashv = hashv*5 + perturb + 1; i = hashv & mask; flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) { if (free >= 0) return ~free; return ~i; } if (DoubleHashSetEntryMatches(rel, i, kx, ky, X, Y)) return i; if ((free < 0) && (flags & RRF_DELETED)) free = i; #ifdef TARGET_ZCODE; @log_shift perturb (-RRP_PERTURB_SHIFT) -> perturb; #ifnot; @ushiftr perturb RRP_PERTURB_SHIFT perturb; #endif; } ]; [ DoubleHashSetCheckResize rel filled ext newext temp i at kov kx ky F X Y; filled = BlkValueRead(rel, RRV_FILLED); ext = BlkValueRead(rel, RRV_STORAGE) + 1; if (filled >= (ext - filled) * RRP_CROWDED_IS) { ! copy entries to temporary space temp = BlkAllocate(ext * (3*WORDSIZE), INDEXED_TEXT_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); for (i=0: i= RRP_LARGE_IS) newext = ext * RRP_RESIZE_LARGE; else newext = ext * RRP_RESIZE_SMALL; BlkValueSetExtent(rel, RRV_DATA_BASE + newext*3); BlkValueWrite(rel, RRV_STORAGE, newext - 1); BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_USED)); for (i=0: i= 0) { print "*** Duplicate entry while resizing ***^"; rfalse; } at = ~at; BlkValueWrite(rel, RRV_DATA_BASE + 3*at, F); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); } ! done with temporary space BlkFree(temp); } ]; [ DoubleHashSetEntryMatches rel at kx ky X Y cx cy; cx = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(cx, X) ~= 0) rfalse; } else { if (cx ~= X) rfalse; } cy = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(cy, Y) ~= 0) rfalse; } else { if (cy ~= Y) rfalse; } rtrue; ]; [ HashListRelationHandler rel task X Y sym kov kx ky; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); return HashCoreRelationHandler(rel, task, kx, ky, X, Y, 1); ]; [ HashTableRelationHandler rel task X Y kov kx ky; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); return HashCoreRelationHandler(rel, task, kx, ky, X, Y, 0); ]; [ ReversedHashTableRelationHandler rel task X Y kov kx ky; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); switch (task) { RELS_SET_VALENCY: return RELATION_TY_SetValency(rel, X); RELS_TEST, RELS_ASSERT_TRUE, RELS_ASSERT_FALSE: return HashCoreRelationHandler(rel, task, ky, kx, Y, X, 0); RELS_LOOKUP_ANY: switch (Y) { RLANY_GET_X: Y = RLANY_GET_Y; RLANY_GET_Y: Y = RLANY_GET_X; RLANY_CAN_GET_X: Y = RLANY_CAN_GET_Y; RLANY_CAN_GET_Y: Y = RLANY_CAN_GET_X; } RELS_LOOKUP_ALL_X: task = RELS_LOOKUP_ALL_Y; RELS_LOOKUP_ALL_Y: task = RELS_LOOKUP_ALL_X; RELS_SHOW: RELS_LIST: switch (Y) { RLIST_ALL_X: Y = RLIST_ALL_Y; RLIST_ALL_Y: Y = RLIST_ALL_X; } } return HashCoreRelationHandler(rel, task, kx, ky, X, Y, 0); ]; [ SymDoubleHashSetRelationHandler rel task X Y; if (task == RELS_ASSERT_TRUE or RELS_ASSERT_FALSE) DoubleHashSetRelationHandler(rel, task, Y, X); return DoubleHashSetRelationHandler(rel, task, X, Y, 1); ]; [ SymHashListRelationHandler rel task X Y; if (task == RELS_ASSERT_TRUE or RELS_ASSERT_FALSE) HashListRelationHandler(rel, task, Y, X); return HashListRelationHandler(rel, task, X, Y); ]; [ Sym2in1HashTableRelationHandler rel task X Y; if (task == RELS_ASSERT_TRUE or RELS_ASSERT_FALSE) TwoInOneHashTableRelationHandler(rel, task, Y, X); return TwoInOneHashTableRelationHandler(rel, task, X, Y, 1); ]; [ HashCoreRelationHandler rel task kx ky X Y mult sym rev at tmp fl; if (task == RELS_SET_VALENCY) { return RELATION_TY_SetValency(rel, X); } else if (task == RELS_DESTROY) { ! clear kx = KOVIsBlockValue(kx); ky = KOVIsBlockValue(ky); if (~~(kx || ky)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { if (kx) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); if (ky || ~~(fl & RRF_SINGLE)) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); } at--; } return; } else if (task == RELS_COPY) { X = KOVIsBlockValue(kx); Y = KOVIsBlockValue(ky); if (~~(X || Y)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { if (X) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); tmp = BlkValueCopy(BlkValueCreate(kx), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, tmp); } if (Y || ~~(fl & RRF_SINGLE)) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); tmp = BlkValueCopy(BlkValueCreate(BlkType(tmp)), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); } } at--; } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; ! Z-machine doesn't have the room to let us pass sym/rev as parameters switch (RELATION_TY_GetValency(rel)) { RRVAL_SYM_V_TO_V: sym = 1; tmp = KOVComparisonFunction(kx); if (~~tmp) tmp = UnsignedCompare; RRVAL_O_TO_V: rev = 1; } for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { X = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); Y = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (fl & RRF_SINGLE) { if (sym && tmp(X, Y) > 0) continue; print " "; if (rev) PrintKindValuePair(ky, Y); else PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; if (rev) PrintKindValuePair(kx, X); else PrintKindValuePair(ky, Y); print "^"; } else { for (mult=1: mult<=LIST_OF_TY_GetLength(Y): mult++) { fl = LIST_OF_TY_GetItem(Y, mult); if (sym && tmp(X, fl) > 0) continue; print " "; if (rev) PrintKindValuePair(ky, fl); else PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; if (rev) PrintKindValuePair(kx, X); else PrintKindValuePair(ky, fl); print "^"; } } } } return; } else if (task == RELS_EMPTY) { if (BlkValueRead(rel, RRV_USED) == 0) rtrue; if (X == 1) { HashCoreRelationHandler(rel, RELS_DESTROY); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; BlkValueWrite(rel, tmp, 0); BlkValueWrite(rel, tmp + 1, 0); BlkValueWrite(rel, tmp + 2, 0); } BlkValueWrite(rel, RRV_USED, 0); BlkValueWrite(rel, RRV_FILLED, 0); rtrue; } rfalse; } else if (task == RELS_LOOKUP_ANY) { if (Y == RLANY_GET_Y or RLANY_CAN_GET_Y) { at = HashCoreLookUp(rel, kx, X); if (at >= 0) { if (Y == RLANY_CAN_GET_Y) rtrue; tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) return tmp; return LIST_OF_TY_GetItem(tmp, 1); } } else { for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { sym = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) { if (KOVIsBlockValue(ky)) { if (BlkValueCompare(X, sym) ~= 0) continue; } else { if (X ~= sym) continue; } } else { if (LIST_OF_TY_FindItem(sym, X) == 0) continue; } if (Y == RLANY_CAN_GET_X) rtrue; return BlkValueRead(rel, tmp + 1); } } } if (Y == RLANY_GET_X or RLANY_GET_Y) print "*** Lookup failed: value not found ***^"; rfalse; } else if (task == RELS_LOOKUP_ALL_X) { if (BlkType(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { sym = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) { if (KOVIsBlockValue(ky)) { if (BlkValueCompare(X, sym) ~= 0) continue; } else { if (X ~= sym) continue; } } else { if (LIST_OF_TY_FindItem(sym, X) == 0) continue; } LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 1)); } } return Y; } else if (task == RELS_LOOKUP_ALL_Y) { if (BlkType(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); at = HashCoreLookUp(rel, kx, X); if (at >= 0) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) LIST_OF_TY_InsertItem(Y, tmp); else LIST_OF_TY_AppendList(Y, tmp); } return Y; } else if (task == RELS_LIST) { if (BlkType(X) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(X, 0); switch (Y) { RLIST_ALL_X: for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) LIST_OF_TY_InsertItem(X, BlkValueRead(rel, tmp + 1)); } return X; RLIST_ALL_Y: for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) LIST_OF_TY_InsertItem(X, tmp, false, 0, true); else LIST_OF_TY_AppendList(X, tmp, false, 0, true); } } return X; RLIST_ALL_PAIRS: if (RELATION_TY_GetValency(rel) == RRVAL_O_TO_V) rev = 1; ! LIST_OF_TY_InsertItem will make a deep copy of the item, ! so we can reuse a single combination value here Y = BlkValueCreate(COMBINATION_TY, 0, tmp); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { BlkValueWrite(Y, COMBINATION_ITEM_BASE + rev, BlkValueRead(rel, tmp + 1)); tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) { BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1 - rev, tmp); LIST_OF_TY_InsertItem(X, Y); } else { for (mult = LIST_OF_TY_GetLength(tmp): mult > 0: mult--) { BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1 - rev, LIST_OF_TY_GetItem(tmp, mult)); LIST_OF_TY_InsertItem(X, Y); } } } } BlkValueWrite(Y, COMBINATION_ITEM_BASE, 0); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, 0); BlkFree(Y); return X; } rfalse; } at = HashCoreLookUp(rel, kx, X); switch(task) { RELS_TEST: if (at < 0) rfalse; fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (fl & RRF_SINGLE) { if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } rfalse; } else { return LIST_OF_TY_FindItem(tmp, Y); } RELS_ASSERT_TRUE: if (at < 0) { ! no entry exists for this key, just add one at = ~at; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at) == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } if (KOVIsBlockValue(ky)) { Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); HashCoreCheckResize(rel); break; } ! an entry exists: could be a list or a single value fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); ! flags tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); ! value or list if (fl & RRF_SINGLE) { ! if Y is the same as the stored key, we have nothing to do if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } ! it's different: either replace it or expand into a list, ! depending on the value of mult if (mult) { fl = LIST_OF_TY_Create(UNKNOWN_TY); ! new list BlkValueWrite(fl, LIST_ITEM_KOV_F, ky); LIST_OF_TY_SetLength(fl, 2); BlkValueWrite(fl, LIST_ITEM_BASE, tmp); ! do not copy LIST_OF_TY_PutItem(fl, 2, Y); ! copy if needed BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, fl); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED); } else { if (KOVIsBlockValue(ky)) { BlkFree(tmp); Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); } } else { ! if Y is present already, do nothing. otherwise add it. LIST_OF_TY_InsertItem(tmp, Y, 0, 0, 1); } rtrue; RELS_ASSERT_FALSE: if (at < 0) rtrue; ! an entry exists: could be a list or a single value fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); ! flags tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); ! value or list if (fl & RRF_SINGLE) { ! if the stored key isn't Y, we have nothing to do if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) ~= 0) rtrue; } else { if (tmp ~= Y) rtrue; } ! delete the entry if (KOVIsBlockValue(ky)) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); .DeleteEntryIgnoringY; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); if (KOVIsBlockValue(kx)) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, 0); } else { ! remove Y from the list if present LIST_OF_TY_RemoveValue(tmp, Y, 1); ! if the list is now empty, delete the whole entry if (LIST_OF_TY_GetLength(tmp) == 0) { BlkFree(tmp); jump DeleteEntryIgnoringY; } } rtrue; } rtrue; ]; [ HashCoreLookUp rel kx X hashv i free mask perturb flags; !print "[HCLU rel=", rel, " kx=", kx, " X=", X, ": "; ! calculate a hash value for the key hashv = KOVHashValue(kx, x); ! look in the first expected slot mask = BlkValueRead(rel, RRV_STORAGE); i = hashv & mask; !print "hv=", hashv, ", trying ", i; if (HashCoreEntryMatches(rel, i, kx, X)) { !print " - found]^"; return i; } flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) { !print " - not found]^"; return ~i; } ! not here, keep looking in sequence free = -1; if (flags & RRF_DELETED) free = i; perturb = hashv; hashv = i; for (::) { hashv = hashv*5 + perturb + 1; i = hashv & mask; !print ", ", i; flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) { !print " - not found]^"; if (free >= 0) return ~free; return ~i; } if (HashCoreEntryMatches(rel, i, kx, X)) { !print " - found]^"; return i; } if ((free < 0) && (flags & RRF_DELETED)) free = i; #ifdef TARGET_ZCODE; @log_shift perturb (-RRP_PERTURB_SHIFT) -> perturb; #ifnot; @ushiftr perturb RRP_PERTURB_SHIFT perturb; #endif; } ]; [ HashCoreCheckResize rel filled ext newext temp i at kov kx F X Y; filled = BlkValueRead(rel, RRV_FILLED); ext = BlkValueRead(rel, RRV_STORAGE) + 1; if (filled >= (ext - filled) * RRP_CROWDED_IS) { ! copy entries to temporary space temp = BlkAllocate(ext * (3*WORDSIZE), INDEXED_TEXT_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); for (i=0: i= RRP_LARGE_IS) newext = ext * RRP_RESIZE_LARGE; else newext = ext * RRP_RESIZE_SMALL; BlkValueSetExtent(rel, RRV_DATA_BASE + newext*3); BlkValueWrite(rel, RRV_STORAGE, newext - 1); BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_USED)); for (i=0: i= 0) { print "*** Duplicate entry while resizing ***^"; rfalse; } at = ~at; BlkValueWrite(rel, RRV_DATA_BASE + 3*at, F); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); } ! done with temporary space BlkFree(temp); } ]; [ HashCoreEntryMatches rel at kx X cx cy; cx = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(cx, X) ~= 0) rfalse; } else { if (cx ~= X) rfalse; } rtrue; ]; [ EquivHashTableRelationHandler rel task X Y kx at at2 tmp fl i ext; kx = KindBaseTerm(BlkValueRead(rel, RRV_KIND), 0); if (task == RELS_SET_VALENCY) { return RELATION_TY_SetValency(rel, X); } else if (task == RELS_DESTROY) { ! clear if (KOVIsBlockValue(kx)) { at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); } at--; } } return; } else if (task == RELS_COPY) { if (KOVIsBlockValue(kx)) { at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); tmp = BlkValueCopy(BlkValueCreate(kx), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1); } at--; } } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; ext = BlkValueRead(rel, RRV_STORAGE); ! flag all items by negating their group numbers for (at=0, X=RRV_DATA_BASE: at<=ext: at++, X=X+3) if (BlkValueRead(rel, X) & RRF_USED) BlkValueWrite(rel, X + 2, -(BlkValueRead(rel, X + 2))); ! display groups, unflagging them as we go for (at=0, X=RRV_DATA_BASE, fl=0: at<=ext: at++, X=X+3, fl=0) { if (BlkValueRead(rel, X) & RRF_USED) { fl = BlkValueRead(rel, X + 2); if (fl > 0) continue; ! already visited BlkValueWrite(rel, X + 2, -fl); ! unflag it ! display the group starting with this member, but only ! if there are more members in the group tmp = BlkValueRead(rel, X + 1); i = 0; for (at2=at+1, Y=RRV_DATA_BASE+3*at2: at2<=ext: at2++, Y=Y+3) { if (BlkValueRead(rel, Y) & RRF_USED) { if (BlkValueRead(rel, Y + 2) ~= fl) continue; BlkValueWrite(rel, Y + 2, -fl); if (~~i) { ! print the saved first member print " { "; PrintKindValuePair(kx, tmp); i = 1; } print ", "; PrintKindValuePair(kx, BlkValueRead(rel, Y + 1)); } } if (i) print " }^"; } } return; } else if (task == RELS_EMPTY) { ! never empty since R(x,x) is always true rfalse; } else if (task == RELS_LOOKUP_ANY) { ! kind of a cheat, but it's faster than searching for a better value to return if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return X; } else if (task == RELS_LOOKUP_ALL_X or RELS_LOOKUP_ALL_Y) { if (BlkType(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); BlkValueWrite(Y, LIST_ITEM_KOV_F, kx); at = HashCoreLookUp(rel, kx, X); if (at < 0) { LIST_OF_TY_InsertItem(Y, X); } else { X = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { if (BlkValueRead(rel, tmp + 2) ~= X) continue; LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 1)); } } } return Y; } else if (task == RELS_LIST) { print "*** Domains of equivalence relations cannot be listed ***^"; return X; } at = HashCoreLookUp(rel, kx, X); at2 = HashCoreLookUp(rel, kx, Y); switch(task) { RELS_TEST: if (at < 0) { ! X is a loner, but could still be true if X == Y if (KOVIsBlockValue(kx)) { if (BlkValueCompare(X, Y) == 0) rtrue; } else { if (X == Y) rtrue; } rfalse; } if (at2 < 0) rfalse; if (at == at2) rtrue; tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2) == tmp) rtrue; rfalse; RELS_ASSERT_TRUE: ! if X and Y are the same, we have nothing to do if (KOVIsBlockValue(kx)) { if (BlkValueCompare(X, Y) == 0) rtrue; } else { if (X == Y) rtrue; } if (at < 0) { if (at2 < 0) { ! X and Y both missing: find a new group number and add both entries tmp = 0; ! candidate group number ext = BlkValueRead(rel, RRV_STORAGE); for (i=0: i<=ext: i++) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (fl & RRF_USED) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*i + 2); if (fl > tmp) tmp = fl; } } tmp++; ! new group number BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 2); ! add X entry at = ~at; if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); ! add Y entry. at2 might change if X and Y have the same hash code. at2 = ~(HashCoreLookUp(rel, kx, Y)); if (KOVIsBlockValue(kx)) { Y = BlkValueCopy(BlkValueCreate(kx), Y); } fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at2); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 1, Y); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 2, tmp); jump CheckResize; } ! X missing, Y present: add a new X entry at = ~at; if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); jump CheckResize; } if (at2 < 0) { ! X present, Y missing: add a new Y entry at2 = ~at2; if (KOVIsBlockValue(kx)) { Y = BlkValueCopy(BlkValueCreate(kx), Y); } BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at2); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 1, Y); tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 2, tmp); jump CheckResize; } ! X and Y both present: merge higher group into lower group tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); ! higher group fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2); ! lower group if (tmp < fl) { i = tmp; tmp = fl; fl = i; } ext = BlkValueRead(rel, RRV_STORAGE); for (at=0: at<=ext: at++) { i = RRV_DATA_BASE + 3*at + 2; if (BlkValueRead(rel, i) == tmp) BlkValueWrite(rel, i, fl); } .CheckResize; HashCoreCheckResize(rel); rtrue; RELS_ASSERT_FALSE: ! if X and Y are already in different groups, we have nothing to do if (at < 0 || at2 < 0) rtrue; tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2) ~= tmp) rtrue; ! delete the entry for X BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); if (KOVIsBlockValue(kx)) BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, 0); rtrue; } ]; [ TwoInOneHashTableRelationHandler rel task X Y sym kov kx ky at at2 tmp fl; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); if (task == RELS_SET_VALENCY) { return RELATION_TY_SetValency(rel, X); } else if (task == RELS_DESTROY) { ! clear kx = KOVIsBlockValue(kx); ky = KOVIsBlockValue(ky); if (~~(kx || ky)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl & RRF_USED) if ((kx && (fl & RRF_ENTKEYX)) || (ky && (fl & RRF_ENTKEYY))) { BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1)); } at--; } return; } else if (task == RELS_COPY) { X = KOVIsBlockValue(kx); Y = KOVIsBlockValue(ky); if (~~(X || Y)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl & RRF_USED) { if ((X && (fl & RRF_ENTKEYX)) || (Y && (fl & RRF_ENTKEYY))) { ! copy the entry key tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); if (fl & RRF_ENTKEYX) tmp = BlkValueCopy(BlkValueCreate(kx), tmp); else tmp = BlkValueCopy(BlkValueCreate(ky), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, tmp); ! update references in X/Y fields pointing here if (fl & RRF_HASX) { at2 = TwoInOneLookUp(rel, kx, BlkValueRead(rel, RRV_DATA_BASE + 4*at + 2), RRF_ENTKEYX); if (at2 >= 0) BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 3, tmp); } if (fl & RRF_HASY) { at2 = TwoInOneLookUp(rel, ky, BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3), RRF_ENTKEYY); if (at2 >= 0) BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 2, tmp); } } } at--; } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; if (sym) { kov = KOVComparisonFunction(kx); if (~~kov) kov = UnsignedCompare; } for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if ((fl & (RRF_USED+RRF_ENTKEYX+RRF_HASY)) == (RRF_USED+RRF_ENTKEYX+RRF_HASY)) { X = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); Y = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (sym && kov(X, Y) > 0) continue; print " "; PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; PrintKindValuePair(ky, Y); print "^"; } } return; } else if (task == RELS_EMPTY) { if (BlkValueRead(rel, RRV_USED) == 0) rtrue; if (X == 1) { TwoInOneHashTableRelationHandler(rel, RELS_DESTROY); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 4*at; BlkValueWrite(rel, tmp, 0); BlkValueWrite(rel, tmp + 1, 0); BlkValueWrite(rel, tmp + 2, 0); BlkValueWrite(rel, tmp + 3, 0); } BlkValueWrite(rel, RRV_USED, 0); BlkValueWrite(rel, RRV_FILLED, 0); rtrue; } rfalse; } else if (task == RELS_LOOKUP_ANY) { switch (Y) { RLANY_GET_X, RLANY_CAN_GET_X: at = TwoInOneLookUp(rel, ky, X, RRF_ENTKEYY); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASX) { if (Y == RLANY_CAN_GET_X) rtrue; return BlkValueRead(rel, tmp + 2); } } RLANY_GET_Y, RLANY_CAN_GET_Y: at = TwoInOneLookUp(rel, kx, X, RRF_ENTKEYX); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASY) { if (Y == RLANY_CAN_GET_Y) rtrue; return BlkValueRead(rel, tmp + 3); } } } if (Y == RLANY_GET_X or RLANY_GET_Y) print "*** Lookup failed: value not found ***^"; rfalse; } else if (task == RELS_LOOKUP_ALL_X) { at = TwoInOneLookUp(rel, ky, X, RRF_ENTKEYY); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASX) LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 2)); } return Y; } else if (task == RELS_LOOKUP_ALL_Y) { at = TwoInOneLookUp(rel, kx, X, RRF_ENTKEYX); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASY) LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 3)); } return Y; } else if (task == RELS_LIST) { switch (Y) { RLIST_ALL_X: fl = RRF_USED+RRF_ENTKEYX+RRF_HASY; jump ListEntryKeys; RLIST_ALL_Y: fl = RRF_USED+RRF_ENTKEYY+RRF_HASX; .ListEntryKeys; for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 4*at; if ((BlkValueRead(rel, tmp) & fl) == fl) LIST_OF_TY_InsertItem(X, BlkValueRead(rel, tmp + 1), false, 0, true); } RLIST_ALL_PAIRS: tmp = BlkValueRead(X, LIST_ITEM_KOV_F); if (KindAtomic(tmp) ~= COMBINATION_TY) rfalse; ! LIST_OF_TY_InsertItem will make a deep copy of the item, ! so we can reuse a single combination value here Y = BlkValueCreate(COMBINATION_TY, 0, tmp); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 4*at; fl = BlkValueRead(rel, tmp); if ((fl & (RRF_USED+RRF_ENTKEYX+RRF_HASY)) == (RRF_USED+RRF_ENTKEYX+RRF_HASY)) { BlkValueWrite(Y, COMBINATION_ITEM_BASE, BlkValueRead(rel, tmp + 1)); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, BlkValueRead(rel, tmp + 3)); LIST_OF_TY_InsertItem(X, Y); } } BlkValueWrite(Y, COMBINATION_ITEM_BASE, 0); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, 0); BlkFree(Y); return X; } return X; } at = TwoInOneLookUp(rel, kx, X, RRF_ENTKEYX); switch(task) { RELS_TEST: if (at < 0) rfalse; fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (~~(fl & RRF_HASY)) rfalse; tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } rfalse; RELS_ASSERT_TRUE: if (at < 0) { ! create a new forward entry at = ~at; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); fl = RRF_USED+RRF_HASY+RRF_ENTKEYX; if (kx == ky || ~~(KOVIsBlockValue(kx) || KOVIsBlockValue(ky))) fl = fl + RRF_ENTKEYY; BlkValueWrite(rel, RRV_DATA_BASE + 4*at, fl); if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 2, 0); } else { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl & RRF_HASY) { ! if the Y we're inserting is already there, we're done tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } ! it's different, so delete the reverse entry at2 = TwoInOneLookUp(rel, ky, tmp, RRF_ENTKEYY); if (at2 >= 0) TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYY); } else { BlkValueWrite(rel, RRV_DATA_BASE + 4*at, fl + RRF_HASY); } ! use the existing copy of X X = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); } ! use the existing copy of Y if there is one at2 = TwoInOneLookUp(rel, ky, Y, RRF_ENTKEYY); if (KOVIsBlockValue(ky)) { if (at2 >= 0) Y = BlkValueRead(rel, RRV_DATA_BASE + 4*at2 + 1); else Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 3, Y); if (at2 >= 0) { ! delete existing reverse entry (and its own forward entry) TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYY, 1); } else { at2 = ~at2; } ! create reverse entry BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at2); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); fl = fl | (RRF_USED+RRF_HASX+RRF_ENTKEYY); if (kx == ky || ~~(KOVIsBlockValue(kx) || KOVIsBlockValue(ky))) fl = fl | RRF_ENTKEYX; BlkValueWrite(rel, RRV_DATA_BASE + 4*at2, fl); BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 1, Y); BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 2, X); TwoInOneCheckResize(rel); rtrue; RELS_ASSERT_FALSE: ! we only have work to do if the entry exists and has a Y which ! matches the Y we're deleting if (at < 0) rtrue; fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if ((fl & RRF_HASY) == 0) rtrue; tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) ~= 0) rtrue; } else { if (tmp ~= Y) rtrue; } TwoInOneDelete(rel, at, kx, ky, RRF_ENTKEYX, 1); rtrue; } ]; [ TwoInOneDelete rel at kx ky ekflag both fl at2 E i; !print "[2in1DEL at=", at, " (E=", BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1), ") ekflag=", ekflag, " both=", both, "]^"; fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (ekflag == RRF_ENTKEYX) { if (fl & RRF_HASY) { i = RRV_DATA_BASE + 4*at + 3; if (both) E = BlkValueRead(rel, i); BlkValueWrite(rel, i, 0); ! delete matching Y<-X entry if needed if (both) { at2 = TwoInOneLookUp(rel, ky, E, RRF_ENTKEYY); if (at2 >= 0) TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYY); if (at2 == at) fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); } fl = fl & ~RRF_HASY; } } else { if (fl & RRF_HASX) { i = RRV_DATA_BASE + 4*at + 2; if (both) E = BlkValueRead(rel, i); BlkValueWrite(rel, i, 0); ! delete matching X->Y entry if needed if (both) { at2 = TwoInOneLookUp(rel, kx, E, RRF_ENTKEYX); if (at2 >= 0) { TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYX); if (at2 == at) fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); } } fl = fl & ~RRF_HASX; } } if ((fl & (RRF_HASX+RRF_HASY)) == 0) { ! entry is now empty, mark it deleted if (((fl & RRF_ENTKEYX) && KOVIsBlockValue(kx)) || ((ky ~= kx) && (fl & RRF_ENTKEYY) && KOVIsBlockValue(ky))) { BlkFree(BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1)); } BlkValueWrite(rel, RRV_DATA_BASE + 4*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 2, 0); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 3, 0); BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); } else { BlkValueWrite(rel, RRV_DATA_BASE + 4*at, fl); } ]; [ TwoInOneLookUp rel ke E ekflag hashv i free mask perturb flags; !print "[2in1LU rel=", rel, " ke=", ke, " E=", E, " ekf=", ekflag, ": "; ! calculate a hash value for the key hashv = KOVHashValue(ke, E); ! look in the first expected slot mask = BlkValueRead(rel, RRV_STORAGE); i = hashv & mask; !print "hv=", hashv, ", trying ", i; flags = BlkValueRead(rel, RRV_DATA_BASE + 4*i); if (flags == 0) { !print " - not found]^"; return ~i; } if ((flags & ekflag) && TwoInOneEntryMatches(rel, i, ke, E)) { !print " - found]^"; return i; } ! not here, keep looking in sequence free = -1; if (flags & RRF_DELETED) free = i; perturb = hashv; hashv = i; for (::) { hashv = hashv*5 + perturb + 1; i = hashv & mask; !print ", ", i; flags = BlkValueRead(rel, RRV_DATA_BASE + 4*i); if (flags == 0) { !print " - not found]^"; if (free >= 0) return ~free; return ~i; } if ((flags & ekflag) && TwoInOneEntryMatches(rel, i, ke, E)) { !print " - found]^"; return i; } if ((free < 0) && (flags & RRF_DELETED)) free = i; #ifdef TARGET_ZCODE; @log_shift perturb (-RRP_PERTURB_SHIFT) -> perturb; #ifnot; @ushiftr perturb RRP_PERTURB_SHIFT perturb; #endif; } ]; [ TwoInOneCheckResize rel filled ext newext temp i at kov kx ky F E X Y; filled = BlkValueRead(rel, RRV_FILLED); ext = BlkValueRead(rel, RRV_STORAGE) + 1; if (filled >= (ext - filled) * RRP_CROWDED_IS) { ! copy entries to temporary space temp = BlkAllocate(ext * (4*WORDSIZE), INDEXED_TEXT_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); for (i=0: i= RRP_LARGE_IS) newext = ext * RRP_RESIZE_LARGE; else newext = ext * RRP_RESIZE_SMALL; BlkValueSetExtent(rel, RRV_DATA_BASE + newext*4); BlkValueWrite(rel, RRV_STORAGE, newext - 1); BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_USED)); for (i=0: i= 0) { print "*** Duplicate entry while resizing ***^"; rfalse; } at = ~at; BlkValueWrite(rel, RRV_DATA_BASE + 4*at, F); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, E); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 2, X); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 3, Y); } ! done with temporary space BlkFree(temp); } ]; [ TwoInOneEntryMatches rel at ke E ce; ce = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); if (KOVIsBlockValue(ke)) { if (BlkValueCompare(ce, E) ~= 0) rfalse; } else { if (ce ~= E) rfalse; } rtrue; ]; #IFNOT; ! IFDEF MEMORY_HEAP_SIZE [ RELATION_TY_Support t a b c; rfalse; ]; [ RELATION_TY_Say comb; ]; [ RELATION_TY_Name rel txt; ]; #ENDIF; ! IFDEF MEMORY_HEAP_SIZE [ RELATION_TY_Empty rel set handler; handler = rel-->RR_HANDLER; return handler(rel, RELS_EMPTY, set); ]; Array ResourceIDsOfFigures --> 0 1 3 0; Array ResourceIDsOfSounds --> 0 0; [ CreateBlockConstants; ]; ! End of automatically generated I6 source ! --------------------------------------------------------------------------